add getMetaData() to SkCanvas (as part of our master plan to remove
subclasses of SkCanvas and SkDevice from our clients.



git-svn-id: http://skia.googlecode.com/svn/trunk@5679 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h
index 0ee29ea..9480184 100644
--- a/include/core/SkCanvas.h
+++ b/include/core/SkCanvas.h
@@ -25,6 +25,7 @@
 class SkDevice;
 class SkDraw;
 class SkDrawFilter;
+class SkMetaData;
 class SkPicture;
 class SkSurface_Base;
 
@@ -62,6 +63,8 @@
     explicit SkCanvas(const SkBitmap& bitmap);
     virtual ~SkCanvas();
 
+    SkMetaData& getMetaData();
+
     ///////////////////////////////////////////////////////////////////////////
 
     /**
@@ -986,6 +989,8 @@
     SkDevice*   fLastDeviceToGainFocus;
     int         fSaveLayerCount;    // number of successful saveLayer calls
 
+    SkMetaData* fMetaData;
+
     SkSurface_Base*  fSurfaceBase;
     SkSurface_Base* getSurfaceBase() const { return fSurfaceBase; }
     void setSurfaceBase(SkSurface_Base* sb) {
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index 7d55c3c..28a2bc4 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -13,6 +13,7 @@
 #include "SkDraw.h"
 #include "SkDrawFilter.h"
 #include "SkDrawLooper.h"
+#include "SkMetaData.h"
 #include "SkPicture.h"
 #include "SkRasterClip.h"
 #include "SkScalarCompare.h"
@@ -457,6 +458,7 @@
     fLastDeviceToGainFocus = NULL;
     fDeviceCMDirty = false;
     fSaveLayerCount = 0;
+    fMetaData = NULL;
 
     fMCRec = (MCRec*)fMCStack.push_back();
     new (fMCRec) MCRec(NULL, 0);
@@ -503,6 +505,7 @@
     this->internalRestore();    // restore the last, since we're going away
 
     SkSafeUnref(fBounder);
+    SkDELETE(fMetaData);
 
     dec_canvas();
 }
@@ -521,6 +524,15 @@
     return filter;
 }
 
+SkMetaData& SkCanvas::getMetaData() {
+    // metadata users are rare, so we lazily allocate it. If that changes we
+    // can decide to just make it a field in the device (rather than a ptr)
+    if (NULL == fMetaData) {
+        fMetaData = new SkMetaData;
+    }
+    return *fMetaData;
+}
+
 ///////////////////////////////////////////////////////////////////////////////
 
 void SkCanvas::flush() {