diff options
author | mike@reedtribe.org <mike@reedtribe.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2011-04-08 02:41:54 +0000 |
---|---|---|
committer | mike@reedtribe.org <mike@reedtribe.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2011-04-08 02:41:54 +0000 |
commit | 0e2810be95d3f1aa95c341521d3f514eb9e9ebde (patch) | |
tree | e3d2e06e5a95fc3e23d2c861a15a13848be87dfc /include/effects/SkLayerDrawLooper.h | |
parent | bd36ebe29463c4b70f5c91bb2440cdcf45b22b52 (diff) |
add optional bitflags to control which aspect of each layer's paint is applied
git-svn-id: http://skia.googlecode.com/svn/trunk@1083 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'include/effects/SkLayerDrawLooper.h')
-rw-r--r-- | include/effects/SkLayerDrawLooper.h | 40 |
1 files changed, 32 insertions, 8 deletions
diff --git a/include/effects/SkLayerDrawLooper.h b/include/effects/SkLayerDrawLooper.h index d35d70d7dd..682a9dc119 100644 --- a/include/effects/SkLayerDrawLooper.h +++ b/include/effects/SkLayerDrawLooper.h @@ -9,17 +9,38 @@ class SkLayerDrawLooper : public SkDrawLooper { public: SkLayerDrawLooper(); virtual ~SkLayerDrawLooper(); + + enum Bits { + kAlpha_Bit = 1 << 0, //!< use this layer's alpha + kColor_Bit = 1 << 1, //!< use this layer's color + kStyle_Bit = 1 << 2, //!< use this layer's Style/stroke settings + kTextSkewX_Bit = 1 << 3, //!< use this layer's textskewx + kPathEffect_Bit = 1 << 4, //!< use this layer's patheffect + kMaskFilter_Bit = 1 << 5, //!< use this layer's maskfilter + kShader_Bit = 1 << 6, //!< use this layer's shader + kColorFilter_Bit = 1 << 7, //!< use this layer's colorfilter + kXfermode_Bit = 1 << 8, //!< use this layer's xfermode + + kEntirePaint_Bits = -1, //!< use this layer's paint entirely + }; + typedef int32_t BitFlags; - /** Call for each layer you want to add (from top to bottom). - This returns a paint you can modify, but that ptr is only valid until - the next call made to this object. + /** + * Call for each layer you want to add (from top to bottom). + * This returns a paint you can modify, but that ptr is only valid until + * the next call made to this object. + * + * The optional bits parameter specifies which aspects of this paint + * should replace the paint that is passed to the draw call. If 0 is + * specified, then this layer's paint will be ignored. */ - SkPaint* addLayer(SkScalar dx, SkScalar dy); + SkPaint* addLayer(SkScalar dx, SkScalar dy, BitFlags = kEntirePaint_Bits); - /** Helper for addLayer() which passes (0, 0) for the offset parameters + /** + * Helper for addLayer() which passes (0, 0) for the offset parameters */ - SkPaint* addLayer() { - return this->addLayer(0, 0); + SkPaint* addLayer(BitFlags bits = kEntirePaint_Bits) { + return this->addLayer(0, 0, bits); } // overrides from SkDrawLooper @@ -43,6 +64,7 @@ private: Rec* fNext; SkPaint fPaint; SkPoint fOffset; + uint32_t fBits; static Rec* Reverse(Rec*); }; @@ -51,7 +73,9 @@ private: // state-machine during the init/next cycle Rec* fCurrRec; - + + static void ApplyBits(SkPaint* dst, const SkPaint& src, BitFlags bits); + class MyRegistrar : public SkFlattenable::Registrar { public: MyRegistrar(); |