Add missing flattenable registrations and CreateProc() functions;
fixes gm --serialize xfermode test case.



git-svn-id: http://skia.googlecode.com/svn/trunk@1199 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/core/SkXfermode.cpp b/src/core/SkXfermode.cpp
index 06b97a9..90cf13a 100644
--- a/src/core/SkXfermode.cpp
+++ b/src/core/SkXfermode.cpp
@@ -98,7 +98,7 @@
     return dst;
 }
 
-//  kSrcOver_Mode,  //!< [Sa + Da - Sa*Da, Sc + (1 - Sa)*Dc] 
+//  kSrcOver_Mode,  //!< [Sa + Da - Sa*Da, Sc + (1 - Sa)*Dc]
 static SkPMColor srcover_modeproc(SkPMColor src, SkPMColor dst) {
 #if 0
     // this is the old, more-correct way, but it doesn't guarantee that dst==255
@@ -335,7 +335,7 @@
     if (0 == dst) {
         return src;
     }
-    
+
     int sa = SkGetPackedA32(src);
     int da = SkGetPackedA32(dst);
     int a = srcover_byte(sa, da);
@@ -531,7 +531,7 @@
                           const SK_RESTRICT SkAlpha aa[])
 {
     SkASSERT(dst && src && count >= 0);
-    
+
     if (NULL == aa) {
         for (int i = count - 1; i >= 0; --i) {
             SkPMColor dstC = SkPixel4444ToPixel32(dst[i]);
@@ -642,7 +642,7 @@
                               const SK_RESTRICT SkPMColor src[], int count,
                               const SK_RESTRICT SkAlpha aa[]) {
     SkASSERT(dst && src && count >= 0);
-    
+
     SkXfermodeProc proc = fProc;
 
     if (NULL != proc) {
@@ -739,7 +739,7 @@
         }
         return true;
     }
-    
+
     virtual Factory getFactory() { return CreateProc; }
     virtual void flatten(SkFlattenableWriteBuffer& buffer) {
         this->INHERITED::flatten(buffer);
@@ -748,6 +748,10 @@
         buffer.write32(fDstCoeff);
     }
 
+    static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) {
+        return SkNEW_ARGS(SkProcCoeffXfermode, (buffer));
+    }
+
 protected:
     SkProcCoeffXfermode(SkFlattenableReadBuffer& buffer)
             : INHERITED(buffer) {
@@ -755,13 +759,11 @@
         fSrcCoeff = (Coeff)buffer.readU32();
         fDstCoeff = (Coeff)buffer.readU32();
     }
-    
+
 private:
     Mode    fMode;
     Coeff   fSrcCoeff, fDstCoeff;
-    
-    static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) {
-    return SkNEW_ARGS(SkProcCoeffXfermode, (buffer)); }
+
 
     typedef SkProcXfermode INHERITED;
 };
@@ -808,16 +810,17 @@
             }
         }
     }
-    
+
     virtual Factory getFactory() { return CreateProc; }
 
+    static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) {
+        return SkNEW_ARGS(SkClearXfermode, (buffer));
+    }
+
 private:
     SkClearXfermode(SkFlattenableReadBuffer& buffer)
         : SkProcCoeffXfermode(buffer) {}
-    
-    static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) {
-        return SkNEW_ARGS(SkClearXfermode, (buffer));
-    }
+
 };
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -868,34 +871,35 @@
             }
         }
     }
-    
+
     virtual Factory getFactory() { return CreateProc; }
 
+    static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) {
+        return SkNEW_ARGS(SkSrcXfermode, (buffer));
+    }
+
 private:
     SkSrcXfermode(SkFlattenableReadBuffer& buffer)
         : SkProcCoeffXfermode(buffer) {}
-    
-    static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) {
-        return SkNEW_ARGS(SkSrcXfermode, (buffer));
-    }
+
 };
 
 class SkDstInXfermode : public SkProcCoeffXfermode {
 public:
     SkDstInXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kDstIn_Mode) {}
