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