Chromium Code Reviews| Index: include/core/SkFlattenableBuffers.h |
| diff --git a/include/core/SkFlattenableBuffers.h b/include/core/SkFlattenableBuffers.h |
| index 03c03f3877e6f8e3f508d29e371d5c7ebd91624e..1937d3c06956b47aba3950b5b11e3cc7f434394f 100644 |
| --- a/include/core/SkFlattenableBuffers.h |
| +++ b/include/core/SkFlattenableBuffers.h |
| @@ -29,6 +29,30 @@ class SkString; |
| class SkTypeface; |
| class SkWStream; |
| +class SkAnnotation; |
| +class SkColorTable; |
| +class SkData; |
| +class SkDataSet; |
| +class SkDrawLooper; |
| +class SkLight; |
| +class SkPixelRef; |
| +class SkUnitMapper; |
| + |
| +enum SkEffectType { |
| + kUnknown_SkEffectType, |
|
sugoi
2013/10/10 18:15:14
Having an "unknown" type defeats the purpose of ha
|
| + |
| + kColorFilter_SkEffectType, |
| + kDrawLooper_SkEffectType, |
| + kImageFilter_SkEffectType, |
| + kMaskFilter_SkEffectType, |
| + kPathEffect_SkEffectType, |
| + kPixelRef_SkEffectType, |
| + kRasterizer_SkEffectType, |
| + kShader_SkEffectType, |
| + kUnitMapper_SkEffectType, |
| + kXfermode_SkEffectType, |
| +}; |
| + |
| class SkFlattenableReadBuffer { |
| public: |
| SkFlattenableReadBuffer(); |
| @@ -63,8 +87,61 @@ public: |
| virtual void readString(SkString* string) = 0; |
| virtual void* readEncodedString(size_t* length, SkPaint::TextEncoding encoding) = 0; |
| + SkColorFilter* readColorFilter() { |
| + return (SkColorFilter*)this->readFlattenable(kColorFilter_SkEffectType); |
| + } |
| + SkDrawLooper* readDrawLooper() { |
| + return (SkDrawLooper*)this->readFlattenable(kDrawLooper_SkEffectType); |
| + } |
| + SkImageFilter* readImageFilter() { |
| + return (SkImageFilter*)this->readFlattenable(kImageFilter_SkEffectType); |
| + } |
| + SkMaskFilter* readMaskFilter() { |
| + return (SkMaskFilter*)this->readFlattenable(kMaskFilter_SkEffectType); |
| + } |
| + SkPathEffect* readPathEffect() { |
| + return (SkPathEffect*)this->readFlattenable(kPathEffect_SkEffectType); |
| + } |
| + SkPixelRef* readPixelRef() { |
| + return (SkPixelRef*)this->readFlattenable(kPixelRef_SkEffectType); |
| + } |
| + SkRasterizer* readRasterizer() { |
| + return (SkRasterizer*)this->readFlattenable(kRasterizer_SkEffectType); |
| + } |
| + SkShader* readShader() { |
| + return (SkShader*)this->readFlattenable(kShader_SkEffectType); |
| + } |
| + SkUnitMapper* readUnitMapper() { |
| + return (SkUnitMapper*)this->readFlattenable(kUnitMapper_SkEffectType); |
| + } |
| + SkXfermode* readXfermode() { |
| + return (SkXfermode*)this->readFlattenable(kXfermode_SkEffectType); |
| + } |
| + |
| + // Does support subclasses, but is internal to our impl, and is not in |
| + // core... |
| + // |
| + SkLight* readLight() { |
| + return (SkLight*)this->readFlattenable(kUnknown_SkEffectType); |
| + } |
| + |
| + // These flattenables do *not* support subclassing, so perhaps need not |
| + // actually inherit from SkFlattenable |
| + // |
| + SkAnnotation* readAnnotation() { |
| + return (SkAnnotation*)this->readFlattenable(kUnknown_SkEffectType); |
| + } |
| + SkColorTable* readColorTable() { |
| + return (SkColorTable*)this->readFlattenable(kUnknown_SkEffectType); |
| + } |
| + SkData* readData() { |
| + return (SkData*)this->readFlattenable(kUnknown_SkEffectType); |
| + } |
| + SkDataSet* readDataSet() { |
| + return (SkDataSet*)this->readFlattenable(kUnknown_SkEffectType); |
| + } |
| + |
| // common data structures |
| - virtual SkFlattenable* readFlattenable() = 0; |
| virtual void readPoint(SkPoint* point) = 0; |
| virtual void readMatrix(SkMatrix* matrix) = 0; |
| virtual void readIRect(SkIRect* rect) = 0; |
| @@ -98,11 +175,9 @@ public: |
| return point; |
| } |
| - template <typename T> T* readFlattenableT() { |
| - return static_cast<T*>(this->readFlattenable()); |
| - } |
| - |
| private: |
| + virtual SkFlattenable* readFlattenable(SkEffectType) = 0; |
| + |
| uint32_t fFlags; |
| }; |