Chromium Code Reviews| Index: src/pipe/SkGPipeRead.cpp |
| diff --git a/src/pipe/SkGPipeRead.cpp b/src/pipe/SkGPipeRead.cpp |
| index a5f714480ecc50a5799d6f05b51f58c64c5a63b0..a32df73e6e2c2bc3bb00f5b305a48ba9fa2cf36d 100644 |
| --- a/src/pipe/SkGPipeRead.cpp |
| +++ b/src/pipe/SkGPipeRead.cpp |
| @@ -15,8 +15,10 @@ |
| #include "SkReader32.h" |
| #include "SkStream.h" |
| +#include "SkAnnotation.h" |
| #include "SkColorFilter.h" |
| #include "SkDrawLooper.h" |
| +#include "SkImageFilter.h" |
| #include "SkMaskFilter.h" |
| #include "SkOrderedReadBuffer.h" |
| #include "SkPathEffect.h" |
| @@ -61,6 +63,33 @@ static void set_paintflat(SkPaint* paint, SkFlattenable* obj, unsigned paintFlat |
| } |
| } |
| +static SkFlattenable* read_paintflat(SkFlattenableReadBuffer* reader, unsigned paintFlat) { |
|
reed1
2013/09/13 15:42:56
Seems like a lot of code to just check that paintF
sugoi1
2013/09/13 16:53:44
I'm not sure I understand. Each case uses a differ
|
| + SkASSERT(paintFlat < kCount_PaintFlats); |
| + switch (paintFlat) { |
| + case kColorFilter_PaintFlat: |
| + return reader->readFlattenableT<SkColorFilter>(); |
| + case kDrawLooper_PaintFlat: |
| + return reader->readFlattenableT<SkDrawLooper>(); |
| + case kMaskFilter_PaintFlat: |
| + return reader->readFlattenableT<SkMaskFilter>(); |
| + case kPathEffect_PaintFlat: |
| + return reader->readFlattenableT<SkPathEffect>(); |
| + case kRasterizer_PaintFlat: |
| + return reader->readFlattenableT<SkRasterizer>(); |
| + case kShader_PaintFlat: |
| + return reader->readFlattenableT<SkShader>(); |
| + case kImageFilter_PaintFlat: |
| + return reader->readFlattenableT<SkImageFilter>(); |
| + case kXfermode_PaintFlat: |
| + return reader->readFlattenableT<SkXfermode>(); |
| + case kAnnotation_PaintFlat: |
| + return reader->readFlattenableT<SkAnnotation>(); |
| + default: |
| + SkDEBUGFAIL("never gets here"); |
| + } |
| + return NULL; |
| +} |
| + |
| template <typename T> class SkRefCntTDArray : public SkTDArray<T> { |
| public: |
| ~SkRefCntTDArray() { this->unrefAll(); } |
| @@ -107,7 +136,7 @@ public: |
| void defFlattenable(PaintFlats pf, int index) { |
| index--; |
| - SkFlattenable* obj = fReader->readFlattenable(); |
| + SkFlattenable* obj = read_paintflat(fReader, pf); |
| if (fFlatArray.count() == index) { |
| *fFlatArray.append() = obj; |
| } else { |