am e3326143: am 2c76016c: Merge "Fix error where clips/matrices are incorrectly transferred." into jb-mr2-dev
* commit 'e3326143c63e791863c1fd95599fb9db74fb4eed':
Fix error where clips/matrices are incorrectly transferred.
diff --git a/graphics/java/android/graphics/Canvas.java b/graphics/java/android/graphics/Canvas.java
index 58e7525..aa8d150 100644
--- a/graphics/java/android/graphics/Canvas.java
+++ b/graphics/java/android/graphics/Canvas.java
@@ -146,11 +146,13 @@
* Replace existing canvas while ensuring that the swap has occurred before
* the previous native canvas is unreferenced.
*/
- private void safeCanvasSwap(int nativeCanvas) {
+ private void safeCanvasSwap(int nativeCanvas, boolean copyState) {
final int oldCanvas = mNativeCanvas;
mNativeCanvas = nativeCanvas;
mFinalizer.mNativeCanvas = nativeCanvas;
- copyNativeCanvasState(oldCanvas, mNativeCanvas);
+ if (copyState) {
+ copyNativeCanvasState(oldCanvas, mNativeCanvas);
+ }
finalizer(oldCanvas);
}
@@ -180,9 +182,10 @@
}
/**
- * Specify a bitmap for the canvas to draw into. As a side-effect, the
- * canvas' target density is updated to match that of the bitmap while all
- * other state such as the layers, filters, matrix, and clip are reset.
+ * Specify a bitmap for the canvas to draw into. All canvas state such as
+ * layers, filters, and the save/restore stack are reset with the exception
+ * of the current matrix and clip stack. Additionally, as a side-effect
+ * the canvas' target density is updated to match that of the bitmap.
*
* @param bitmap Specifies a mutable bitmap for the canvas to draw into.
* @see #setDensity(int)
@@ -194,7 +197,7 @@
}
if (bitmap == null) {
- safeCanvasSwap(initRaster(0));
+ safeCanvasSwap(initRaster(0), false);
mDensity = Bitmap.DENSITY_NONE;
} else {
if (!bitmap.isMutable()) {
@@ -202,7 +205,7 @@
}
throwIfRecycled(bitmap);
- safeCanvasSwap(initRaster(bitmap.ni()));
+ safeCanvasSwap(initRaster(bitmap.ni()), true);
mDensity = bitmap.mDensity;
}