diff options
Diffstat (limited to 'tools/layoutlib/bridge/src/android/graphics/PorterDuffXfermode_Delegate.java')
-rw-r--r-- | tools/layoutlib/bridge/src/android/graphics/PorterDuffXfermode_Delegate.java | 86 |
1 files changed, 26 insertions, 60 deletions
diff --git a/tools/layoutlib/bridge/src/android/graphics/PorterDuffXfermode_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/PorterDuffXfermode_Delegate.java index a89fd57..f6c36b6 100644 --- a/tools/layoutlib/bridge/src/android/graphics/PorterDuffXfermode_Delegate.java +++ b/tools/layoutlib/bridge/src/android/graphics/PorterDuffXfermode_Delegate.java @@ -21,9 +21,14 @@ import com.android.layoutlib.bridge.Bridge; import com.android.layoutlib.bridge.impl.DelegateManager; import com.android.tools.layoutlib.annotations.LayoutlibDelegate; +import android.graphics.PorterDuff.Mode; + import java.awt.AlphaComposite; import java.awt.Composite; +import static com.android.layoutlib.bridge.impl.PorterDuffUtility.getAlphaCompositeRule; +import static com.android.layoutlib.bridge.impl.PorterDuffUtility.getPorterDuffMode; + /** * Delegate implementing the native methods of android.graphics.PorterDuffXfermode * @@ -43,17 +48,17 @@ public class PorterDuffXfermode_Delegate extends Xfermode_Delegate { // ---- delegate data ---- - private final int mMode; + private final Mode mMode; // ---- Public Helper methods ---- - public PorterDuff.Mode getMode() { - return getPorterDuffMode(mMode); + public Mode getMode() { + return mMode; } @Override public Composite getComposite(int alpha) { - return getComposite(getPorterDuffMode(mMode), alpha); + return getComposite(mMode, alpha); } @Override @@ -67,61 +72,8 @@ public class PorterDuffXfermode_Delegate extends Xfermode_Delegate { return null; } - public static PorterDuff.Mode getPorterDuffMode(int mode) { - for (PorterDuff.Mode m : PorterDuff.Mode.values()) { - if (m.nativeInt == mode) { - return m; - } - } - - Bridge.getLog().error(LayoutLog.TAG_BROKEN, - String.format("Unknown PorterDuff.Mode: %d", mode), null /*data*/); - 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, falpha); - case DARKEN: - break; - case DST: - return AlphaComposite.getInstance(AlphaComposite.DST, falpha); - case DST_ATOP: - return AlphaComposite.getInstance(AlphaComposite.DST_ATOP, falpha); - case DST_IN: - return AlphaComposite.getInstance(AlphaComposite.DST_IN, falpha); - case DST_OUT: - return AlphaComposite.getInstance(AlphaComposite.DST_OUT, falpha); - case DST_OVER: - return AlphaComposite.getInstance(AlphaComposite.DST_OVER, falpha); - case LIGHTEN: - break; - case MULTIPLY: - break; - case SCREEN: - break; - case SRC: - return AlphaComposite.getInstance(AlphaComposite.SRC, falpha); - case SRC_ATOP: - return AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, falpha); - case SRC_IN: - return AlphaComposite.getInstance(AlphaComposite.SRC_IN, falpha); - case SRC_OUT: - return AlphaComposite.getInstance(AlphaComposite.SRC_OUT, falpha); - case SRC_OVER: - return AlphaComposite.getInstance(AlphaComposite.SRC_OVER, falpha); - case XOR: - return AlphaComposite.getInstance(AlphaComposite.XOR, falpha); - } - - Bridge.getLog().fidelityWarning(LayoutLog.TAG_BROKEN, - String.format("Unsupported PorterDuff Mode: %s", mode.name()), - null, null /*data*/); - - return AlphaComposite.getInstance(AlphaComposite.SRC_OVER, falpha); + public static Composite getComposite(int mode, int alpha) { + return getComposite(getPorterDuffMode(mode), alpha); } // ---- native methods ---- @@ -135,6 +87,20 @@ public class PorterDuffXfermode_Delegate extends Xfermode_Delegate { // ---- Private delegate/helper methods ---- private PorterDuffXfermode_Delegate(int mode) { - mMode = mode; + mMode = getPorterDuffMode(mode); + } + + private static Composite getComposite(Mode mode, int alpha255) { + float alpha1 = alpha255 != 0xFF ? alpha255 / 255.f : 1.f; + int rule = getAlphaCompositeRule(mode); + if (rule >= 0) { + return AlphaComposite.getInstance(rule, alpha1); + } + + Bridge.getLog().fidelityWarning(LayoutLog.TAG_BROKEN, + String.format("Unsupported PorterDuff Mode: %1$s", mode.name()), + null, null /*data*/); + + return AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha1); } } |