summaryrefslogtreecommitdiffstats
path: root/tools/layoutlib/bridge/src/android/graphics/PorterDuffXfermode_Delegate.java
diff options
context:
space:
mode:
Diffstat (limited to 'tools/layoutlib/bridge/src/android/graphics/PorterDuffXfermode_Delegate.java')
-rw-r--r--tools/layoutlib/bridge/src/android/graphics/PorterDuffXfermode_Delegate.java86
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);
}
}