summaryrefslogtreecommitdiffstats
path: root/awt/java/awt/AlphaComposite.java
diff options
context:
space:
mode:
Diffstat (limited to 'awt/java/awt/AlphaComposite.java')
-rw-r--r--awt/java/awt/AlphaComposite.java352
1 files changed, 352 insertions, 0 deletions
diff --git a/awt/java/awt/AlphaComposite.java b/awt/java/awt/AlphaComposite.java
new file mode 100644
index 0000000..8389eb4
--- /dev/null
+++ b/awt/java/awt/AlphaComposite.java
@@ -0,0 +1,352 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * @author Igor V. Stolyarov
+ * @version $Revision$
+ */
+
+package java.awt;
+
+import java.awt.Composite;
+import java.awt.CompositeContext;
+import java.awt.RenderingHints;
+import java.awt.image.ColorModel;
+
+import org.apache.harmony.awt.gl.ICompositeContext;
+import org.apache.harmony.awt.internal.nls.Messages;
+
+/**
+ * The AlphaComposite class defines a basic alpha compositing rules for
+ * combining source and destination colors to achieve blending and transparency
+ * effects with graphics and images.
+ *
+ * @since Android 1.0
+ */
+public final class AlphaComposite implements Composite {
+
+ /**
+ * The Constant CLEAR indicates that both the color and the alpha of the
+ * destination are cleared (Porter-Duff Clear rule).
+ */
+ public static final int CLEAR = 1;
+
+ /**
+ * The Constant SRC indicates that the source is copied to the destination
+ * (Porter-Duff Source rule).
+ */
+ public static final int SRC = 2;
+
+ /**
+ * The Constant DST indicates that the destination is left untouched
+ * (Porter-Duff Destination rule).
+ */
+ public static final int DST = 9;
+
+ /**
+ * The Constant SRC_OVER indicates that the source is composited over the
+ * destination (Porter-Duff Source Over Destination rule).
+ */
+ public static final int SRC_OVER = 3;
+
+ /**
+ * The Constant DST_OVER indicates that The destination is composited over
+ * the source and the result replaces the destination (Porter-Duff
+ * Destination Over Source rule).
+ */
+ public static final int DST_OVER = 4;
+
+ /**
+ * The Constant SRC_IN indicates that the part of the source lying inside of
+ * the destination replaces the destination (Porter-Duff Source In
+ * Destination rule).
+ */
+ public static final int SRC_IN = 5;
+
+ /**
+ * The Constant DST_IN indicates that the part of the destination lying
+ * inside of the source replaces the destination (Porter-Duff Destination In
+ * Source rule).
+ */
+ public static final int DST_IN = 6;
+
+ /**
+ * The Constant SRC_OUT indicates that the part of the source lying outside
+ * of the destination replaces the destination (Porter-Duff Source Held Out
+ * By Destination rule).
+ */
+ public static final int SRC_OUT = 7;
+
+ /**
+ * The Constant DST_OUT indicates that the part of the destination lying
+ * outside of the source replaces the destination (Porter-Duff Destination
+ * Held Out By Source rule).
+ */
+ public static final int DST_OUT = 8;
+
+ /**
+ * The Constant SRC_ATOP indicates that the part of the source lying inside
+ * of the destination is composited onto the destination (Porter-Duff Source
+ * Atop Destination rule).
+ */
+ public static final int SRC_ATOP = 10;
+
+ /**
+ * The Constant DST_ATOP indicates that the part of the destination lying
+ * inside of the source is composited over the source and replaces the
+ * destination (Porter-Duff Destination Atop Source rule).
+ */
+ public static final int DST_ATOP = 11;
+
+ /**
+ * The Constant XOR indicates that the part of the source that lies outside
+ * of the destination is combined with the part of the destination that lies
+ * outside of the source (Porter-Duff Source Xor Destination rule).
+ */
+ public static final int XOR = 12;
+
+ /**
+ * AlphaComposite object with the opaque CLEAR rule and an alpha of 1.0f.
+ */
+ public static final AlphaComposite Clear = new AlphaComposite(CLEAR);
+
+ /**
+ * AlphaComposite object with the opaque SRC rule and an alpha of 1.0f.
+ */
+ public static final AlphaComposite Src = new AlphaComposite(SRC);
+
+ /**
+ * AlphaComposite object with the opaque DST rule and an alpha of 1.0f.
+ */
+ public static final AlphaComposite Dst = new AlphaComposite(DST);
+
+ /**
+ * AlphaComposite object with the opaque SRC_OVER rule and an alpha of 1.0f.
+ */
+ public static final AlphaComposite SrcOver = new AlphaComposite(SRC_OVER);
+
+ /**
+ * AlphaComposite object with the opaque DST_OVER rule and an alpha of 1.0f.
+ */
+ public static final AlphaComposite DstOver = new AlphaComposite(DST_OVER);
+
+ /**
+ * AlphaComposite object with the opaque SRC_IN rule and an alpha of 1.0f.
+ */
+ public static final AlphaComposite SrcIn = new AlphaComposite(SRC_IN);
+
+ /**
+ * AlphaComposite object with the opaque DST_IN rule and an alpha of 1.0f.
+ */
+ public static final AlphaComposite DstIn = new AlphaComposite(DST_IN);
+
+ /**
+ * AlphaComposite object with the opaque SRC_OUT rule and an alpha of 1.0f.
+ */
+ public static final AlphaComposite SrcOut = new AlphaComposite(SRC_OUT);
+
+ /**
+ * AlphaComposite object with the opaque DST_OUT rule and an alpha of 1.0f.
+ */
+ public static final AlphaComposite DstOut = new AlphaComposite(DST_OUT);
+
+ /**
+ * AlphaComposite object with the opaque SRC_ATOP rule and an alpha of 1.0f.
+ */
+ public static final AlphaComposite SrcAtop = new AlphaComposite(SRC_ATOP);
+
+ /**
+ * AlphaComposite object with the opaque DST_ATOP rule and an alpha of 1.0f.
+ */
+ public static final AlphaComposite DstAtop = new AlphaComposite(DST_ATOP);
+
+ /**
+ * AlphaComposite object with the opaque XOR rule and an alpha of 1.0f.
+ */
+ public static final AlphaComposite Xor = new AlphaComposite(XOR);
+
+ /**
+ * The rule.
+ */
+ private int rule;
+
+ /**
+ * The alpha.
+ */
+ private float alpha;
+
+ /**
+ * Instantiates a new alpha composite. Creates a context for the compositing
+ * operation. The context contains state that is used in performing the
+ * compositing operation.
+ *
+ * @param rule
+ * the rule.
+ * @param alpha
+ * the alpha.
+ */
+ private AlphaComposite(int rule, float alpha) {
+ if (rule < CLEAR || rule > XOR) {
+ // awt.11D=Unknown rule
+ throw new IllegalArgumentException(Messages.getString("awt.11D")); //$NON-NLS-1$
+ }
+ if (alpha < 0.0f || alpha > 1.0f) {
+ // awt.11E=Wrong alpha value
+ throw new IllegalArgumentException(Messages.getString("awt.11E")); //$NON-NLS-1$
+ }
+
+ this.rule = rule;
+ this.alpha = alpha;
+ }
+
+ /**
+ * Instantiates a new alpha composite.
+ *
+ * @param rule
+ * the rule.
+ */
+ private AlphaComposite(int rule) {
+ this(rule, 1.0f);
+ }
+
+ /**
+ * Creates a CompositeContext object with the specified source ColorModel,
+ * destination ColorModel and RenderingHints parameters for a composing
+ * operation.
+ *
+ * @param srcColorModel
+ * the source's ColorModel.
+ * @param dstColorModel
+ * the destination's ColorModel.
+ * @param hints
+ * the RenderingHints object.
+ * @return the CompositeContext object.
+ * @see java.awt.Composite#createContext(java.awt.image.ColorModel,
+ * java.awt.image.ColorModel, java.awt.RenderingHints)
+ */
+ public CompositeContext createContext(ColorModel srcColorModel, ColorModel dstColorModel,
+ RenderingHints hints) {
+ return new ICompositeContext(this, srcColorModel, dstColorModel);
+ }
+
+ /**
+ * Compares the AlphaComposite object with the specified object.
+ *
+ * @param obj
+ * the Object to be compared.
+ * @return true, if the AlphaComposite object is equal to the specified
+ * object.
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof AlphaComposite)) {
+ return false;
+ }
+ AlphaComposite other = (AlphaComposite)obj;
+ return (this.rule == other.getRule() && this.alpha == other.getAlpha());
+ }
+
+ /**
+ * Returns the hash code of the AlphaComposite object.
+ *
+ * @return the hash code of the AlphaComposite object.
+ */
+ @Override
+ public int hashCode() {
+ int hash = Float.floatToIntBits(alpha);
+ int tmp = hash >>> 24;
+ hash <<= 8;
+ hash |= tmp;
+ hash ^= rule;
+ return hash;
+ }
+
+ /**
+ * Gets the compositing rule of this AlphaComposite object.
+ *
+ * @return the compositing rule of this AlphaComposite object.
+ */
+ public int getRule() {
+ return rule;
+ }
+
+ /**
+ * Gets the alpha value of this AlphaComposite object; returns 1.0 if this
+ * AlphaComposite object doesn't have alpha value.
+ *
+ * @return the alpha value of this AlphaComposite object or 1.0 if this
+ * AlphaComposite object doesn't have alpha value.
+ */
+ public float getAlpha() {
+ return alpha;
+ }
+
+ /**
+ * Gets the AlphaComposite instance with the specified rule and alpha value.
+ *
+ * @param rule
+ * the compositing rule.
+ * @param alpha
+ * the alpha value.
+ * @return the AlphaComposite instance.
+ */
+ public static AlphaComposite getInstance(int rule, float alpha) {
+ if (alpha == 1.0f) {
+ return getInstance(rule);
+ }
+ return new AlphaComposite(rule, alpha);
+ }
+
+ /**
+ * Gets the AlphaComposite instance with the specified rule.
+ *
+ * @param rule
+ * the compositing rule.
+ * @return the AlphaComposite instance.
+ */
+ public static AlphaComposite getInstance(int rule) {
+ switch (rule) {
+ case CLEAR:
+ return Clear;
+ case SRC:
+ return Src;
+ case DST:
+ return Dst;
+ case SRC_OVER:
+ return SrcOver;
+ case DST_OVER:
+ return DstOver;
+ case SRC_IN:
+ return SrcIn;
+ case DST_IN:
+ return DstIn;
+ case SRC_OUT:
+ return SrcOut;
+ case DST_OUT:
+ return DstOut;
+ case SRC_ATOP:
+ return SrcAtop;
+ case DST_ATOP:
+ return DstAtop;
+ case XOR:
+ return Xor;
+ default:
+ // awt.11D=Unknown rule
+ throw new IllegalArgumentException(Messages.getString("awt.11D")); //$NON-NLS-1$
+ }
+ }
+
+}