| Index: include/core/SkDrawLooper.h
|
| diff --git a/include/core/SkDrawLooper.h b/include/core/SkDrawLooper.h
|
| index 4609c1dcf90ddb67a4708909ea209b5063fcfe18..65650d88e84c6d851bdf2ebb33fbf0655088b004 100644
|
| --- a/include/core/SkDrawLooper.h
|
| +++ b/include/core/SkDrawLooper.h
|
| @@ -30,24 +30,49 @@ public:
|
| SK_DECLARE_INST_COUNT(SkDrawLooper)
|
|
|
| /**
|
| - * Called right before something is being drawn. This will be followed by
|
| - * calls to next() until next() returns false.
|
| + * Holds state during a draw. Users call next() until it returns false.
|
| + *
|
| + * Subclasses of SkDrawLooper should create a subclass of this object to
|
| + * hold state specific to their subclass.
|
| */
|
| - virtual void init(SkCanvas*) = 0;
|
| + class SK_API Context : public SkNoncopyable {
|
| + public:
|
| + Context() {}
|
| + virtual ~Context() {}
|
| +
|
| + /**
|
| + * Called in a loop on objects returned by SkDrawLooper::createContext().
|
| + * Each time true is returned, the object is drawn (possibly with a modified
|
| + * canvas and/or paint). When false is finally returned, drawing for the object
|
| + * stops.
|
| + *
|
| + * On each call, the paint will be in its original state, but the
|
| + * canvas will be as it was following the previous call to next() or
|
| + * createContext().
|
| + *
|
| + * The implementation must ensure that, when next() finally returns
|
| + * false, the canvas has been restored to the state it was
|
| + * initially, before createContext() was first called.
|
| + */
|
| + virtual bool next(SkCanvas* canvas, SkPaint* paint) = 0;
|
| + };
|
|
|
| /**
|
| - * Called in a loop (after init()). Each time true is returned, the object
|
| - * is drawn (possibly with a modified canvas and/or paint). When false is
|
| - * finally returned, drawing for the object stops.
|
| - *
|
| - * On each call, the paint will be in its original state, but the canvas
|
| - * will be as it was following the previous call to next() or init().
|
| - *
|
| - * The implementation must ensure that, when next() finally returns false,
|
| - * that the canvas has been restored to the state it was initially, before
|
| - * init() was first called.
|
| + * Called right before something is being drawn. Returns a Context
|
| + * whose next() method should be called until it returns false.
|
| + * The caller has to ensure that the storage pointer provides enough
|
| + * memory for the Context. The required size can be queried by calling
|
| + * contextSize(). It is also the caller's responsibility to destroy the
|
| + * object after use.
|
| */
|
| - virtual bool next(SkCanvas*, SkPaint* paint) = 0;
|
| + virtual Context* createContext(SkCanvas*, void* storage) const = 0;
|
| +
|
| + /**
|
| + * Returns the number of bytes needed to store subclasses of Context (belonging to the
|
| + * corresponding SkDrawLooper subclass).
|
| + */
|
| + virtual size_t contextSize() const = 0;
|
| +
|
|
|
| /**
|
| * The fast bounds functions are used to enable the paint to be culled early
|
| @@ -59,9 +84,9 @@ public:
|
| * storage rect, where the storage rect is with the union of the src rect
|
| * and the looper's bounding rect.
|
| */
|
| - virtual bool canComputeFastBounds(const SkPaint& paint);
|
| + virtual bool canComputeFastBounds(const SkPaint& paint) const;
|
| virtual void computeFastBounds(const SkPaint& paint,
|
| - const SkRect& src, SkRect* dst);
|
| + const SkRect& src, SkRect* dst) const;
|
|
|
| SkDEVCODE(virtual void toString(SkString* str) const = 0;)
|
| SK_DEFINE_FLATTENABLE_TYPE(SkDrawLooper)
|
|
|