| /* SystemColor.java -- access dynamic system color values |
| Copyright (C) 1999, 2002, 2004, 2005 Free Software Foundation, Inc. |
| |
| This file is part of GNU Classpath. |
| |
| GNU Classpath is free software; you can redistribute it and/or modify |
| it under the terms of the GNU General Public License as published by |
| the Free Software Foundation; either version 2, or (at your option) |
| any later version. |
| |
| GNU Classpath is distributed in the hope that it will be useful, but |
| WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| General Public License for more details. |
| |
| You should have received a copy of the GNU General Public License |
| along with GNU Classpath; see the file COPYING. If not, write to the |
| Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA |
| 02111-1307 USA. |
| |
| Linking this library statically or dynamically with other modules is |
| making a combined work based on this library. Thus, the terms and |
| conditions of the GNU General Public License cover the whole |
| combination. |
| |
| As a special exception, the copyright holders of this library give you |
| permission to link this library with independent modules to produce an |
| executable, regardless of the license terms of these independent |
| modules, and to copy and distribute the resulting executable under |
| terms of your choice, provided that you also meet, for each linked |
| independent module, the terms and conditions of the license of that |
| module. An independent module is a module which is not derived from |
| or based on this library. If you modify this library, you may extend |
| this exception to your version of the library, but you are not |
| obligated to do so. If you do not wish to do so, delete this |
| exception statement from your version. */ |
| |
| |
| package java.awt; |
| |
| import java.awt.geom.AffineTransform; |
| import java.awt.geom.Rectangle2D; |
| import java.awt.image.ColorModel; |
| import java.io.Serializable; |
| |
| /** |
| * This class contains the various "system colors" in use by the native |
| * windowing system. The <code>getRGB()</code> method is dynamic on systems |
| * which support dynamic system color changes, and most methods in the |
| * superclass are written to use this dynamic value when reporting colors. |
| * However, the <code>equals()</code> method is not dynamic, and does not |
| * track the actual color of instances in this class. This means that equals |
| * may give surprising results; you are better off relying on getRGB. |
| * |
| * @author Aaron M. Renn (arenn@urbanophile.com) |
| * @author Eric Blake (ebb9@email.byu.edu) |
| * @since 1.1 |
| * @status updated to 1.4 |
| */ |
| public final class SystemColor extends Color implements Serializable |
| { |
| // Implementation note: To be serial compatible with JDK, this class must |
| // violate the semantic meaning of super.value to be one of the |
| // NUM_COLORS constants instead of the actual RGB value. Hence there are |
| // a lot of ugly workarounds in Color and in this class. I would have |
| // designed it MUCH differently, making a separate id field in this class. |
| |
| /** |
| * Compatible with JDK 1.1+. |
| */ |
| private static final long serialVersionUID = 4503142729533789064L; |
| |
| /** |
| * Array index of the desktop color. Used by |
| * {@link Toolkit#loadSystemColors(int[])}. |
| * |
| * @see #desktop |
| */ |
| public static final int DESKTOP = 0; |
| |
| /** |
| * Array index of the active caption color. Used by |
| * {@link Toolkit#loadSystemColors(int[])}. |
| * |
| * @see #activeCaption |
| */ |
| public static final int ACTIVE_CAPTION = 1; |
| |
| /** |
| * Array index of the active caption text color. Used by |
| * {@link Toolkit#loadSystemColors(int[])}. |
| * |
| * @see #activeCaptionText |
| */ |
| public static final int ACTIVE_CAPTION_TEXT = 2; |
| |
| /** |
| * Array index of the active caption border color. Used by |
| * {@link Toolkit#loadSystemColors(int[])}. |
| * |
| * @see #activeCaptionBorder |
| */ |
| public static final int ACTIVE_CAPTION_BORDER = 3; |
| |
| /** |
| * Array index of the inactive caption color. Used by |
| * {@link Toolkit#loadSystemColors(int[])}. |
| * |
| * @see #inactiveCaption |
| */ |
| public static final int INACTIVE_CAPTION = 4; |
| |
| /** |
| * Array index of the inactive caption text color. Used by |
| * {@link Toolkit#loadSystemColors(int[])}. |
| * |
| * @see #inactiveCaptionText |
| */ |
| public static final int INACTIVE_CAPTION_TEXT = 5; |
| |
| /** |
| * Array index of the inactive caption border color. Used by |
| * {@link Toolkit#loadSystemColors(int[])}. |
| * |
| * @see #inactiveCaptionBorder |
| */ |
| public static final int INACTIVE_CAPTION_BORDER = 6; |
| |
| /** |
| * Array index of the window background color. Used by |
| * {@link Toolkit#loadSystemColors(int[])}. |
| * |
| * @see #window |
| */ |
| public static final int WINDOW = 7; |
| |
| /** |
| * Array index of the window border color. Used by |
| * {@link Toolkit#loadSystemColors(int[])}. |
| * |
| * @see #windowBorder |
| */ |
| public static final int WINDOW_BORDER = 8; |
| |
| /** |
| * Array index of the window text color. Used by |
| * {@link Toolkit#loadSystemColors(int[])}. |
| * |
| * @see #windowText |
| */ |
| public static final int WINDOW_TEXT = 9; |
| |
| /** |
| * Array index of the menu background color. Used by |
| * {@link Toolkit#loadSystemColors(int[])}. |
| * |
| * @see #menu |
| */ |
| public static final int MENU = 10; |
| |
| /** |
| * Array index of the menu text color. Used by |
| * {@link Toolkit#loadSystemColors(int[])}. |
| * |
| * @see #menuText |
| */ |
| public static final int MENU_TEXT = 11; |
| |
| /** |
| * Array index of the text background color. Used by |
| * {@link Toolkit#loadSystemColors(int[])}. |
| * |
| * @see #text |
| */ |
| public static final int TEXT = 12; |
| |
| /** |
| * Array index of the text foreground color. Used by |
| * {@link Toolkit#loadSystemColors(int[])}. |
| * |
| * @see #textText |
| */ |
| public static final int TEXT_TEXT = 13; |
| |
| /** |
| * Array index of the highlighted text background color. Used by |
| * {@link Toolkit#loadSystemColors(int[])}. |
| * |
| * @see #textHighlight |
| */ |
| public static final int TEXT_HIGHLIGHT = 14; |
| |
| /** |
| * Array index of the highlighted text foreground color. Used by |
| * {@link Toolkit#loadSystemColors(int[])}. |
| * |
| * @see #textHighlightText |
| */ |
| public static final int TEXT_HIGHLIGHT_TEXT = 15; |
| |
| /** |
| * Array index of the inactive text foreground color. Used by |
| * {@link Toolkit#loadSystemColors(int[])}. |
| * |
| * @see #textInactiveText |
| */ |
| public static final int TEXT_INACTIVE_TEXT = 16; |
| |
| /** |
| * Array index of the control background color. Used by |
| * {@link Toolkit#loadSystemColors(int[])}. |
| * |
| * @see #control |
| */ |
| public static final int CONTROL = 17; |
| |
| /** |
| * Array index of the control text color. Used by |
| * {@link Toolkit#loadSystemColors(int[])}. |
| * |
| * @see #controlText |
| */ |
| public static final int CONTROL_TEXT = 18; |
| |
| /** |
| * Array index of the highlighted control background color. Used by |
| * {@link Toolkit#loadSystemColors(int[])}. |
| * |
| * @see #controlHighlight |
| */ |
| public static final int CONTROL_HIGHLIGHT = 19; |
| |
| /** |
| * Array index of the lightly highlighted control background color. Used by |
| * {@link Toolkit#loadSystemColors(int[])}. |
| * |
| * @see #controlLtHighlight |
| */ |
| public static final int CONTROL_LT_HIGHLIGHT = 20; |
| |
| /** |
| * Array index of the shadowed control background color. Used by |
| * {@link Toolkit#loadSystemColors(int[])}. |
| * |
| * @see #controlShadow |
| */ |
| public static final int CONTROL_SHADOW = 21; |
| |
| /** |
| * Array index of the darkly shadowed control background color. Used by |
| * {@link Toolkit#loadSystemColors(int[])}. |
| * |
| * @see #controlDkShadow |
| */ |
| public static final int CONTROL_DK_SHADOW = 22; |
| |
| /** |
| * Array index of the scrollbar background color. Used by |
| * {@link Toolkit#loadSystemColors(int[])}. |
| * |
| * @see #scrollbar |
| */ |
| public static final int SCROLLBAR = 23; |
| |
| /** |
| * Array index of the info background color. Used by |
| * {@link Toolkit#loadSystemColors(int[])}. |
| * |
| * @see #info |
| */ |
| public static final int INFO = 24; |
| |
| /** |
| * Array index of the info text color. Used by |
| * {@link Toolkit#loadSystemColors(int[])}. |
| * |
| * @see #infoText |
| */ |
| public static final int INFO_TEXT = 25; |
| |
| /** |
| * The number of system colors. Used by |
| * {@link Toolkit#loadSystemColors(int[])}. |
| */ |
| public static final int NUM_COLORS = 26; |
| |
| /** |
| * The internal array used to dynamically update <code>getRGB()</code>. |
| */ |
| private static final int[] colors = new int[NUM_COLORS]; |
| |
| /** The desktop color. */ |
| public static final SystemColor desktop |
| = new SystemColor(DESKTOP); |
| |
| /** The active caption background color. */ |
| public static final SystemColor activeCaption |
| = new SystemColor(ACTIVE_CAPTION); |
| |
| /** The active caption text color. */ |
| public static final SystemColor activeCaptionText |
| = new SystemColor(ACTIVE_CAPTION_TEXT); |
| |
| /** The active caption border color. */ |
| public static final SystemColor activeCaptionBorder |
| = new SystemColor(ACTIVE_CAPTION_BORDER); |
| |
| /** The inactive caption background color. */ |
| public static final SystemColor inactiveCaption |
| = new SystemColor(INACTIVE_CAPTION); |
| |
| /** The inactive caption text color. */ |
| public static final SystemColor inactiveCaptionText |
| = new SystemColor(INACTIVE_CAPTION_TEXT); |
| |
| /** The inactive caption border color. */ |
| public static final SystemColor inactiveCaptionBorder |
| = new SystemColor(INACTIVE_CAPTION_BORDER); |
| |
| /** The window background color. */ |
| public static final SystemColor window |
| = new SystemColor(WINDOW); |
| |
| /** The window border color. */ |
| public static final SystemColor windowBorder |
| = new SystemColor(WINDOW_BORDER); |
| |
| /** The window text color. */ |
| public static final SystemColor windowText |
| = new SystemColor(WINDOW_TEXT); |
| |
| /** The menu background color. */ |
| public static final SystemColor menu |
| = new SystemColor(MENU); |
| |
| /** The menu text color. */ |
| public static final SystemColor menuText |
| = new SystemColor(MENU_TEXT); |
| |
| /** The text background color. */ |
| public static final SystemColor text |
| = new SystemColor(TEXT); |
| |
| /** The text foreground color. */ |
| public static final SystemColor textText |
| = new SystemColor(TEXT_TEXT); |
| |
| /** The highlighted text background color. */ |
| public static final SystemColor textHighlight |
| = new SystemColor(TEXT_HIGHLIGHT); |
| |
| /** The highlighted text foreground color. */ |
| public static final SystemColor textHighlightText |
| = new SystemColor(TEXT_HIGHLIGHT_TEXT); |
| |
| /** The inactive text color. */ |
| public static final SystemColor textInactiveText |
| = new SystemColor(TEXT_INACTIVE_TEXT); |
| |
| /** The control background color. */ |
| public static final SystemColor control |
| = new SystemColor(CONTROL); |
| |
| /** The control text color. */ |
| public static final SystemColor controlText |
| = new SystemColor(CONTROL_TEXT); |
| |
| /** The control highlight color. */ |
| public static final SystemColor controlHighlight |
| = new SystemColor(CONTROL_HIGHLIGHT); |
| |
| /** The control light highlight color. */ |
| public static final SystemColor controlLtHighlight |
| = new SystemColor(CONTROL_LT_HIGHLIGHT); |
| |
| /** The control shadow color. */ |
| public static final SystemColor controlShadow |
| = new SystemColor(CONTROL_SHADOW); |
| |
| /** The control dark shadow color. */ |
| public static final SystemColor controlDkShadow |
| = new SystemColor(CONTROL_DK_SHADOW); |
| |
| /** The scrollbar color. */ |
| public static final SystemColor scrollbar |
| = new SystemColor(SCROLLBAR); |
| |
| /** The info text background color. */ |
| public static final SystemColor info |
| = new SystemColor(INFO); |
| |
| /** The info text foreground color. */ |
| public static final SystemColor infoText |
| = new SystemColor(INFO_TEXT); |
| |
| /** |
| * Construct a system color which is dynamically updated. |
| * |
| * @param id the color id |
| */ |
| private SystemColor(int id) |
| { |
| // Note: See Color#Color(int, boolean) to explain why we use this |
| // particular constructor. |
| super(id, true); |
| } |
| |
| /** |
| * Returns the RGB value for this color, in the sRGB color space. The blue |
| * value will be in bits 0-7, green in 8-15, red in 6-23, and the alpha |
| * value (bits 24-31) is 0xff. This is dynamically updated, so it may not |
| * match the results of <code>getRed()</code>, <code>getGreen()</code>, or |
| * <code>getBlue()</code>. |
| * |
| * @return the current RGB value |
| */ |
| public int getRGB() |
| { |
| Toolkit.getDefaultToolkit().loadSystemColors(colors); |
| return colors[value] | ALPHA_MASK; |
| } |
| |
| /** |
| * Returns a paint context, used for filling areas of a raster scan with |
| * the current value of this system color. Since the system colors may be |
| * dynamically updated, the returned value may not always be the same; but |
| * as the system color is solid, the context does not need any of the |
| * passed parameters to do its job. |
| * |
| * @param cm the requested color model |
| * @param deviceBounds the bounding box in device coordinates, ignored |
| * @param userBounds the bounding box in user coordinates, ignored |
| * @param xform the bounds transformation, ignored |
| * @param hints any rendering hints, ignored |
| * @return a context for painting this solid color |
| */ |
| public PaintContext createContext(ColorModel cm, Rectangle deviceBounds, |
| Rectangle2D userBounds, |
| AffineTransform xform, |
| RenderingHints hints) |
| { |
| Toolkit.getDefaultToolkit().loadSystemColors(colors); |
| int color = colors[value] | ALPHA_MASK; |
| if (context == null || color != context.color || !context.getColorModel().equals(cm)) |
| context = new ColorPaintContext(cm,color); |
| return context; |
| } |
| |
| /** |
| * Returns a string describing this color. This is in the format |
| * "java.awt.SystemColor[i=" + index + ']', where index is one of the |
| * integer constants of this class. Unfortunately, this description |
| * does not describe the current value of the color; for that you should |
| * use <code>new Color(syscolor.getRGB()).toString()</code>. |
| * |
| * @return a string describing this color |
| */ |
| public String toString() |
| { |
| return "java.awt.SystemColor[i=" + value + ']'; |
| } |
| } // class SystemColor |