/* * Copyright 1998-2006 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Sun designates this * particular file as subject to the "Classpath" exception as provided * by Sun in the LICENSE file that accompanied this code. * * This code 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 * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, * CA 95054 USA or visit www.sun.com if you need additional information or * have any questions. */ package javax.swing.plaf.metal; import javax.swing.plaf.*; import javax.swing.*; /** * {@code MetalTheme} provides the color palette and fonts used by * the Java Look and Feel. * <p> * {@code MetalTheme} is abstract, see {@code DefaultMetalTheme} and * {@code OceanTheme} for concrete implementations. * <p> * {@code MetalLookAndFeel} maintains the current theme that the * the {@code ComponentUI} implementations for metal use. Refer to * {@link MetalLookAndFeel#setCurrentTheme * MetalLookAndFeel.setCurrentTheme(MetalTheme)} for details on changing * the current theme. * <p> * {@code MetalTheme} provides a number of public methods for getting * colors. These methods are implemented in terms of a * handful of protected abstract methods. A subclass need only override * the protected abstract methods ({@code getPrimary1}, * {@code getPrimary2}, {@code getPrimary3}, {@code getSecondary1}, * {@code getSecondary2}, and {@code getSecondary3}); although a subclass * may override the other public methods for more control over the set of * colors that are used. * <p> * Concrete implementations of {@code MetalTheme} must return {@code non-null} * values from all methods. While the behavior of returning {@code null} is * not specified, returning {@code null} will result in incorrect behavior. * <p> * It is strongly recommended that subclasses return completely opaque colors. * To do otherwise may result in rendering problems, such as visual garbage. * * @see DefaultMetalTheme * @see OceanTheme * @see MetalLookAndFeel#setCurrentTheme * * @author Steve Wilson */ public abstract class MetalTheme { // Contants identifying the various Fonts that are Theme can support static final int CONTROL_TEXT_FONT = 0; static final int SYSTEM_TEXT_FONT = 1; static final int USER_TEXT_FONT = 2; static final int MENU_TEXT_FONT = 3; static final int WINDOW_TITLE_FONT = 4; static final int SUB_TEXT_FONT = 5; static ColorUIResource white = new ColorUIResource( 255, 255, 255 ); private static ColorUIResource black = new ColorUIResource( 0, 0, 0 ); /** * Returns the name of this theme. * * @return the name of this theme */ public abstract String getName(); /** * Returns the primary 1 color. * * @return the primary 1 color */ protected abstract ColorUIResource getPrimary1(); // these are blue in Metal Default Theme /** * Returns the primary 2 color. * * @return the primary 2 color */ protected abstract ColorUIResource getPrimary2(); /** * Returns the primary 3 color. * * @return the primary 3 color */ protected abstract ColorUIResource getPrimary3(); /** * Returns the secondary 1 color. * * @return the secondary 1 color */ protected abstract ColorUIResource getSecondary1(); // these are gray in Metal Default Theme /** * Returns the secondary 2 color. * * @return the secondary 2 color */ protected abstract ColorUIResource getSecondary2(); /** * Returns the secondary 3 color. * * @return the secondary 3 color */ protected abstract ColorUIResource getSecondary3(); /** * Returns the control text font. * * @return the control text font */ public abstract FontUIResource getControlTextFont(); /** * Returns the system text font. * * @return the system text font */ public abstract FontUIResource getSystemTextFont(); /** * Returns the user text font. * * @return the user text font */ public abstract FontUIResource getUserTextFont(); /** * Returns the menu text font. * * @return the menu text font */ public abstract FontUIResource getMenuTextFont(); /** * Returns the window title font. * * @return the window title font */ public abstract FontUIResource getWindowTitleFont(); /** * Returns the sub-text font. * * @return the sub-text font */ public abstract FontUIResource getSubTextFont(); /** * Returns the white color. This returns opaque white * ({@code 0xFFFFFFFF}). * * @return the white color */ protected ColorUIResource getWhite() { return white; } /** * Returns the black color. This returns opaque black * ({@code 0xFF000000}). * * @return the black color */ protected ColorUIResource getBlack() { return black; } /** * Returns the focus color. This returns the value of * {@code getPrimary2()}. * * @return the focus color */ public ColorUIResource getFocusColor() { return getPrimary2(); } /** * Returns the desktop color. This returns the value of * {@code getPrimary2()}. * * @return the desktop color */ public ColorUIResource getDesktopColor() { return getPrimary2(); } /** * Returns the control color. This returns the value of * {@code getSecondary3()}. * * @return the control color */ public ColorUIResource getControl() { return getSecondary3(); } /** * Returns the control shadow color. This returns * the value of {@code getSecondary2()}. * * @return the control shadow color */ public ColorUIResource getControlShadow() { return getSecondary2(); } /** * Returns the control dark shadow color. This returns * the value of {@code getSecondary1()}. * * @return the control dark shadow color */ public ColorUIResource getControlDarkShadow() { return getSecondary1(); } /** * Returns the control info color. This returns * the value of {@code getBlack()}. * * @return the control info color */ public ColorUIResource getControlInfo() { return getBlack(); } /** * Returns the control highlight color. This returns * the value of {@code getWhite()}. * * @return the control highlight color */ public ColorUIResource getControlHighlight() { return getWhite(); } /** * Returns the control disabled color. This returns * the value of {@code getSecondary2()}. * * @return the control disabled color */ public ColorUIResource getControlDisabled() { return getSecondary2(); } /** * Returns the primary control color. This returns * the value of {@code getPrimary3()}. * * @return the primary control color */ public ColorUIResource getPrimaryControl() { return getPrimary3(); } /** * Returns the primary control shadow color. This returns * the value of {@code getPrimary2()}. * * @return the primary control shadow color */ public ColorUIResource getPrimaryControlShadow() { return getPrimary2(); } /** * Returns the primary control dark shadow color. This * returns the value of {@code getPrimary1()}. * * @return the primary control dark shadow color */ public ColorUIResource getPrimaryControlDarkShadow() { return getPrimary1(); } /** * Returns the primary control info color. This * returns the value of {@code getBlack()}. * * @return the primary control info color */ public ColorUIResource getPrimaryControlInfo() { return getBlack(); } /** * Returns the primary control highlight color. This * returns the value of {@code getWhite()}. * * @return the primary control highlight color */ public ColorUIResource getPrimaryControlHighlight() { return getWhite(); } /** * Returns the system text color. This returns the value of * {@code getBlack()}. * * @return the system text color */ public ColorUIResource getSystemTextColor() { return getBlack(); } /** * Returns the control text color. This returns the value of * {@code getControlInfo()}. * * @return the control text color */ public ColorUIResource getControlTextColor() { return getControlInfo(); } /** * Returns the inactive control text color. This returns the value of * {@code getControlDisabled()}. * * @return the inactive control text color */ public ColorUIResource getInactiveControlTextColor() { return getControlDisabled(); } /** * Returns the inactive system text color. This returns the value of * {@code getSecondary2()}. * * @return the inactive system text color */ public ColorUIResource getInactiveSystemTextColor() { return getSecondary2(); } /** * Returns the user text color. This returns the value of * {@code getBlack()}. * * @return the user text color */ public ColorUIResource getUserTextColor() { return getBlack(); } /** * Returns the text highlight color. This returns the value of * {@code getPrimary3()}. * * @return the text highlight color */ public ColorUIResource getTextHighlightColor() { return getPrimary3(); } /** * Returns the highlighted text color. This returns the value of * {@code getControlTextColor()}. * * @return the highlighted text color */ public ColorUIResource getHighlightedTextColor() { return getControlTextColor(); } /** * Returns the window background color. This returns the value of * {@code getWhite()}. * * @return the window background color */ public ColorUIResource getWindowBackground() { return getWhite(); } /** * Returns the window title background color. This returns the value of * {@code getPrimary3()}. * * @return the window title background color */ public ColorUIResource getWindowTitleBackground() { return getPrimary3(); } /** * Returns the window title foreground color. This returns the value of * {@code getBlack()}. * * @return the window title foreground color */ public ColorUIResource getWindowTitleForeground() { return getBlack(); } /** * Returns the window title inactive background color. This * returns the value of {@code getSecondary3()}. * * @return the window title inactive background color */ public ColorUIResource getWindowTitleInactiveBackground() { return getSecondary3(); } /** * Returns the window title inactive foreground color. This * returns the value of {@code getBlack()}. * * @return the window title inactive foreground color */ public ColorUIResource getWindowTitleInactiveForeground() { return getBlack(); } /** * Returns the menu background color. This * returns the value of {@code getSecondary3()}. * * @return the menu background color */ public ColorUIResource getMenuBackground() { return getSecondary3(); } /** * Returns the menu foreground color. This * returns the value of {@code getBlack()}. * * @return the menu foreground color */ public ColorUIResource getMenuForeground() { return getBlack(); } /** * Returns the menu selected background color. This * returns the value of {@code getPrimary2()}. * * @return the menu selected background color */ public ColorUIResource getMenuSelectedBackground() { return getPrimary2(); } /** * Returns the menu selected foreground color. This * returns the value of {@code getBlack()}. * * @return the menu selected foreground color */ public ColorUIResource getMenuSelectedForeground() { return getBlack(); } /** * Returns the menu disabled foreground color. This * returns the value of {@code getSecondary2()}. * * @return the menu disabled foreground color */ public ColorUIResource getMenuDisabledForeground() { return getSecondary2(); } /** * Returns the separator background color. This * returns the value of {@code getWhite()}. * * @return the separator background color */ public ColorUIResource getSeparatorBackground() { return getWhite(); } /** * Returns the separator foreground color. This * returns the value of {@code getPrimary1()}. * * @return the separator foreground color */ public ColorUIResource getSeparatorForeground() { return getPrimary1(); } /** * Returns the accelerator foreground color. This * returns the value of {@code getPrimary1()}. * * @return the accelerator foreground color */ public ColorUIResource getAcceleratorForeground() { return getPrimary1(); } /** * Returns the accelerator selected foreground color. This * returns the value of {@code getBlack()}. * * @return the accelerator selected foreground color */ public ColorUIResource getAcceleratorSelectedForeground() { return getBlack(); } /** * Adds values specific to this theme to the defaults table. This method * is invoked when the look and feel defaults are obtained from * {@code MetalLookAndFeel}. * <p> * This implementation does nothing; it is provided for subclasses * that wish to customize the defaults table. * * @param table the {@code UIDefaults} to add the values to * * @see MetalLookAndFeel#getDefaults */ public void addCustomEntriesToTable(UIDefaults table) {} /** * This is invoked when a MetalLookAndFeel is installed and about to * start using this theme. When we can add API this should be nuked * in favor of DefaultMetalTheme overriding addCustomEntriesToTable. */ void install() { } /** * Returns true if this is a theme provided by the core platform. */ boolean isSystemTheme() { return false; } }