aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-08-09 22:42:10 +0000
committerGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-08-09 22:42:10 +0000
commitc34d7cfca1892babc0c3b8811da1201ef466bd03 (patch)
tree4929c969048b1d56c2c6a65f368da7bf8be610c1
parent236d8e1c8b130f1d490c27a909712ea68ce45801 (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.h5
-rw-r--r--src/core/SkXfermode.cpp11
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: