summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Romain Guy <romainguy@google.com> 2011-08-01 17:39:21 -0700
committer Romain Guy <romainguy@google.com> 2011-08-01 17:39:21 -0700
commit0965a3244b4c3009d08db2e084cdcb681ef66d26 (patch)
tree034851a3f3c8e4e8c5da0ef829099ed8907e7286
parenta60c3889718f4513a6c9d8b80f655db5d6346905 (diff)
Allow Canvas.setBitmap() to receive a null Bitmap.
Change-Id: I6096f0b44866e532ccd96a29c816bf34d48c1dc2
-rw-r--r--core/java/android/view/View.java1
-rw-r--r--core/jni/android/graphics/Canvas.cpp9
-rw-r--r--graphics/java/android/graphics/Canvas.java17
-rw-r--r--tests/HwAccelerationTest/src/com/android/test/hwui/PathsActivity.java1
4 files changed, 19 insertions, 9 deletions
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index dd7eaa9ee9e0..c270fd4d037e 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -10287,6 +10287,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 682c3c4a25fb..f8be136f4866 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 35ed4d2087cc..6ae8c9ba17ae 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 833b61caae0f..c241a6243011 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