summaryrefslogtreecommitdiffstats
path: root/tools/layoutlib/bridge/src/android/graphics/PorterDuffXfermode_Delegate.java
diff options
context:
space:
mode:
authorXavier Ducrohet <xav@android.com>2010-12-21 01:33:04 -0800
committerXavier Ducrohet <xav@android.com>2010-12-21 10:43:18 -0800
commit63fd87113cea6abec97a6cd966e090e9b590fc3b (patch)
tree1cbdd623cdac465fc3a648b4afc93b4212a213f7 /tools/layoutlib/bridge/src/android/graphics/PorterDuffXfermode_Delegate.java
parentd348b6eaa98e23cb38d90906df109aaa2d20ea7f (diff)
downloadframeworks_base-63fd87113cea6abec97a6cd966e090e9b590fc3b.zip
frameworks_base-63fd87113cea6abec97a6cd966e090e9b590fc3b.tar.gz
frameworks_base-63fd87113cea6abec97a6cd966e090e9b590fc3b.tar.bz2
LayoutLib: Misc rendering fixes.
- always set up the stroke. Paint may not have the proper style when drawing lines. stroke should still be setup. - Fixed vertical linear gradient. Old code generated a gradient ratio of NaN - Fixed alpha rendering when using shaders. In that case the alpha channel from the paint color should be used in conjunction with the shader. - Fixed miter limit. Java expects the value to be multiplied by the stroke width - Fixed support for drawing ALPHA_8 bitmaps. Java2D doesn't have bitmaps with only alpha channels, so we keep using ARGB bitmaps but when drawing them into a bitmap we erase the color information. Change-Id: I4f04341fc843e3f7dadd1fdbf709b11a4f1e24b9
Diffstat (limited to 'tools/layoutlib/bridge/src/android/graphics/PorterDuffXfermode_Delegate.java')
-rw-r--r--tools/layoutlib/bridge/src/android/graphics/PorterDuffXfermode_Delegate.java62
1 files changed, 31 insertions, 31 deletions
diff --git a/tools/layoutlib/bridge/src/android/graphics/PorterDuffXfermode_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/PorterDuffXfermode_Delegate.java
index 3e9a346..097dfce 100644
--- a/tools/layoutlib/bridge/src/android/graphics/PorterDuffXfermode_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/PorterDuffXfermode_Delegate.java
@@ -46,8 +46,8 @@ public class PorterDuffXfermode_Delegate extends Xfermode_Delegate {
// ---- Public Helper methods ----
@Override
- public Composite getComposite() {
- return getComposite(mMode);
+ public Composite getComposite(int alpha) {
+ return getComposite(getPorterDuffMode(mMode), alpha);
}
@Override
@@ -61,23 +61,35 @@ public class PorterDuffXfermode_Delegate extends Xfermode_Delegate {
return null;
}
- public static Composite getComposite(int mode) {
- PorterDuff.Mode m = getMode(mode);
- switch (m) {
+ public static PorterDuff.Mode getPorterDuffMode(int mode) {
+ for (PorterDuff.Mode m : PorterDuff.Mode.values()) {
+ if (m.nativeInt == mode) {
+ return m;
+ }
+ }
+
+ Bridge.getLog().error(null, String.format("Unknown PorterDuff.Mode: %d", mode));
+ assert false;
+ return PorterDuff.Mode.SRC_OVER;
+ }
+
+ public static Composite getComposite(PorterDuff.Mode mode, int alpha) {
+ float falpha = alpha != 0xFF ? (float)alpha / 255.f : 1.f;
+ switch (mode) {
case CLEAR:
- return AlphaComposite.getInstance(AlphaComposite.CLEAR, 1.0f /*alpha*/);
+ return AlphaComposite.getInstance(AlphaComposite.CLEAR, falpha);
case DARKEN:
break;
case DST:
- return AlphaComposite.getInstance(AlphaComposite.DST, 1.0f /*alpha*/);
+ return AlphaComposite.getInstance(AlphaComposite.DST, falpha);
case DST_ATOP:
- return AlphaComposite.getInstance(AlphaComposite.DST_ATOP, 1.0f /*alpha*/);
+ return AlphaComposite.getInstance(AlphaComposite.DST_ATOP, falpha);
case DST_IN:
- return AlphaComposite.getInstance(AlphaComposite.DST_IN, 1.0f /*alpha*/);
+ return AlphaComposite.getInstance(AlphaComposite.DST_IN, falpha);
case DST_OUT:
- return AlphaComposite.getInstance(AlphaComposite.DST_OUT, 1.0f /*alpha*/);
+ return AlphaComposite.getInstance(AlphaComposite.DST_OUT, falpha);
case DST_OVER:
- return AlphaComposite.getInstance(AlphaComposite.DST_OVER, 1.0f /*alpha*/);
+ return AlphaComposite.getInstance(AlphaComposite.DST_OVER, falpha);
case LIGHTEN:
break;
case MULTIPLY:
@@ -85,24 +97,24 @@ public class PorterDuffXfermode_Delegate extends Xfermode_Delegate {
case SCREEN:
break;
case SRC:
- return AlphaComposite.getInstance(AlphaComposite.SRC, 1.0f /*alpha*/);
+ return AlphaComposite.getInstance(AlphaComposite.SRC, falpha);
case SRC_ATOP:
- return AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 1.0f /*alpha*/);
+ return AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, falpha);
case SRC_IN:
- return AlphaComposite.getInstance(AlphaComposite.SRC_IN, 1.0f /*alpha*/);
+ return AlphaComposite.getInstance(AlphaComposite.SRC_IN, falpha);
case SRC_OUT:
- return AlphaComposite.getInstance(AlphaComposite.SRC_OUT, 1.0f /*alpha*/);
+ return AlphaComposite.getInstance(AlphaComposite.SRC_OUT, falpha);
case SRC_OVER:
- return AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f /*alpha*/);
+ return AlphaComposite.getInstance(AlphaComposite.SRC_OVER, falpha);
case XOR:
- return AlphaComposite.getInstance(AlphaComposite.XOR, 1.0f /*alpha*/);
+ return AlphaComposite.getInstance(AlphaComposite.XOR, falpha);
}
Bridge.getLog().fidelityWarning(null,
- String.format("Unsupported PorterDuff Mode: %s", m.name()),
+ String.format("Unsupported PorterDuff Mode: %s", mode.name()),
null);
- return AlphaComposite.getInstance(AlphaComposite.SRC_OVER);
+ return AlphaComposite.getInstance(AlphaComposite.SRC_OVER, falpha);
}
// ---- native methods ----
@@ -117,16 +129,4 @@ public class PorterDuffXfermode_Delegate extends Xfermode_Delegate {
private PorterDuffXfermode_Delegate(int mode) {
mMode = mode;
}
-
- private static PorterDuff.Mode getMode(int mode) {
- for (PorterDuff.Mode m : PorterDuff.Mode.values()) {
- if (m.nativeInt == mode) {
- return m;
- }
- }
-
- Bridge.getLog().error(null, String.format("Unknown PorterDuff.Mode: %d", mode));
- assert false;
- return PorterDuff.Mode.SRC_OVER;
- }
}