summaryrefslogtreecommitdiffstats
path: root/awt/java/awt/Color.java
diff options
context:
space:
mode:
Diffstat (limited to 'awt/java/awt/Color.java')
-rw-r--r--awt/java/awt/Color.java990
1 files changed, 0 insertions, 990 deletions
diff --git a/awt/java/awt/Color.java b/awt/java/awt/Color.java
deleted file mode 100644
index 93c532d..0000000
--- a/awt/java/awt/Color.java
+++ /dev/null
@@ -1,990 +0,0 @@
-/*
- * 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 Oleg V. Khaschansky
- * @version $Revision$
- */
-
-package java.awt;
-
-import java.awt.color.ColorSpace;
-import java.awt.geom.AffineTransform;
-import java.awt.geom.Rectangle2D;
-import java.awt.image.ColorModel;
-import java.awt.image.DataBufferInt;
-import java.awt.image.Raster;
-import java.awt.image.WritableRaster;
-import java.io.Serializable;
-import java.util.Arrays;
-
-import org.apache.harmony.awt.internal.nls.Messages;
-
-/**
- * The Color class defines colors in the default sRGB color space or in the
- * specified ColorSpace. Every Color contains alpha value. The alpha value
- * defines the transparency of a color and can be represented by a float value
- * in the range 0.0 - 1.0 or 0 - 255.
- *
- * @since Android 1.0
- */
-public class Color implements Paint, Serializable {
-
- /**
- * The Constant serialVersionUID.
- */
- private static final long serialVersionUID = 118526816881161077L;
-
- /*
- * The values of the following colors are based on 1.5 release behavior
- * which can be revealed using the following or similar code: Color c =
- * Color.white; System.out.println(c);
- */
-
- /**
- * The color white.
- */
- public static final Color white = new Color(255, 255, 255);
-
- /**
- * The color white.
- */
- public static final Color WHITE = white;
-
- /**
- * The color light gray.
- */
- public static final Color lightGray = new Color(192, 192, 192);
-
- /**
- * The color light gray.
- */
- public static final Color LIGHT_GRAY = lightGray;
-
- /**
- * The color gray.
- */
- public static final Color gray = new Color(128, 128, 128);
-
- /**
- * The color gray.
- */
- public static final Color GRAY = gray;
-
- /**
- * The color dark gray.
- */
- public static final Color darkGray = new Color(64, 64, 64);
-
- /**
- * The color dark gray.
- */
- public static final Color DARK_GRAY = darkGray;
-
- /**
- * The color black.
- */
- public static final Color black = new Color(0, 0, 0);
-
- /**
- * The color black.
- */
- public static final Color BLACK = black;
-
- /**
- * The color red.
- */
- public static final Color red = new Color(255, 0, 0);
-
- /**
- * The color red.
- */
- public static final Color RED = red;
-
- /**
- * The color pink.
- */
- public static final Color pink = new Color(255, 175, 175);
-
- /**
- * The color pink.
- */
- public static final Color PINK = pink;
-
- /**
- * The color orange.
- */
- public static final Color orange = new Color(255, 200, 0);
-
- /**
- * The color orange.
- */
- public static final Color ORANGE = orange;
-
- /**
- * The color yellow.
- */
- public static final Color yellow = new Color(255, 255, 0);
-
- /**
- * The color yellow.
- */
- public static final Color YELLOW = yellow;
-
- /**
- * The color green.
- */
- public static final Color green = new Color(0, 255, 0);
-
- /**
- * The color green.
- */
- public static final Color GREEN = green;
-
- /**
- * The color magenta.
- */
- public static final Color magenta = new Color(255, 0, 255);
-
- /**
- * The color magenta.
- */
- public static final Color MAGENTA = magenta;
-
- /**
- * The color cyan.
- */
- public static final Color cyan = new Color(0, 255, 255);
-
- /**
- * The color cyan.
- */
- public static final Color CYAN = cyan;
-
- /**
- * The color blue.
- */
- public static final Color blue = new Color(0, 0, 255);
-
- /**
- * The color blue.
- */
- public static final Color BLUE = blue;
-
- /**
- * integer RGB value.
- */
- int value;
-
- /**
- * Float sRGB value.
- */
- private float[] frgbvalue;
-
- /**
- * Color in an arbitrary color space with <code>float</code> components. If
- * null, other value should be used.
- */
- private float fvalue[];
-
- /**
- * Float alpha value. If frgbvalue is null, this is not valid data.
- */
- private float falpha;
-
- /**
- * The color's color space if applicable.
- */
- private ColorSpace cs;
-
- /*
- * The value of the SCALE_FACTOR is based on 1.5 release behavior which can
- * be revealed using the following code: Color c = new Color(100, 100, 100);
- * Color bc = c.brighter(); System.out.println("Brighter factor: " +
- * ((float)c.getRed())/((float)bc.getRed())); Color dc = c.darker();
- * System.out.println("Darker factor: " +
- * ((float)dc.getRed())/((float)c.getRed())); The result is the same for
- * brighter and darker methods, so we need only one scale factor for both.
- */
- /**
- * The Constant SCALE_FACTOR.
- */
- private static final double SCALE_FACTOR = 0.7;
-
- /**
- * The Constant MIN_SCALABLE.
- */
- private static final int MIN_SCALABLE = 3; // should increase when
-
- // multiplied by SCALE_FACTOR
-
- /**
- * The current paint context.
- */
- transient private PaintContext currentPaintContext;
-
- /**
- * Creates a color in the specified ColorSpace, the specified color
- * components and the specified alpha.
- *
- * @param cspace
- * the ColorSpace to be used to define the components.
- * @param components
- * the components.
- * @param alpha
- * the alpha.
- */
- public Color(ColorSpace cspace, float[] components, float alpha) {
- int nComps = cspace.getNumComponents();
- float comp;
- fvalue = new float[nComps];
-
- for (int i = 0; i < nComps; i++) {
- comp = components[i];
- if (comp < 0.0f || comp > 1.0f) {
- // awt.107=Color parameter outside of expected range: component
- // {0}.
- throw new IllegalArgumentException(Messages.getString("awt.107", i)); //$NON-NLS-1$
- }
- fvalue[i] = components[i];
- }
-
- if (alpha < 0.0f || alpha > 1.0f) {
- // awt.108=Alpha value outside of expected range.
- throw new IllegalArgumentException(Messages.getString("awt.108")); //$NON-NLS-1$
- }
- falpha = alpha;
-
- cs = cspace;
-
- frgbvalue = cs.toRGB(fvalue);
-
- value = ((int)(frgbvalue[2] * 255 + 0.5)) | (((int)(frgbvalue[1] * 255 + 0.5)) << 8)
- | (((int)(frgbvalue[0] * 255 + 0.5)) << 16) | (((int)(falpha * 255 + 0.5)) << 24);
- }
-
- /**
- * Instantiates a new sRGB color with the specified combined RGBA value
- * consisting of the alpha component in bits 24-31, the red component in
- * bits 16-23, the green component in bits 8-15, and the blue component in
- * bits 0-7. If the hasalpha argument is false, the alpha has default value
- * - 255.
- *
- * @param rgba
- * the RGBA components.
- * @param hasAlpha
- * the alpha parameter is true if alpha bits are valid, false
- * otherwise.
- */
- public Color(int rgba, boolean hasAlpha) {
- if (!hasAlpha) {
- value = rgba | 0xFF000000;
- } else {
- value = rgba;
- }
- }
-
- /**
- * Instantiates a new color with the specified red, green, blue and alpha
- * components.
- *
- * @param r
- * the red component.
- * @param g
- * the green component.
- * @param b
- * the blue component.
- * @param a
- * the alpha component.
- */
- public Color(int r, int g, int b, int a) {
- if ((r & 0xFF) != r || (g & 0xFF) != g || (b & 0xFF) != b || (a & 0xFF) != a) {
- // awt.109=Color parameter outside of expected range.
- throw new IllegalArgumentException(Messages.getString("awt.109")); //$NON-NLS-1$
- }
- value = b | (g << 8) | (r << 16) | (a << 24);
- }
-
- /**
- * Instantiates a new opaque sRGB color with the specified red, green, and
- * blue values. The Alpha component is set to the default - 1.0.
- *
- * @param r
- * the red component.
- * @param g
- * the green component.
- * @param b
- * the blue component.
- */
- public Color(int r, int g, int b) {
- if ((r & 0xFF) != r || (g & 0xFF) != g || (b & 0xFF) != b) {
- // awt.109=Color parameter outside of expected range.
- throw new IllegalArgumentException(Messages.getString("awt.109")); //$NON-NLS-1$
- }
- // 0xFF for alpha channel
- value = b | (g << 8) | (r << 16) | 0xFF000000;
- }
-
- /**
- * Instantiates a new sRGB color with the specified RGB value consisting of
- * the red component in bits 16-23, the green component in bits 8-15, and
- * the blue component in bits 0-7. Alpha has default value - 255.
- *
- * @param rgb
- * the RGB components.
- */
- public Color(int rgb) {
- value = rgb | 0xFF000000;
- }
-
- /**
- * Instantiates a new color with the specified red, green, blue and alpha
- * components.
- *
- * @param r
- * the red component.
- * @param g
- * the green component.
- * @param b
- * the blue component.
- * @param a
- * the alpha component.
- */
- public Color(float r, float g, float b, float a) {
- this((int)(r * 255 + 0.5), (int)(g * 255 + 0.5), (int)(b * 255 + 0.5), (int)(a * 255 + 0.5));
- falpha = a;
- fvalue = new float[3];
- fvalue[0] = r;
- fvalue[1] = g;
- fvalue[2] = b;
- frgbvalue = fvalue;
- }
-
- /**
- * Instantiates a new color with the specified red, green, and blue
- * components and default alpha value - 1.0.
- *
- * @param r
- * the red component.
- * @param g
- * the green component.
- * @param b
- * the blue component.
- */
- public Color(float r, float g, float b) {
- this(r, g, b, 1.0f);
- }
-
- public PaintContext createContext(ColorModel cm, Rectangle r, Rectangle2D r2d,
- AffineTransform xform, RenderingHints rhs) {
- if (currentPaintContext != null) {
- return currentPaintContext;
- }
- currentPaintContext = new Color.ColorPaintContext(value);
- return currentPaintContext;
- }
-
- /**
- * Returns a string representation of the Color object.
- *
- * @return the string representation of the Color object.
- */
- @Override
- public String toString() {
- /*
- * The format of the string is based on 1.5 release behavior which can
- * be revealed using the following code: Color c = new Color(1, 2, 3);
- * System.out.println(c);
- */
-
- return getClass().getName() + "[r=" + getRed() + //$NON-NLS-1$
- ",g=" + getGreen() + //$NON-NLS-1$
- ",b=" + getBlue() + //$NON-NLS-1$
- "]"; //$NON-NLS-1$
- }
-
- /**
- * Compares the specified Object to the Color.
- *
- * @param obj
- * the Object to be compared.
- * @return true, if the specified Object is a Color whose value is equal to
- * this Color, false otherwise.
- */
- @Override
- public boolean equals(Object obj) {
- if (obj instanceof Color) {
- return ((Color)obj).value == this.value;
- }
- return false;
- }
-
- /**
- * Returns a float array containing the color and alpha components of the
- * Color in the specified ColorSpace.
- *
- * @param colorSpace
- * the specified ColorSpace.
- * @param components
- * the results of this method will be written to this float
- * array. If null, a float array will be created.
- * @return the color and alpha components in a float array.
- */
- public float[] getComponents(ColorSpace colorSpace, float[] components) {
- int nComps = colorSpace.getNumComponents();
- if (components == null) {
- components = new float[nComps + 1];
- }
-
- getColorComponents(colorSpace, components);
-
- if (frgbvalue != null) {
- components[nComps] = falpha;
- } else {
- components[nComps] = getAlpha() / 255f;
- }
-
- return components;
- }
-
- /**
- * Returns a float array containing the color components of the Color in the
- * specified ColorSpace.
- *
- * @param colorSpace
- * the specified ColorSpace.
- * @param components
- * the results of this method will be written to this float
- * array. If null, a float array will be created.
- * @return the color components in a float array.
- */
- public float[] getColorComponents(ColorSpace colorSpace, float[] components) {
- float[] cieXYZComponents = getColorSpace().toCIEXYZ(getColorComponents(null));
- float[] csComponents = colorSpace.fromCIEXYZ(cieXYZComponents);
-
- if (components == null) {
- return csComponents;
- }
-
- for (int i = 0; i < csComponents.length; i++) {
- components[i] = csComponents[i];
- }
-
- return components;
- }
-
- /**
- * Gets the ColorSpace of this Color.
- *
- * @return the ColorSpace object.
- */
- public ColorSpace getColorSpace() {
- if (cs == null) {
- cs = ColorSpace.getInstance(ColorSpace.CS_sRGB);
- }
-
- return cs;
- }
-
- /**
- * Creates a new Color which is a darker than this Color according to a
- * fixed scale factor.
- *
- * @return the darker Color.
- */
- public Color darker() {
- return new Color((int)(getRed() * SCALE_FACTOR), (int)(getGreen() * SCALE_FACTOR),
- (int)(getBlue() * SCALE_FACTOR));
- }
-
- /**
- * Creates a new Color which is a brighter than this Color.
- *
- * @return the brighter Color.
- */
- public Color brighter() {
-
- int r = getRed();
- int b = getBlue();
- int g = getGreen();
-
- if (r == 0 && b == 0 && g == 0) {
- return new Color(MIN_SCALABLE, MIN_SCALABLE, MIN_SCALABLE);
- }
-
- if (r < MIN_SCALABLE && r != 0) {
- r = MIN_SCALABLE;
- } else {
- r = (int)(r / SCALE_FACTOR);
- r = (r > 255) ? 255 : r;
- }
-
- if (b < MIN_SCALABLE && b != 0) {
- b = MIN_SCALABLE;
- } else {
- b = (int)(b / SCALE_FACTOR);
- b = (b > 255) ? 255 : b;
- }
-
- if (g < MIN_SCALABLE && g != 0) {
- g = MIN_SCALABLE;
- } else {
- g = (int)(g / SCALE_FACTOR);
- g = (g > 255) ? 255 : g;
- }
-
- return new Color(r, g, b);
- }
-
- /**
- * Returns a float array containing the color and alpha components of the
- * Color in the default sRGB color space.
- *
- * @param components
- * the results of this method will be written to this float
- * array. A new float array will be created if this argument is
- * null.
- * @return the RGB color and alpha components in a float array.
- */
- public float[] getRGBComponents(float[] components) {
- if (components == null) {
- components = new float[4];
- }
-
- if (frgbvalue != null) {
- components[3] = falpha;
- } else {
- components[3] = getAlpha() / 255f;
- }
-
- getRGBColorComponents(components);
-
- return components;
- }
-
- /**
- * Returns a float array containing the color components of the Color in the
- * default sRGB color space.
- *
- * @param components
- * the results of this method will be written to this float
- * array. A new float array will be created if this argument is
- * null.
- * @return the RGB color components in a float array.
- */
- public float[] getRGBColorComponents(float[] components) {
- if (components == null) {
- components = new float[3];
- }
-
- if (frgbvalue != null) {
- components[2] = frgbvalue[2];
- components[1] = frgbvalue[1];
- components[0] = frgbvalue[0];
- } else {
- components[2] = getBlue() / 255f;
- components[1] = getGreen() / 255f;
- components[0] = getRed() / 255f;
- }
-
- return components;
- }
-
- /**
- * Returns a float array which contains the color and alpha components of
- * the Color in the ColorSpace of the Color.
- *
- * @param components
- * the results of this method will be written to this float
- * array. A new float array will be created if this argument is
- * null.
- * @return the color and alpha components in a float array.
- */
- public float[] getComponents(float[] components) {
- if (fvalue == null) {
- return getRGBComponents(components);
- }
-
- int nColorComps = fvalue.length;
-
- if (components == null) {
- components = new float[nColorComps + 1];
- }
-
- getColorComponents(components);
-
- components[nColorComps] = falpha;
-
- return components;
- }
-
- /**
- * Returns a float array which contains the color components of the Color in
- * the ColorSpace of the Color.
- *
- * @param components
- * the results of this method will be written to this float
- * array. A new float array will be created if this argument is
- * null.
- * @return the color components in a float array.
- */
- public float[] getColorComponents(float[] components) {
- if (fvalue == null) {
- return getRGBColorComponents(components);
- }
-
- if (components == null) {
- components = new float[fvalue.length];
- }
-
- for (int i = 0; i < fvalue.length; i++) {
- components[i] = fvalue[i];
- }
-
- return components;
- }
-
- /**
- * Returns a hash code of this Color object.
- *
- * @return a hash code of this Color object.
- */
- @Override
- public int hashCode() {
- return value;
- }
-
- public int getTransparency() {
- switch (getAlpha()) {
- case 0xff:
- return Transparency.OPAQUE;
- case 0:
- return Transparency.BITMASK;
- default:
- return Transparency.TRANSLUCENT;
- }
- }
-
- /**
- * Gets the red component of the Color in the range 0-255.
- *
- * @return the red component of the Color.
- */
- public int getRed() {
- return (value >> 16) & 0xFF;
- }
-
- /**
- * Gets the RGB value that represents the color in the default sRGB
- * ColorModel.
- *
- * @return the RGB color value in the default sRGB ColorModel.
- */
- public int getRGB() {
- return value;
- }
-
- /**
- * Gets the green component of the Color in the range 0-255.
- *
- * @return the green component of the Color.
- */
- public int getGreen() {
- return (value >> 8) & 0xFF;
- }
-
- /**
- * Gets the blue component of the Color in the range 0-255.
- *
- * @return the blue component of the Color.
- */
- public int getBlue() {
- return value & 0xFF;
- }
-
- /**
- * Gets the alpha component of the Color in the range 0-255.
- *
- * @return the alpha component of the Color.
- */
- public int getAlpha() {
- return (value >> 24) & 0xFF;
- }
-
- /**
- * Gets the Color from the specified string, or returns the Color specified
- * by the second parameter.
- *
- * @param nm
- * the specified string.
- * @param def
- * the default Color.
- * @return the color from the specified string, or the Color specified by
- * the second parameter.
- */
- public static Color getColor(String nm, Color def) {
- Integer integer = Integer.getInteger(nm);
-
- if (integer == null) {
- return def;
- }
-
- return new Color(integer.intValue());
- }
-
- /**
- * Gets the Color from the specified string, or returns the Color converted
- * from the second parameter.
- *
- * @param nm
- * the specified string.
- * @param def
- * the default Color.
- * @return the color from the specified string, or the Color converted from
- * the second parameter.
- */
- public static Color getColor(String nm, int def) {
- Integer integer = Integer.getInteger(nm);
-
- if (integer == null) {
- return new Color(def);
- }
-
- return new Color(integer.intValue());
- }
-
- /**
- * Gets the Color from the specified String.
- *
- * @param nm
- * the specified string.
- * @return the Color object, or null.
- */
- public static Color getColor(String nm) {
- Integer integer = Integer.getInteger(nm);
-
- if (integer == null) {
- return null;
- }
-
- return new Color(integer.intValue());
- }
-
- /**
- * Decodes a String to an integer and returns the specified opaque Color.
- *
- * @param nm
- * the String which represents an opaque color as a 24-bit
- * integer.
- * @return the Color object from the given String.
- * @throws NumberFormatException
- * if the specified string can not be converted to an integer.
- */
- public static Color decode(String nm) throws NumberFormatException {
- Integer integer = Integer.decode(nm);
- return new Color(integer.intValue());
- }
-
- /**
- * Gets a Color object using the specified values of the HSB color model.
- *
- * @param h
- * the hue component of the Color.
- * @param s
- * the saturation of the Color.
- * @param b
- * the brightness of the Color.
- * @return a color object with the specified hue, saturation and brightness
- * values.
- */
- public static Color getHSBColor(float h, float s, float b) {
- return new Color(HSBtoRGB(h, s, b));
- }
-
- /**
- * Converts the Color specified by the RGB model to an equivalent color in
- * the HSB model.
- *
- * @param r
- * the red component.
- * @param g
- * the green component.
- * @param b
- * the blue component.
- * @param hsbvals
- * the array of result hue, saturation, brightness values or
- * null.
- * @return the float array of hue, saturation, brightness values.
- */
- public static float[] RGBtoHSB(int r, int g, int b, float[] hsbvals) {
- if (hsbvals == null) {
- hsbvals = new float[3];
- }
-
- int V = Math.max(b, Math.max(r, g));
- int temp = Math.min(b, Math.min(r, g));
-
- float H, S, B;
-
- B = V / 255.f;
-
- if (V == temp) {
- H = S = 0;
- } else {
- S = (V - temp) / ((float)V);
-
- float Cr = (V - r) / (float)(V - temp);
- float Cg = (V - g) / (float)(V - temp);
- float Cb = (V - b) / (float)(V - temp);
-
- if (r == V) {
- H = Cb - Cg;
- } else if (g == V) {
- H = 2 + Cr - Cb;
- } else {
- H = 4 + Cg - Cr;
- }
-
- H /= 6.f;
- if (H < 0) {
- H++;
- }
- }
-
- hsbvals[0] = H;
- hsbvals[1] = S;
- hsbvals[2] = B;
-
- return hsbvals;
- }
-
- /**
- * Converts the Color specified by the HSB model to an equivalent color in
- * the default RGB model.
- *
- * @param hue
- * the hue component of the Color.
- * @param saturation
- * the saturation of the Color.
- * @param brightness
- * the brightness of the Color.
- * @return the RGB value of the color with the specified hue, saturation and
- * brightness.
- */
- public static int HSBtoRGB(float hue, float saturation, float brightness) {
- float fr, fg, fb;
-
- if (saturation == 0) {
- fr = fg = fb = brightness;
- } else {
- float H = (hue - (float)Math.floor(hue)) * 6;
- int I = (int)Math.floor(H);
- float F = H - I;
- float M = brightness * (1 - saturation);
- float N = brightness * (1 - saturation * F);
- float K = brightness * (1 - saturation * (1 - F));
-
- switch (I) {
- case 0:
- fr = brightness;
- fg = K;
- fb = M;
- break;
- case 1:
- fr = N;
- fg = brightness;
- fb = M;
- break;
- case 2:
- fr = M;
- fg = brightness;
- fb = K;
- break;
- case 3:
- fr = M;
- fg = N;
- fb = brightness;
- break;
- case 4:
- fr = K;
- fg = M;
- fb = brightness;
- break;
- case 5:
- fr = brightness;
- fg = M;
- fb = N;
- break;
- default:
- fr = fb = fg = 0; // impossible, to supress compiler error
- }
- }
-
- int r = (int)(fr * 255. + 0.5);
- int g = (int)(fg * 255. + 0.5);
- int b = (int)(fb * 255. + 0.5);
-
- return (r << 16) | (g << 8) | b | 0xFF000000;
- }
-
- /**
- * The Class ColorPaintContext.
- */
- class ColorPaintContext implements PaintContext {
-
- /**
- * The RGB value.
- */
- int rgbValue;
-
- /**
- * The saved raster.
- */
- WritableRaster savedRaster = null;
-
- /**
- * Instantiates a new color paint context.
- *
- * @param rgb
- * the RGB value.
- */
- protected ColorPaintContext(int rgb) {
- rgbValue = rgb;
- }
-
- public void dispose() {
- savedRaster = null;
- }
-
- public ColorModel getColorModel() {
- return ColorModel.getRGBdefault();
- }
-
- public Raster getRaster(int x, int y, int w, int h) {
- if (savedRaster == null || w != savedRaster.getWidth() || h != savedRaster.getHeight()) {
- savedRaster = getColorModel().createCompatibleWritableRaster(w, h);
-
- // Suppose we have here simple INT/RGB color/sample model
- DataBufferInt intBuffer = (DataBufferInt)savedRaster.getDataBuffer();
- int rgbValues[] = intBuffer.getData();
- int rgbFillValue = rgbValue;
- Arrays.fill(rgbValues, rgbFillValue);
- }
-
- return savedRaster;
- }
- }
-}