diff options
-rw-r--r-- | core/java/android/view/View.java | 1 | ||||
-rw-r--r-- | core/jni/android/graphics/Canvas.cpp | 9 | ||||
-rw-r--r-- | graphics/java/android/graphics/Canvas.java | 17 | ||||
-rw-r--r-- | tests/HwAccelerationTest/src/com/android/test/hwui/PathsActivity.java | 1 |
4 files changed, 19 insertions, 9 deletions
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 914824c..935281a 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -10291,6 +10291,7 @@ public class View implements Drawable.Callback2, KeyEvent.Callback, Accessibilit canvas.restoreToCount(restoreCount); if (attachInfo != null) { + canvas.setBitmap(null); // Restore the cached Canvas for our siblings attachInfo.mCanvas = canvas; } diff --git a/core/jni/android/graphics/Canvas.cpp b/core/jni/android/graphics/Canvas.cpp index 682c3c4..f8be136 100644 --- a/core/jni/android/graphics/Canvas.cpp +++ b/core/jni/android/graphics/Canvas.cpp @@ -88,9 +88,12 @@ public: return canvas->getDevice()->accessBitmap(false).height(); } - static void setBitmap(JNIEnv* env, jobject, SkCanvas* canvas, - SkBitmap* bitmap) { - canvas->setBitmapDevice(*bitmap); + static void setBitmap(JNIEnv* env, jobject, SkCanvas* canvas, SkBitmap* bitmap) { + if (bitmap) { + canvas->setBitmapDevice(*bitmap); + } else { + canvas->setDevice(NULL); + } } static int saveAll(JNIEnv* env, jobject jcanvas) { diff --git a/graphics/java/android/graphics/Canvas.java b/graphics/java/android/graphics/Canvas.java index 35ed4d2..6ae8c9b 100644 --- a/graphics/java/android/graphics/Canvas.java +++ b/graphics/java/android/graphics/Canvas.java @@ -178,17 +178,22 @@ public class Canvas { * @see #getDensity() */ public void setBitmap(Bitmap bitmap) { - if (!bitmap.isMutable()) { - throw new IllegalStateException(); - } if (isHardwareAccelerated()) { throw new RuntimeException("Can't set a bitmap device on a GL canvas"); } - throwIfRecycled(bitmap); - native_setBitmap(mNativeCanvas, bitmap.ni()); + int pointer = 0; + if (bitmap != null) { + if (!bitmap.isMutable()) { + throw new IllegalStateException(); + } + throwIfRecycled(bitmap); + mDensity = bitmap.mDensity; + pointer = bitmap.ni(); + } + + native_setBitmap(mNativeCanvas, pointer); mBitmap = bitmap; - mDensity = bitmap.mDensity; } /** diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/PathsActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/PathsActivity.java index 833b61c..c241a62 100644 --- a/tests/HwAccelerationTest/src/com/android/test/hwui/PathsActivity.java +++ b/tests/HwAccelerationTest/src/com/android/test/hwui/PathsActivity.java @@ -101,6 +101,7 @@ public class PathsActivity extends Activity { Canvas canvas = new Canvas(mBitmap); canvas.translate(-mPathBounds.left + mOffset * 1.5f, -mPathBounds.top + mOffset * 1.5f); canvas.drawPath(mPath, mMediumPaint); + canvas.setBitmap(null); } @Override |