From e050ca783297db6d88d4d8d0f466f12020747cb8 Mon Sep 17 00:00:00 2001 From: Florin Malita Date: Fri, 13 Jan 2017 15:13:09 +0000 Subject: [PATCH] Revert "Hide SkCanvas getDevice() & getTopDevice()}" This reverts commit 76467a11a0aa4ba15f0f2e3ee078ba9b6ecbaa91. Reason for revert: we may need to revert the Chromium GDI change. Original change's description: > Hide SkCanvas getDevice() & getTopDevice()} > > No longer used externally. > > R=reed@google.com > > Change-Id: I450148010852c2567d136d2c85c8837c6dcbc6b9 > Reviewed-on: https://skia-review.googlesource.com/6974 > Reviewed-by: Mike Reed > Commit-Queue: Florin Malita > TBR=fmalita@chromium.org,reed@google.com,reviews@skia.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Change-Id: If8480aa5d36ff843c28409a5c94d51570ba0fc1c Reviewed-on: https://skia-review.googlesource.com/6991 Commit-Queue: Florin Malita Reviewed-by: Florin Malita --- include/core/SkCanvas.h | 33 ++++++++++++++++++++++++++++++--- src/core/SkCanvas.cpp | 7 +++++-- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h index 909bbac..704584a 100644 --- a/include/core/SkCanvas.h +++ b/include/core/SkCanvas.h @@ -157,6 +157,36 @@ public: SkISize getDeviceSize() const { return this->getBaseLayerSize(); } /** + * DEPRECATED. + * Return the canvas' device object, which may be null. The device holds + * the bitmap of the pixels that the canvas draws into. The reference count + * of the returned device is not changed by this call. + */ +#ifndef SK_SUPPORT_LEGACY_GETDEVICE +protected: // Can we make this private? +#endif + SkBaseDevice* getDevice() const; +public: + /** + * saveLayer() can create another device (which is later drawn onto + * the previous device). getTopDevice() returns the top-most device current + * installed. Note that this can change on other calls like save/restore, + * so do not access this device after subsequent canvas calls. + * The reference count of the device is not changed. + * + * @param updateMatrixClip If this is true, then before the device is + * returned, we ensure that its has been notified about the current + * matrix and clip. Note: this happens automatically when the device + * is drawn to, but is optional here, as there is a small perf hit + * sometimes. + */ +#ifndef SK_SUPPORT_LEGACY_GETTOPDEVICE +private: +#endif + SkBaseDevice* getTopDevice(bool updateMatrixClip = false) const; +public: + + /** * Create a new surface matching the specified info, one that attempts to * be maximally compatible when used with this canvas. If there is no matching Surface type, * NULL is returned. @@ -1522,9 +1552,6 @@ private: : kNotOpaque_ShaderOverrideOpacity); } - SkBaseDevice* getDevice() const; - SkBaseDevice* getTopDevice() const; - class MCRec; sk_sp fClipStack; diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp index e3374dd..067ccdc 100644 --- a/src/core/SkCanvas.cpp +++ b/src/core/SkCanvas.cpp @@ -853,7 +853,10 @@ SkBaseDevice* SkCanvas::getDevice() const { return rec->fLayer->fDevice; } -SkBaseDevice* SkCanvas::getTopDevice() const { +SkBaseDevice* SkCanvas::getTopDevice(bool updateMatrixClip) const { + if (updateMatrixClip) { + const_cast(this)->updateDeviceCMCache(); + } return fMCRec->fTopLayer->fDevice; } @@ -1400,7 +1403,7 @@ void* SkCanvas::accessTopLayerPixels(SkImageInfo* info, size_t* rowBytes, SkIPoi *rowBytes = pmap.rowBytes(); } if (origin) { - *origin = this->getTopDevice()->getOrigin(); + *origin = this->getTopDevice(false)->getOrigin(); } return pmap.writable_addr(); } -- 2.7.4