diff options
author | Xavier Ducrohet <xav@android.com> | 2010-12-21 01:33:04 -0800 |
---|---|---|
committer | Xavier Ducrohet <xav@android.com> | 2010-12-21 10:43:18 -0800 |
commit | 63fd87113cea6abec97a6cd966e090e9b590fc3b (patch) | |
tree | 1cbdd623cdac465fc3a648b4afc93b4212a213f7 /tools/layoutlib/bridge/src/android/graphics/PorterDuffXfermode_Delegate.java | |
parent | d348b6eaa98e23cb38d90906df109aaa2d20ea7f (diff) | |
download | frameworks_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.java | 62 |
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; - } } |