| Index: src/core/SkXfermode.cpp
|
| diff --git a/src/core/SkXfermode.cpp b/src/core/SkXfermode.cpp
|
| index 0811808d46c3e72813b4c972337b4d662dcf0cee..501c19227626a07ce8f0e8df5ffb4e3502b987c8 100644
|
| --- a/src/core/SkXfermode.cpp
|
| +++ b/src/core/SkXfermode.cpp
|
| @@ -1240,6 +1240,7 @@ GrEffect* XferEffect::TestCreate(SkRandom* rand,
|
| ///////////////////////////////////////////////////////////////////////////////
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| +#ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING
|
| SkProcCoeffXfermode::SkProcCoeffXfermode(SkReadBuffer& buffer) : INHERITED(buffer) {
|
| uint32_t mode32 = buffer.read32() % SK_ARRAY_COUNT(gProcCoeffs);
|
| if (mode32 >= SK_ARRAY_COUNT(gProcCoeffs)) {
|
| @@ -1254,6 +1255,19 @@ SkProcCoeffXfermode::SkProcCoeffXfermode(SkReadBuffer& buffer) : INHERITED(buffe
|
| fSrcCoeff = rec.fSC;
|
| fDstCoeff = rec.fDC;
|
| }
|
| +#endif
|
| +
|
| +SkFlattenable* SkProcCoeffXfermode::CreateProc(SkReadBuffer& buffer) {
|
| + uint32_t mode32 = buffer.read32();
|
| + if (!buffer.validate(mode32 >= SK_ARRAY_COUNT(gProcCoeffs))) {
|
| + return NULL;
|
| + }
|
| + return SkXfermode::Create((SkXfermode::Mode)mode32);
|
| +}
|
| +
|
| +void SkProcCoeffXfermode::flatten(SkWriteBuffer& buffer) const {
|
| + buffer.write32(fMode);
|
| +}
|
|
|
| bool SkProcCoeffXfermode::asMode(Mode* mode) const {
|
| if (mode) {
|
| @@ -1376,11 +1390,6 @@ bool SkProcCoeffXfermode::asNewEffect(GrEffect** effect, GrTexture* background)
|
| }
|
| #endif
|
|
|
| -void SkProcCoeffXfermode::flatten(SkWriteBuffer& buffer) const {
|
| - this->INHERITED::flatten(buffer);
|
| - buffer.write32(fMode);
|
| -}
|
| -
|
| const char* SkXfermode::ModeName(Mode mode) {
|
| SkASSERT((unsigned) mode <= (unsigned)kLastMode);
|
| const char* gModeStrings[] = {
|
| @@ -1437,12 +1446,18 @@ public:
|
|
|
| private:
|
| SkClearXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kClear_Mode) {}
|
| - SkClearXfermode(SkReadBuffer& buffer)
|
| - : SkProcCoeffXfermode(buffer) {}
|
| +#ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING
|
| + SkClearXfermode(SkReadBuffer& buffer) : SkProcCoeffXfermode(buffer) {}
|
| +#endif
|
| + virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE {}
|
|
|
| typedef SkProcCoeffXfermode INHERITED;
|
| };
|
|
|
| +SkFlattenable* SkClearXfermode::CreateProc(SkReadBuffer& buffer) {
|
| + return SkXfermode::Create(kClear_Mode);
|
| +}
|
| +
|
| void SkClearXfermode::xfer32(SkPMColor* SK_RESTRICT dst,
|
| const SkPMColor* SK_RESTRICT, int count,
|
| const SkAlpha* SK_RESTRICT aa) const {
|
| @@ -1502,12 +1517,18 @@ public:
|
|
|
| private:
|
| SkSrcXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kSrc_Mode) {}
|
| - SkSrcXfermode(SkReadBuffer& buffer)
|
| - : SkProcCoeffXfermode(buffer) {}
|
| +#ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING
|
| + SkSrcXfermode(SkReadBuffer& buffer) : SkProcCoeffXfermode(buffer) {}
|
| +#endif
|
| + virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE {}
|
|
|
| typedef SkProcCoeffXfermode INHERITED;
|
| };
|
|
|
| +SkFlattenable* SkSrcXfermode::CreateProc(SkReadBuffer& buffer) {
|
| + return SkXfermode::Create(kSrc_Mode);
|
| +}
|
| +
|
| void SkSrcXfermode::xfer32(SkPMColor* SK_RESTRICT dst,
|
| const SkPMColor* SK_RESTRICT src, int count,
|
| const SkAlpha* SK_RESTRICT aa) const {
|
| @@ -1571,11 +1592,18 @@ public:
|
|
|
| private:
|
| SkDstInXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kDstIn_Mode) {}
|
| +#ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING
|
| SkDstInXfermode(SkReadBuffer& buffer) : INHERITED(buffer) {}
|
| +#endif
|
| + virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE {}
|
|
|
| typedef SkProcCoeffXfermode INHERITED;
|
| };
|
|
|
| +SkFlattenable* SkDstInXfermode::CreateProc(SkReadBuffer&) {
|
| + return SkXfermode::Create(kDstIn_Mode);
|
| +}
|
| +
|
| void SkDstInXfermode::xfer32(SkPMColor* SK_RESTRICT dst,
|
| const SkPMColor* SK_RESTRICT src, int count,
|
| const SkAlpha* SK_RESTRICT aa) const {
|
| @@ -1617,12 +1645,18 @@ public:
|
|
|
| private:
|
| SkDstOutXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kDstOut_Mode) {}
|
| - SkDstOutXfermode(SkReadBuffer& buffer)
|
| - : INHERITED(buffer) {}
|
| +#ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING
|
| + SkDstOutXfermode(SkReadBuffer& buffer) : INHERITED(buffer) {}
|
| +#endif
|
| + virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE {}
|
|
|
| typedef SkProcCoeffXfermode INHERITED;
|
| };
|
|
|
| +SkFlattenable* SkDstOutXfermode::CreateProc(SkReadBuffer&) {
|
| + return SkXfermode::Create(kDstOut_Mode);
|
| +}
|
| +
|
| void SkDstOutXfermode::xfer32(SkPMColor* SK_RESTRICT dst,
|
| const SkPMColor* SK_RESTRICT src, int count,
|
| const SkAlpha* SK_RESTRICT aa) const {
|
| @@ -1692,7 +1726,7 @@ SkXfermode* create_mode(int iMode) {
|
| break;
|
| default:
|
| // no special-case, just rely in the rec and its function-ptrs
|
| - xfer = SkProcCoeffXfermode::Create(rec, mode);
|
| + xfer = SkNEW_ARGS(SkProcCoeffXfermode, (rec, mode));
|
| break;
|
| }
|
| }
|
|
|