diff options
author | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2014-03-12 09:42:01 +0000 |
---|---|---|
committer | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2014-03-12 09:42:01 +0000 |
commit | 79fbb40bca9d815ef79b896b31ba6ee736817e0f (patch) | |
tree | e68a9d73abf9bdbef00d5facf6ca406a395527f7 /include/effects/SkLayerDrawLooper.h | |
parent | ad07e69d4cbd4924678f923d744dc01517bd6a78 (diff) |
[WIP] Add Context to SkDrawLooper.
SkDrawLooper carries some state during draws. This CL extracts this state into
a separate class Context, which is then passed by the users of SkDrawLooper
into the appropriate methods.
This is a step towards making SkDrawLooper immutable.
BUG=skia:2141
R=scroggo@google.com, reed@google.com, sugoi@google.com
Author: dominikg@chromium.org
Review URL: https://codereview.chromium.org/155513012
git-svn-id: http://skia.googlecode.com/svn/trunk@13760 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'include/effects/SkLayerDrawLooper.h')
-rw-r--r-- | include/effects/SkLayerDrawLooper.h | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/include/effects/SkLayerDrawLooper.h b/include/effects/SkLayerDrawLooper.h index 241b3b2494..7a13b7a7b9 100644 --- a/include/effects/SkLayerDrawLooper.h +++ b/include/effects/SkLayerDrawLooper.h @@ -94,9 +94,9 @@ public: /// Similar to addLayer, but adds a layer to the top. SkPaint* addLayerOnTop(const LayerInfo&); - // overrides from SkDrawLooper - virtual void init(SkCanvas*); - virtual bool next(SkCanvas*, SkPaint* paint); + virtual SkDrawLooper::Context* createContext(SkCanvas*, void* storage) const SK_OVERRIDE; + + virtual size_t contextSize() const SK_OVERRIDE { return sizeof(LayerDrawLooperContext); } SK_DEVELOPER_TO_STRING() @@ -118,9 +118,18 @@ private: int fCount; // state-machine during the init/next cycle - Rec* fCurrRec; + class LayerDrawLooperContext : public SkDrawLooper::Context { + public: + explicit LayerDrawLooperContext(const SkLayerDrawLooper* looper); + + protected: + virtual bool next(SkCanvas*, SkPaint* paint) SK_OVERRIDE; - static void ApplyInfo(SkPaint* dst, const SkPaint& src, const LayerInfo&); + private: + Rec* fCurrRec; + + static void ApplyInfo(SkPaint* dst, const SkPaint& src, const LayerInfo&); + }; class MyRegistrar : public SkFlattenable::Registrar { public: |