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 { |