Revert r2250 - removal of setMatrixClip() - because Chrome makes heavy use
of those functions in a way we're not yet ready to clean up.



git-svn-id: http://skia.googlecode.com/svn/trunk@2254 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/include/core/SkDevice.h b/include/core/SkDevice.h
index 30f0dec..d4afd69 100644
--- a/include/core/SkDevice.h
+++ b/include/core/SkDevice.h
@@ -73,14 +73,14 @@
         kVector_Capability = 0x2,  //!< mask indicating a vector representation
         kAll_Capabilities  = 0x3
     };
-    virtual uint32_t getDeviceCapabilities();
+    virtual uint32_t getDeviceCapabilities() { return 0; }
 
     /** Return the width of the device (in pixels).
     */
-    virtual int width() const;
+    virtual int width() const { return fBitmap.width(); }
     /** Return the height of the device (in pixels).
     */
-    virtual int height() const;
+    virtual int height() const { return fBitmap.height(); }
 
     /**
      *  Return the bounds of the device in the coordinate space of the root
@@ -154,22 +154,25 @@
     virtual bool filterTextFlags(const SkPaint& paint, TextFlags*);
 
     /**
-     * Let the device know that its matrix has changed; it can query the
-     * matrix when it needs it.
-     */
-    virtual void markMatrixDirty();
-
-    /**
-     * Let the device know that its clip has changed; it can query the
-     * clip (region or stack) when or if it needs it.
-     */
-    virtual void markClipDirty();
+     *  Called with the correct matrix and clip before this device is drawn
+     *  to using those settings. If your subclass overrides this, be sure to
+     *  call through to the base class as well.
+     *
+     *  The clipstack is another view of the clip. It records the actual
+     *  geometry that went into building the region. It is present for devices
+     *  that want to parse it, but is not required: the region is a complete
+     *  picture of the current clip. (i.e. if you regionize all of the geometry
+     *  in the clipstack, you will arrive at an equivalent region to the one
+     *  passed in).
+    */
+    virtual void setMatrixClip(const SkMatrix&, const SkRegion&,
+                               const SkClipStack&);
 
     /** Called when this device gains focus (i.e becomes the current device
         for drawing).
     */
     virtual void gainFocus(SkCanvas*, const SkMatrix&, const SkRegion&,
-                           const SkClipStack&);
+                           const SkClipStack&) {}
 
     /** Clears the entire device to the specified color (including alpha).
      *  Ignores the clip.
@@ -287,7 +290,7 @@
 
     /** Causes any deferred drawing to the device to be completed.
      */
-    virtual void flush();
+    virtual void flush() {}
 
     SkBitmap    fBitmap;
     SkIPoint    fOrigin;
diff --git a/include/gpu/SkGpuDevice.h b/include/gpu/SkGpuDevice.h
index 181ea9f..f5613a7 100644
--- a/include/gpu/SkGpuDevice.h
+++ b/include/gpu/SkGpuDevice.h
@@ -71,8 +71,8 @@
     virtual bool readPixels(const SkIRect& srcRect, SkBitmap* bitmap);
     virtual void writePixels(const SkBitmap& bitmap, int x, int y);
 
-    virtual void markMatrixDirty();
-    virtual void markClipDirty();
+    virtual void setMatrixClip(const SkMatrix& matrix, const SkRegion& clip,
+                               const SkClipStack&);
 
     virtual void drawPaint(const SkDraw&, const SkPaint& paint);
     virtual void drawPoints(const SkDraw&, SkCanvas::PointMode mode, size_t count,
diff --git a/include/pdf/SkPDFDevice.h b/include/pdf/SkPDFDevice.h
index 4080d56..395968b 100644
--- a/include/pdf/SkPDFDevice.h
+++ b/include/pdf/SkPDFDevice.h
@@ -163,6 +163,8 @@
 
     // TODO(vandebo): Remove this as soon as Chrome's Platform device goes away.
     void setOrigin(int x, int y);
+    virtual void setMatrixClip(const SkMatrix& m, const SkRegion& r,
+                               const SkClipStack& c);
 
 private:
     typedef SkDevice INHERITED;