summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Hudson <tomhudson@google.com>2015-06-24 14:53:56 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-06-24 14:53:58 +0000
commita81a0c86473e49df331cc2f6bdcefa980e3c1ec2 (patch)
tree1a74dd9db040e6051d19feb73f0ccaaa9c8f28d1
parente042f952b3dd82fb38749c282e9273c8dc8326df (diff)
parent90fb1f6732a610ad5ff6acdb3bd9ae392c8eac82 (diff)
downloadframeworks_base-a81a0c86473e49df331cc2f6bdcefa980e3c1ec2.zip
frameworks_base-a81a0c86473e49df331cc2f6bdcefa980e3c1ec2.tar.gz
frameworks_base-a81a0c86473e49df331cc2f6bdcefa980e3c1ec2.tar.bz2
Merge "Sync canvas proxy CTM (b/21945972)" into mnc-dev
-rw-r--r--libs/hwui/Canvas.h4
-rw-r--r--libs/hwui/DisplayListCanvas.cpp8
2 files changed, 12 insertions, 0 deletions
diff --git a/libs/hwui/Canvas.h b/libs/hwui/Canvas.h
index aa24673..562bb80 100644
--- a/libs/hwui/Canvas.h
+++ b/libs/hwui/Canvas.h
@@ -47,6 +47,10 @@ public:
* It is useful for testing and clients (e.g. Picture/Movie) that expect to
* draw their contents into an SkCanvas.
*
+ * The SkCanvas returned is *only* valid until another Canvas call is made
+ * that would change state (e.g. matrix or clip). Clients of asSkCanvas()
+ * are responsible for *not* persisting this pointer.
+ *
* Further, the returned SkCanvas should NOT be unref'd and is valid until
* this canvas is destroyed or a new bitmap is set.
*/
diff --git a/libs/hwui/DisplayListCanvas.cpp b/libs/hwui/DisplayListCanvas.cpp
index 02a4877..b08187b 100644
--- a/libs/hwui/DisplayListCanvas.cpp
+++ b/libs/hwui/DisplayListCanvas.cpp
@@ -99,6 +99,14 @@ SkCanvas* DisplayListCanvas::asSkCanvas() {
if (!mSkiaCanvasProxy) {
mSkiaCanvasProxy.reset(new SkiaCanvasProxy(this));
}
+
+ // SkCanvas instances default to identity transform, but should inherit
+ // the state of this Canvas; if this code was in the SkiaCanvasProxy
+ // constructor, we couldn't cache mSkiaCanvasProxy.
+ SkMatrix parentTransform;
+ getMatrix(&parentTransform);
+ mSkiaCanvasProxy.get()->setMatrix(parentTransform);
+
return mSkiaCanvasProxy.get();
}