Create macro for registering classes for deserialization
Review URL: https://codereview.appspot.com/5909063

git-svn-id: http://skia.googlecode.com/svn/trunk@3494 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gm/imagefiltersbase.cpp b/gm/imagefiltersbase.cpp
index bde2612..130ba5b 100644
--- a/gm/imagefiltersbase.cpp
+++ b/gm/imagefiltersbase.cpp
@@ -17,8 +17,8 @@
 class FailImageFilter : public SkImageFilter {
 public:
     FailImageFilter() {}
-    virtual Factory getFactory() SK_OVERRIDE { return CreateProc; };
-    
+
+    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(FailImageFilter)
 protected:
     virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
                                SkBitmap* result, SkIPoint* offset) {
@@ -28,18 +28,18 @@
     FailImageFilter(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {}
 
 private:
-    static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) {
-        return new FailImageFilter(buffer);
-    }
-    
     typedef SkImageFilter INHERITED;
 };
 
+// register the filter with the flattenable registry
+static SkFlattenable::Registrar gFailImageFilterReg("FailImageFilter",
+                                                    FailImageFilter::CreateProc);
+
 class IdentityImageFilter : public SkImageFilter {
 public:
     IdentityImageFilter() {}
-    virtual Factory getFactory() SK_OVERRIDE { return CreateProc; };
 
+    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(IdentityImageFilter)
 protected:
     virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
                                SkBitmap* result, SkIPoint* offset) {
@@ -50,13 +50,14 @@
     IdentityImageFilter(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {}
 
 private:
-    static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) {
-        return new IdentityImageFilter(buffer);
-    }
-    
     typedef SkImageFilter INHERITED;
 };
 
+// register the filter with the flattenable registry
+static SkFlattenable::Registrar gIdentityImageFilterReg("IdentityImageFilter",
+                                                        IdentityImageFilter::CreateProc);
+
+
 ///////////////////////////////////////////////////////////////////////////////
 
 static void draw_paint(SkCanvas* canvas, const SkRect& r, SkImageFilter* imf) {