diff options
author | 2011-08-09 22:42:10 +0000 | |
---|---|---|
committer | 2011-08-09 22:42:10 +0000 | |
commit | c34d7cfca1892babc0c3b8811da1201ef466bd03 (patch) | |
tree | 4929c969048b1d56c2c6a65f368da7bf8be610c1 | |
parent | 236d8e1c8b130f1d490c27a909712ea68ce45801 (diff) |
re-get the function-ptr when we unflatten a ProcCoeffXfermode
git-svn-id: http://skia.googlecode.com/svn/trunk@2093 2bbb7eff-a529-9590-31e7-b0007b416f81
-rw-r--r-- | include/core/SkXfermode.h | 5 | ||||
-rw-r--r-- | src/core/SkXfermode.cpp | 11 |
2 files changed, 12 insertions, 4 deletions
diff --git a/include/core/SkXfermode.h b/include/core/SkXfermode.h index 843e5e6bb0..7eedc1d364 100644 --- a/include/core/SkXfermode.h +++ b/include/core/SkXfermode.h @@ -208,6 +208,11 @@ public: protected: SkProcXfermode(SkFlattenableReadBuffer&); + // allow subclasses to update this after we unflatten + void setProc(SkXfermodeProc proc) { + fProc = proc; + } + private: SkXfermodeProc fProc; diff --git a/src/core/SkXfermode.cpp b/src/core/SkXfermode.cpp index e5dbb85b53..8773c400d4 100644 --- a/src/core/SkXfermode.cpp +++ b/src/core/SkXfermode.cpp @@ -737,8 +737,6 @@ public: virtual void flatten(SkFlattenableWriteBuffer& buffer) { this->INHERITED::flatten(buffer); buffer.write32(fMode); - buffer.write32(fSrcCoeff); - buffer.write32(fDstCoeff); } static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) { @@ -749,8 +747,13 @@ protected: SkProcCoeffXfermode(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) { fMode = (SkXfermode::Mode)buffer.readU32(); - fSrcCoeff = (Coeff)buffer.readU32(); - fDstCoeff = (Coeff)buffer.readU32(); + + const ProcCoeff& rec = gProcCoeffs[fMode]; + // these may be valid, or may be CANNOT_USE_COEFF + fSrcCoeff = rec.fSC; + fDstCoeff = rec.fDC; + // now update our function-ptr in the super class + this->INHERITED::setProc(rec.fProc); } private: |