Revert r2250 - removal of setMatrixClip() - because Chrome makes heavy use
authortomhudson@google.com <tomhudson@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Tue, 13 Sep 2011 14:41:06 +0000 (14:41 +0000)
committertomhudson@google.com <tomhudson@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Tue, 13 Sep 2011 14:41:06 +0000 (14:41 +0000)
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

include/core/SkDevice.h
include/gpu/SkGpuDevice.h
include/pdf/SkPDFDevice.h
src/core/SkCanvas.cpp
src/core/SkDevice.cpp
src/gpu/SkGpuDevice.cpp
src/pdf/SkPDFDevice.cpp

index 30f0dec..d4afd69 100644 (file)
@@ -73,14 +73,14 @@ public:
         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 @@ protected:
     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 @@ private:
 
     /** Causes any deferred drawing to the device to be completed.
      */
-    virtual void flush();
+    virtual void flush() {}
 
     SkBitmap    fBitmap;
     SkIPoint    fOrigin;
index 181ea9f..f5613a7 100644 (file)
@@ -71,8 +71,8 @@ public:
     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,
index 4080d56..395968b 100644 (file)
@@ -163,6 +163,8 @@ public:
 
     // 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;
index 4335f6e..1f75aa9 100644 (file)
@@ -118,9 +118,7 @@ struct DeviceCM {
                            SkRegion::kDifference_Op);
         }
 
-        //fDevice->setMatrixClip(*fMatrix, fClip, clipStack);
-        fDevice->markMatrixDirty();
-        fDevice->markClipDirty();
+        fDevice->setMatrixClip(*fMatrix, fClip, clipStack);
 
 #ifdef SK_DEBUG
         if (!fClip.isEmpty()) {
@@ -214,19 +212,14 @@ private:
 
 class SkDrawIter : public SkDraw {
 public:
-    SkDrawIter(SkCanvas* canvas, bool skipEmptyClips = true)
-        : fCanvas(canvas)
-        , fCurrLayer(NULL)
-        , fSkipEmptyClips(skipEmptyClips) {
-
-        if (!canvas) {
-            return;
-        }
+    SkDrawIter(SkCanvas* canvas, bool skipEmptyClips = true) {
+        fCanvas = canvas;
         canvas->updateDeviceCMCache();
 
         fClipStack = &canvas->getTotalClipStack();
         fBounder = canvas->getBounder();
         fCurrLayer = canvas->fMCRec->fTopLayer;
+        fSkipEmptyClips = skipEmptyClips;
     }
 
     bool next() {
index ffde8de..69f86cc 100644 (file)
@@ -63,18 +63,6 @@ SkMetaData& SkDevice::getMetaData() {
     return *fMetaData;
 }
 
-uint32_t SkDevice::getDeviceCapabilities() {
-    return 0;
-}
-
-int SkDevice::width() const {
-    return fBitmap.width();
-}
-
-int SkDevice::height() const {
-    return fBitmap.height();
-}
-
 void SkDevice::lockPixels() {
     if (fBitmap.lockPixelsAreWritable()) {
         fBitmap.lockPixels();
@@ -106,8 +94,10 @@ void SkDevice::clear(SkColor color) {
     fBitmap.eraseColor(color);
 }
 
-void SkDevice::onAccessBitmap(SkBitmap* bitmap) {
+void SkDevice::onAccessBitmap(SkBitmap* bitmap) {}
 
+void SkDevice::setMatrixClip(const SkMatrix& matrix, const SkRegion& region,
+                             const SkClipStack& clipStack) {
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -252,20 +242,3 @@ bool SkDevice::filterTextFlags(const SkPaint& paint, TextFlags* flags) {
     return false;
 }
 
-void SkDevice::markMatrixDirty() {
-
-}
-
-void SkDevice::markClipDirty() {
-
-}
-
-void SkDevice::gainFocus(SkCanvas*, const SkMatrix&, const SkRegion&,
-                        const SkClipStack&) {
-
-}
-
-void SkDevice::flush() {
-
-}
-
index 32ac5af..ecdcd7a 100644 (file)
@@ -338,13 +338,10 @@ void SkGpuDevice::prepareRenderTarget(const SkDraw& draw) {
     }
 }
 
-void SkGpuDevice::markMatrixDirty() {
-    INHERITED::markMatrixDirty();
-    fNeedPrepareRenderTarget = true;
-}
-
-void SkGpuDevice::markClipDirty() {
-    INHERITED::markClipDirty();
+void SkGpuDevice::setMatrixClip(const SkMatrix& matrix, const SkRegion& clip,
+                                const SkClipStack& clipStack) {
+    this->INHERITED::setMatrixClip(matrix, clip, clipStack);
+    // We don't need to set them now because the context may not reflect this device.
     fNeedPrepareRenderTarget = true;
 }
 
index 6cb7e4d..8cf1eca 100644 (file)
@@ -1135,6 +1135,11 @@ void SkPDFDevice::setOrigin(int x, int y) {
     INHERITED::setOrigin(x, y);
 }
 
+void SkPDFDevice::setMatrixClip(const SkMatrix& m, const SkRegion& r,
+                                const SkClipStack& c) {
+    INHERITED::setMatrixClip(m, r, c);
+}
+
 void SkPDFDevice::createFormXObjectFromDevice(
         SkRefPtr<SkPDFFormXObject>* xobject) {
     *xobject = new SkPDFFormXObject(this);