diff options
Diffstat (limited to 'awt/java/awt/AlphaComposite.java')
-rw-r--r-- | awt/java/awt/AlphaComposite.java | 352 |
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$ + } + } + +} |