DM: use SkFunction to make required argument type clearer.

Previously it was hard to tell that DrawFn took an SkCanvas* and returned an Error.  Now it's clear from the type.

BUG=skia:

Review URL: https://codereview.chromium.org/1125233002
This commit is contained in:
mtklein 2015-05-07 10:53:34 -07:00 committed by Commit bot
parent 4525f438a8
commit e44b5084d8

View File

@ -13,6 +13,7 @@
#include "SkDeferredCanvas.h" #include "SkDeferredCanvas.h"
#include "SkDocument.h" #include "SkDocument.h"
#include "SkError.h" #include "SkError.h"
#include "SkFunction.h"
#include "SkImageGenerator.h" #include "SkImageGenerator.h"
#include "SkMultiPictureDraw.h" #include "SkMultiPictureDraw.h"
#include "SkNullCanvas.h" #include "SkNullCanvas.h"
@ -493,21 +494,20 @@ Error RasterSink::draw(const Src& src, SkBitmap* dst, SkWStream*, SkString*) con
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
// Handy for front-patching a Src. Do whatever up-front work you need, then call draw_to_canvas(), // Handy for front-patching a Src. Do whatever up-front work you need, then call draw_to_canvas(),
// passing the Sink draw() arguments, a size, and a lambda that takes SkCanvas* and returns Error. // passing the Sink draw() arguments, a size, and a function draws into an SkCanvas.
// Several examples below. // Several examples below.
template <typename DrawFn>
static Error draw_to_canvas(Sink* sink, SkBitmap* bitmap, SkWStream* stream, SkString* log, static Error draw_to_canvas(Sink* sink, SkBitmap* bitmap, SkWStream* stream, SkString* log,
SkISize size, DrawFn draw) { SkISize size, SkFunction<Error(SkCanvas*)> draw) {
class ProxySrc : public Src { class ProxySrc : public Src {
public: public:
ProxySrc(SkISize size, DrawFn draw) : fSize(size), fDraw(draw) {} ProxySrc(SkISize size, SkFunction<Error(SkCanvas*)> draw) : fSize(size), fDraw(draw) {}
Error draw(SkCanvas* canvas) const override { return fDraw(canvas); } Error draw(SkCanvas* canvas) const override { return fDraw(canvas); }
Name name() const override { sk_throw(); return ""; } // Won't be called. Name name() const override { sk_throw(); return ""; } // Won't be called.
SkISize size() const override { return fSize; } SkISize size() const override { return fSize; }
private: private:
SkISize fSize; SkISize fSize;
DrawFn fDraw; SkFunction<Error(SkCanvas*)> fDraw;
}; };
return sink->draw(ProxySrc(size, draw), bitmap, stream, log); return sink->draw(ProxySrc(size, draw), bitmap, stream, log);
} }