-    
+
     virtual void xfer32(SK_RESTRICT SkPMColor dst[],
                         const SK_RESTRICT SkPMColor src[], int count,
                         const SK_RESTRICT SkAlpha aa[]) {
         SkASSERT(dst && src);
-        
+
         if (count <= 0) {
             return;
         }
         if (NULL != aa) {
             return this->INHERITED::xfer32(dst, src, count, aa);
         }
-        
+
         do {
             unsigned a = SkGetPackedA32(*src);
             *dst = SkAlphaMulQ(*dst, SkAlpha255To256(a));
@@ -903,35 +907,35 @@
             src++;
         } while (--count != 0);
     }
-    
+
     virtual Factory getFactory() { return CreateProc; }
-    
-private:
-    SkDstInXfermode(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {}
-    
+
     static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) {
         return SkNEW_ARGS(SkDstInXfermode, (buffer));
     }
-    
+
+private:
+    SkDstInXfermode(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {}
+
     typedef SkProcCoeffXfermode INHERITED;
 };
 
 class SkDstOutXfermode : public SkProcCoeffXfermode {
 public:
     SkDstOutXfermode(const ProcCoeff& rec) : SkProcCoeffXfermode(rec, kDstOut_Mode) {}
-    
+
     virtual void xfer32(SK_RESTRICT SkPMColor dst[],
                         const SK_RESTRICT SkPMColor src[], int count,
                         const SK_RESTRICT SkAlpha aa[]) {
         SkASSERT(dst && src);
-        
+
         if (count <= 0) {
             return;
         }
         if (NULL != aa) {
             return this->INHERITED::xfer32(dst, src, count, aa);
         }
-        
+
         do {
             unsigned a = SkGetPackedA32(*src);
             *dst = SkAlphaMulQ(*dst, SkAlpha255To256(255 - a));
@@ -939,17 +943,17 @@
             src++;
         } while (--count != 0);
     }
-    
+
     virtual Factory getFactory() { return CreateProc; }
-    
-private:
-    SkDstOutXfermode(SkFlattenableReadBuffer& buffer)
-        : INHERITED(buffer) {}
-    
+
     static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) {
         return SkNEW_ARGS(SkDstOutXfermode, (buffer));
     }
-    
+
+private:
+    SkDstOutXfermode(SkFlattenableReadBuffer& buffer)
+        : INHERITED(buffer) {}
+
     typedef SkProcCoeffXfermode INHERITED;
 };
 
@@ -987,18 +991,18 @@
 
 bool SkXfermode::ModeAsCoeff(Mode mode, Coeff* src, Coeff* dst) {
     SkASSERT(SK_ARRAY_COUNT(gProcCoeffs) == kModeCount);
-    
+
     if ((unsigned)mode >= (unsigned)kModeCount) {
         // illegal mode parameter
         return false;
     }
-    
+
     const ProcCoeff& rec = gProcCoeffs[mode];
-    
+
     if (CANNOT_USE_COEFF == rec.fSC) {
         return false;
     }
-    
+
     SkASSERT(CANNOT_USE_COEFF != rec.fDC);
     if (src) {
         *src = rec.fSC;
@@ -1080,7 +1084,7 @@
 
 static uint16_t srcatop_modeproc16(SkPMColor src, uint16_t dst) {
     unsigned isa = 255 - SkGetPackedA32(src);
-    
+
     return SkPackRGB16(
            SkPacked32ToR16(src) + SkAlphaMulAlpha(SkGetPackedR16(dst), isa),
            SkPacked32ToG16(src) + SkAlphaMulAlpha(SkGetPackedG16(dst), isa),
@@ -1194,3 +1198,18 @@
     return proc16;
 }
 
+static SkFlattenable::Registrar
+    gSkProcCoeffXfermodeReg("SkProcCoeffXfermode",
+                            SkProcCoeffXfermode::CreateProc);
+
+static SkFlattenable::Registrar
+    gSkClearXfermodeReg("SkClearXfermode", SkClearXfermode::CreateProc);
+
+static SkFlattenable::Registrar
+    gSkSrcXfermodeReg("SkSrcXfermode", SkSrcXfermode::CreateProc);
+
+static SkFlattenable::Registrar
+    gSkDstInXfermodeReg("SkDstInXfermode", SkDstInXfermode::CreateProc);
+
+static SkFlattenable::Registrar
+    gSkDstOutXfermodeReg("SkDstOutXfermode", SkDstOutXfermode::CreateProc);