blob: 3bed65d6f030843b341748ec1c135118e65c9fda [file] [log] [blame]
/*
* Copyright (c) 1998, 2006, Oracle and/or its affiliates. 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. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.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;
}
}