summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRomain Guy <romainguy@google.com>2010-08-10 21:56:12 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-08-10 21:56:12 -0700
commit3fa3403e2ee98a66b1b1b83b6f65980163609b6d (patch)
tree059f622b734841133585a8d742f6bc69685613db
parent4d0e7cd7902c3e093903614f1fc2500c3b694cee (diff)
parent8918190a198f5a0c602dd5d126e5fab8e537fda0 (diff)
downloadframeworks_base-3fa3403e2ee98a66b1b1b83b6f65980163609b6d.zip
frameworks_base-3fa3403e2ee98a66b1b1b83b6f65980163609b6d.tar.gz
frameworks_base-3fa3403e2ee98a66b1b1b83b6f65980163609b6d.tar.bz2
Merge "Support non-PorterDuff xfermodes with Xfermode."
-rw-r--r--graphics/java/android/graphics/ComposeShader.java15
-rw-r--r--graphics/java/android/graphics/PorterDuffXfermode.java6
-rw-r--r--graphics/java/android/graphics/Xfermode.java6
3 files changed, 24 insertions, 3 deletions
diff --git a/graphics/java/android/graphics/ComposeShader.java b/graphics/java/android/graphics/ComposeShader.java
index ac1f277..e88211a 100644
--- a/graphics/java/android/graphics/ComposeShader.java
+++ b/graphics/java/android/graphics/ComposeShader.java
@@ -20,7 +20,12 @@ package android.graphics;
an {@link android.graphics.Xfermode} subclass.
*/
public class ComposeShader extends Shader {
+ /**
+ * Hold onto the shaders to avoid GC.
+ */
+ @SuppressWarnings({"UnusedDeclaration"})
private final Shader mShaderA;
+ @SuppressWarnings({"UnusedDeclaration"})
private final Shader mShaderB;
/** Create a new compose shader, given shaders A, B, and a combining mode.
@@ -36,8 +41,14 @@ public class ComposeShader extends Shader {
mShaderB = shaderB;
native_instance = nativeCreate1(shaderA.native_instance, shaderB.native_instance,
(mode != null) ? mode.native_instance : 0);
- native_shader = nativePostCreate1(native_instance, shaderA.native_shader,
- shaderB.native_shader, (mode != null) ? mode.native_instance : 0);
+ if (mode instanceof PorterDuffXfermode) {
+ PorterDuff.Mode pdMode = ((PorterDuffXfermode) mode).mode;
+ native_shader = nativePostCreate1(native_instance, shaderA.native_shader,
+ shaderB.native_shader, pdMode != null ? pdMode.nativeInt : 0);
+ } else {
+ native_shader = nativePostCreate1(native_instance, shaderA.native_shader,
+ shaderB.native_shader, mode != null ? mode.native_instance : 0);
+ }
}
/** Create a new compose shader, given shaders A, B, and a combining PorterDuff mode.
diff --git a/graphics/java/android/graphics/PorterDuffXfermode.java b/graphics/java/android/graphics/PorterDuffXfermode.java
index cb127fd..6ba064c 100644
--- a/graphics/java/android/graphics/PorterDuffXfermode.java
+++ b/graphics/java/android/graphics/PorterDuffXfermode.java
@@ -18,11 +18,17 @@ package android.graphics;
public class PorterDuffXfermode extends Xfermode {
/**
+ * @hide
+ */
+ public final PorterDuff.Mode mode;
+
+ /**
* Create an xfermode that uses the specified porter-duff mode.
*
* @param mode The porter-duff mode that is applied
*/
public PorterDuffXfermode(PorterDuff.Mode mode) {
+ this.mode = mode;
native_instance = nativeCreateXfermode(mode.nativeInt);
}
diff --git a/graphics/java/android/graphics/Xfermode.java b/graphics/java/android/graphics/Xfermode.java
index 42c410e..2467bdc 100644
--- a/graphics/java/android/graphics/Xfermode.java
+++ b/graphics/java/android/graphics/Xfermode.java
@@ -31,7 +31,11 @@ package android.graphics;
public class Xfermode {
protected void finalize() throws Throwable {
- finalizer(native_instance);
+ try {
+ finalizer(native_instance);
+ } finally {
+ super.finalize();
+ }
}
private static native void finalizer(int native_instance);