19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  this work for additional information regarding copyright ownership.
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  (the "License"); you may not use this file except in compliance with
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  the License.  You may obtain a copy of the License at
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  See the License for the specific language governing permissions and
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  limitations under the License.
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @author Igor V. Stolyarov
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @version $Revision$
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage java.awt;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.awt.Composite;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.awt.CompositeContext;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.awt.RenderingHints;
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.awt.image.ColorModel;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.harmony.awt.gl.ICompositeContext;
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.harmony.awt.internal.nls.Messages;
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The AlphaComposite class defines a basic alpha compositing rules for
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * combining source and destination colors to achieve blending and transparency
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * effects with graphics and images.
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @since Android 1.0
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic final class AlphaComposite implements Composite {
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The Constant CLEAR indicates that both the color and the alpha of the
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * destination are cleared (Porter-Duff Clear rule).
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int CLEAR = 1;
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The Constant SRC indicates that the source is copied to the destination
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * (Porter-Duff Source rule).
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int SRC = 2;
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The Constant DST indicates that the destination is left untouched
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * (Porter-Duff Destination rule).
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int DST = 9;
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The Constant SRC_OVER indicates that the source is composited over the
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * destination (Porter-Duff Source Over Destination rule).
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int SRC_OVER = 3;
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The Constant DST_OVER indicates that The destination is composited over
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the source and the result replaces the destination (Porter-Duff
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Destination Over Source rule).
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int DST_OVER = 4;
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The Constant SRC_IN indicates that the part of the source lying inside of
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * the destination replaces the destination (Porter-Duff Source In
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Destination rule).
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int SRC_IN = 5;
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The Constant DST_IN indicates that the part of the destination lying
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * inside of the source replaces the destination (Porter-Duff Destination In
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Source rule).
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int DST_IN = 6;
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The Constant SRC_OUT indicates that the part of the source lying outside
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * of the destination replaces the destination (Porter-Duff Source Held Out
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * By Destination rule).
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int SRC_OUT = 7;
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The Constant DST_OUT indicates that the part of the destination lying
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * outside of the source replaces the destination (Porter-Duff Destination
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Held Out By Source rule).
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int DST_OUT = 8;
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The Constant SRC_ATOP indicates that the part of the source lying inside
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * of the destination is composited onto the destination (Porter-Duff Source
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Atop Destination rule).
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int SRC_ATOP = 10;
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The Constant DST_ATOP indicates that the part of the destination lying
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * inside of the source is composited over the source and replaces the
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * destination (Porter-Duff Destination Atop Source rule).
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int DST_ATOP = 11;
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The Constant XOR indicates that the part of the source that lies outside
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * of the destination is combined with the part of the destination that lies
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * outside of the source (Porter-Duff Source Xor Destination rule).
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final int XOR = 12;
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * AlphaComposite object with the opaque CLEAR rule and an alpha of 1.0f.
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final AlphaComposite Clear = new AlphaComposite(CLEAR);
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * AlphaComposite object with the opaque SRC rule and an alpha of 1.0f.
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final AlphaComposite Src = new AlphaComposite(SRC);
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * AlphaComposite object with the opaque DST rule and an alpha of 1.0f.
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final AlphaComposite Dst = new AlphaComposite(DST);
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * AlphaComposite object with the opaque SRC_OVER rule and an alpha of 1.0f.
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final AlphaComposite SrcOver = new AlphaComposite(SRC_OVER);
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * AlphaComposite object with the opaque DST_OVER rule and an alpha of 1.0f.
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final AlphaComposite DstOver = new AlphaComposite(DST_OVER);
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * AlphaComposite object with the opaque SRC_IN rule and an alpha of 1.0f.
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final AlphaComposite SrcIn = new AlphaComposite(SRC_IN);
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * AlphaComposite object with the opaque DST_IN rule and an alpha of 1.0f.
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final AlphaComposite DstIn = new AlphaComposite(DST_IN);
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * AlphaComposite object with the opaque SRC_OUT rule and an alpha of 1.0f.
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final AlphaComposite SrcOut = new AlphaComposite(SRC_OUT);
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * AlphaComposite object with the opaque DST_OUT rule and an alpha of 1.0f.
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final AlphaComposite DstOut = new AlphaComposite(DST_OUT);
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * AlphaComposite object with the opaque SRC_ATOP rule and an alpha of 1.0f.
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final AlphaComposite SrcAtop = new AlphaComposite(SRC_ATOP);
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * AlphaComposite object with the opaque DST_ATOP rule and an alpha of 1.0f.
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final AlphaComposite DstAtop = new AlphaComposite(DST_ATOP);
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * AlphaComposite object with the opaque XOR rule and an alpha of 1.0f.
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final AlphaComposite Xor = new AlphaComposite(XOR);
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The rule.
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private int rule;
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The alpha.
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private float alpha;
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Instantiates a new alpha composite. Creates a context for the compositing
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * operation. The context contains state that is used in performing the
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * compositing operation.
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param rule
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the rule.
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param alpha
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the alpha.
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private AlphaComposite(int rule, float alpha) {
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (rule < CLEAR || rule > XOR) {
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // awt.11D=Unknown rule
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throw new IllegalArgumentException(Messages.getString("awt.11D")); //$NON-NLS-1$
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (alpha < 0.0f || alpha > 1.0f) {
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // awt.11E=Wrong alpha value
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throw new IllegalArgumentException(Messages.getString("awt.11E")); //$NON-NLS-1$
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.rule = rule;
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.alpha = alpha;
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Instantiates a new alpha composite.
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param rule
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the rule.
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private AlphaComposite(int rule) {
2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this(rule, 1.0f);
2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Creates a CompositeContext object with the specified source ColorModel,
2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * destination ColorModel and RenderingHints parameters for a composing
2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * operation.
2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param srcColorModel
2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the source's ColorModel.
2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param dstColorModel
2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the destination's ColorModel.
2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param hints
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the RenderingHints object.
2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the CompositeContext object.
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see java.awt.Composite#createContext(java.awt.image.ColorModel,
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *      java.awt.image.ColorModel, java.awt.RenderingHints)
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public CompositeContext createContext(ColorModel srcColorModel, ColorModel dstColorModel,
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            RenderingHints hints) {
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return new ICompositeContext(this, srcColorModel, dstColorModel);
2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Compares the AlphaComposite object with the specified object.
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param obj
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the Object to be compared.
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return true, if the AlphaComposite object is equal to the specified
2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         object.
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean equals(Object obj) {
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (!(obj instanceof AlphaComposite)) {
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return false;
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        AlphaComposite other = (AlphaComposite)obj;
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return (this.rule == other.getRule() && this.alpha == other.getAlpha());
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the hash code of the AlphaComposite object.
2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the hash code of the AlphaComposite object.
2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int hashCode() {
2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int hash = Float.floatToIntBits(alpha);
2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int tmp = hash >>> 24;
2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        hash <<= 8;
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        hash |= tmp;
2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        hash ^= rule;
2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return hash;
2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the compositing rule of this AlphaComposite object.
2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the compositing rule of this AlphaComposite object.
2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getRule() {
2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return rule;
2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the alpha value of this AlphaComposite object; returns 1.0 if this
2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * AlphaComposite object doesn't have alpha value.
2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the alpha value of this AlphaComposite object or 1.0 if this
2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         AlphaComposite object doesn't have alpha value.
2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public float getAlpha() {
2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return alpha;
2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the AlphaComposite instance with the specified rule and alpha value.
2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param rule
3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the compositing rule.
3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param alpha
3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the alpha value.
3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the AlphaComposite instance.
3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static AlphaComposite getInstance(int rule, float alpha) {
3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (alpha == 1.0f) {
3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return getInstance(rule);
3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return new AlphaComposite(rule, alpha);
3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the AlphaComposite instance with the specified rule.
3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param rule
3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the compositing rule.
3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the AlphaComposite instance.
3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static AlphaComposite getInstance(int rule) {
3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        switch (rule) {
3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case CLEAR:
3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return Clear;
3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case SRC:
3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return Src;
3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case DST:
3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return Dst;
3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case SRC_OVER:
3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return SrcOver;
3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case DST_OVER:
3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return DstOver;
3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case SRC_IN:
3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return SrcIn;
3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case DST_IN:
3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return DstIn;
3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case SRC_OUT:
3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return SrcOut;
3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case DST_OUT:
3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return DstOut;
3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case SRC_ATOP:
3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return SrcAtop;
3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case DST_ATOP:
3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return DstAtop;
3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            case XOR:
3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                return Xor;
3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            default:
3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                // awt.11D=Unknown rule
3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                throw new IllegalArgumentException(Messages.getString("awt.11D")); //$NON-NLS-1$
3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
353