jdk/src/share/classes/javax/swing/plaf/nimbus/NimbusLookAndFeel.java
author rupashka
Sat, 28 May 2011 11:55:32 +0400
changeset 9769 7af3ada3cf8e
parent 5506 202f599c92aa
child 16088 8edf3fb360ea
permissions -rw-r--r--
7048204: NPE from NimbusLookAndFeel.addDefault Reviewed-by: peterz
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2658
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
     1
/*
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 4841
diff changeset
     2
 * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
2658
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
     4
 *
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 4841
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
2658
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 4841
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
2658
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    10
 *
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    15
 * accompanied this code).
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    16
 *
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    20
 *
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 4841
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 4841
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 4841
diff changeset
    23
 * questions.
2658
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    24
 */
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    25
package javax.swing.plaf.nimbus;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    26
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    27
import java.awt.BorderLayout;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    28
import static java.awt.BorderLayout.*;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    29
import javax.swing.JComponent;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    30
import javax.swing.UIDefaults;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    31
import javax.swing.UIManager;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    32
import javax.swing.plaf.synth.Region;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    33
import javax.swing.plaf.synth.SynthLookAndFeel;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    34
import javax.swing.plaf.synth.SynthStyle;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    35
import javax.swing.plaf.synth.SynthStyleFactory;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    36
import javax.swing.plaf.UIResource;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    37
import java.security.AccessController;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    38
import java.awt.Color;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    39
import java.awt.Container;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    40
import java.awt.Graphics2D;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    41
import java.awt.LayoutManager;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    42
import java.awt.image.BufferedImage;
3741
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
    43
import java.beans.PropertyChangeEvent;
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
    44
import java.beans.PropertyChangeListener;
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
    45
import java.util.*;
2658
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    46
import javax.swing.GrayFilter;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    47
import javax.swing.Icon;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    48
import javax.swing.JToolBar;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    49
import javax.swing.border.TitledBorder;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    50
import javax.swing.plaf.BorderUIResource;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    51
import javax.swing.plaf.ColorUIResource;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    52
import sun.swing.ImageIconUIResource;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    53
import sun.swing.plaf.synth.SynthIcon;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    54
import sun.swing.plaf.GTKKeybindings;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    55
import sun.swing.plaf.WindowsKeybindings;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    56
import sun.security.action.GetPropertyAction;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    57
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    58
/**
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    59
 * <p>The NimbusLookAndFeel class.</p>
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    60
 *
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    61
 * @author Jasper Potts
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    62
 * @author Richard Bair
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    63
 */
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    64
public class NimbusLookAndFeel extends SynthLookAndFeel {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    65
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    66
    /** Set of standard region names for UIDefaults Keys */
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    67
    private static final String[] COMPONENT_KEYS = new String[]{"ArrowButton", "Button",
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    68
                    "CheckBox", "CheckBoxMenuItem", "ColorChooser", "ComboBox",
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    69
                    "DesktopPane", "DesktopIcon", "EditorPane", "FileChooser",
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    70
                    "FormattedTextField", "InternalFrame",
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    71
                    "InternalFrameTitlePane", "Label", "List", "Menu",
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    72
                    "MenuBar", "MenuItem", "OptionPane", "Panel",
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    73
                    "PasswordField", "PopupMenu", "PopupMenuSeparator",
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    74
                    "ProgressBar", "RadioButton", "RadioButtonMenuItem",
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    75
                    "RootPane", "ScrollBar", "ScrollBarTrack", "ScrollBarThumb",
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    76
                    "ScrollPane", "Separator", "Slider", "SliderTrack",
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    77
                    "SliderThumb", "Spinner", "SplitPane", "TabbedPane",
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    78
                    "Table", "TableHeader", "TextArea", "TextField", "TextPane",
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    79
                    "ToggleButton", "ToolBar", "ToolTip", "Tree", "Viewport"};
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    80
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    81
    /**
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    82
     * A reference to the auto-generated file NimbusDefaults. This file contains
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    83
     * the default mappings and values for the look and feel as specified in the
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    84
     * visual designer.
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    85
     */
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    86
    private NimbusDefaults defaults;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    87
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    88
    /**
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    89
     * Reference to populated LAD uidefaults
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    90
     */
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    91
    private UIDefaults uiDefaults;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    92
3741
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
    93
    private DefaultsListener defaultsListener = new DefaultsListener();
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
    94
2658
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    95
    /**
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    96
     * Create a new NimbusLookAndFeel.
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    97
     */
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    98
    public NimbusLookAndFeel() {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
    99
        super();
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   100
        defaults = new NimbusDefaults();
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   101
    }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   102
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   103
    /** Called by UIManager when this look and feel is installed. */
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   104
    @Override public void initialize() {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   105
        super.initialize();
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   106
        defaults.initialize();
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   107
        // create synth style factory
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   108
        setStyleFactory(new SynthStyleFactory() {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   109
            @Override
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   110
            public SynthStyle getStyle(JComponent c, Region r) {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   111
                return defaults.getStyle(c, r);
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   112
            }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   113
        });
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   114
    }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   115
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   116
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   117
    /** Called by UIManager when this look and feel is uninstalled. */
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   118
    @Override public void uninitialize() {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   119
        super.uninitialize();
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   120
        defaults.uninitialize();
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   121
        // clear all cached images to free memory
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   122
        ImageCache.getInstance().flush();
3741
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   123
        UIManager.getDefaults().removePropertyChangeListener(defaultsListener);
2658
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   124
    }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   125
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   126
    /**
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   127
     * @inheritDoc
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   128
     */
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   129
    @Override public UIDefaults getDefaults() {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   130
        if (uiDefaults == null){
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   131
            // Detect platform
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   132
            String osName = getSystemProperty("os.name");
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   133
            boolean isWindows = osName != null && osName.contains("Windows");
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   134
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   135
            // We need to call super for basic's properties file.
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   136
            uiDefaults = super.getDefaults();
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   137
            defaults.initializeDefaults(uiDefaults);
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   138
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   139
            // Install Keybindings
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   140
            if (isWindows) {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   141
                WindowsKeybindings.installKeybindings(uiDefaults);
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   142
            } else {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   143
                GTKKeybindings.installKeybindings(uiDefaults);
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   144
            }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   145
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   146
            // Add Titled Border
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   147
            uiDefaults.put("TitledBorder.titlePosition",
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   148
                    TitledBorder.ABOVE_TOP);
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   149
            uiDefaults.put("TitledBorder.border", new BorderUIResource(
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   150
                    new LoweredBorder()));
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   151
            uiDefaults.put("TitledBorder.titleColor",
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   152
                    getDerivedColor("text",0.0f,0.0f,0.23f,0,true));
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   153
            uiDefaults.put("TitledBorder.font",
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   154
                    new NimbusDefaults.DerivedFont("defaultFont",
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   155
                            1f, true, null));
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   156
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   157
            // Choose Dialog button positions
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   158
            uiDefaults.put("OptionPane.isYesLast", !isWindows);
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   159
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   160
            // Store Table ScrollPane Corner Component
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   161
            uiDefaults.put("Table.scrollPaneCornerComponent",
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   162
                    TableScrollPaneCorner.class);
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   163
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   164
            // Setup the settings for ToolBarSeparator which is custom
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   165
            // installed for Nimbus
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   166
            uiDefaults.put("ToolBarSeparator[Enabled].backgroundPainter",
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   167
                    new ToolBarSeparatorPainter());
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   168
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   169
            // Populate UIDefaults with a standard set of properties
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   170
            for (String componentKey : COMPONENT_KEYS) {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   171
                String key = componentKey+".foreground";
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   172
                if (!uiDefaults.containsKey(key)){
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   173
                    uiDefaults.put(key,
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   174
                            new NimbusProperty(componentKey,"textForeground"));
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   175
                }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   176
                key = componentKey+".background";
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   177
                if (!uiDefaults.containsKey(key)){
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   178
                    uiDefaults.put(key,
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   179
                            new NimbusProperty(componentKey,"background"));
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   180
                }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   181
                key = componentKey+".font";
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   182
                if (!uiDefaults.containsKey(key)){
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   183
                    uiDefaults.put(key,
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   184
                            new NimbusProperty(componentKey,"font"));
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   185
                }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   186
                key = componentKey+".disabledText";
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   187
                if (!uiDefaults.containsKey(key)){
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   188
                    uiDefaults.put(key,
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   189
                            new NimbusProperty(componentKey,"Disabled",
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   190
                                   "textForeground"));
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   191
                }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   192
                key = componentKey+".disabled";
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   193
                if (!uiDefaults.containsKey(key)){
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   194
                    uiDefaults.put(key,
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   195
                            new NimbusProperty(componentKey,"Disabled",
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   196
                                    "background"));
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   197
                }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   198
            }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   199
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   200
            // FileView icon keys are used by some applications, we don't have
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   201
            // a computer icon at the moment so using home icon for now
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   202
            uiDefaults.put("FileView.computerIcon",
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   203
                    new LinkProperty("FileChooser.homeFolderIcon"));
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   204
            uiDefaults.put("FileView.directoryIcon",
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   205
                    new LinkProperty("FileChooser.directoryIcon"));
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   206
            uiDefaults.put("FileView.fileIcon",
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   207
                    new LinkProperty("FileChooser.fileIcon"));
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   208
            uiDefaults.put("FileView.floppyDriveIcon",
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   209
                    new LinkProperty("FileChooser.floppyDriveIcon"));
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   210
            uiDefaults.put("FileView.hardDriveIcon",
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   211
                    new LinkProperty("FileChooser.hardDriveIcon"));
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   212
        }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   213
        return uiDefaults;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   214
    }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   215
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   216
    /**
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   217
     * Gets the style associated with the given component and region. This
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   218
     * will never return null. If an appropriate component and region cannot
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   219
     * be determined, then a default style is returned.
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   220
     *
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   221
     * @param c a non-null reference to a JComponent
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   222
     * @param r a non-null reference to the region of the component c
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   223
     * @return a non-null reference to a NimbusStyle.
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   224
     */
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   225
    public static NimbusStyle getStyle(JComponent c, Region r) {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   226
        return (NimbusStyle)SynthLookAndFeel.getStyle(c, r);
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   227
    }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   228
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   229
    /**
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   230
     * Return a short string that identifies this look and feel. This
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   231
     * String will be the unquoted String "Nimbus".
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   232
     *
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   233
     * @return a short string identifying this look and feel.
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   234
     */
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   235
    @Override public String getName() {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   236
        return "Nimbus";
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   237
    }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   238
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   239
    /**
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   240
     * Return a string that identifies this look and feel. This String will
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   241
     * be the unquoted String "Nimbus".
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   242
     *
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   243
     * @return a short string identifying this look and feel.
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   244
     */
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   245
    @Override public String getID() {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   246
        return "Nimbus";
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   247
    }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   248
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   249
    /**
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   250
     * Returns a textual description of this look and feel.
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   251
     *
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   252
     * @return textual description of this look and feel.
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   253
     */
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   254
    @Override public String getDescription() {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   255
        return "Nimbus Look and Feel";
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   256
    }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   257
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   258
    /**
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   259
     * @inheritDoc
4394
92a8ec883f5d 6827653: Make Synth UI classes public
peterz
parents: 3741
diff changeset
   260
     * @return {@code true}
2658
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   261
     */
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   262
    @Override public boolean shouldUpdateStyleOnAncestorChanged() {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   263
        return true;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   264
    }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   265
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   266
    /**
4394
92a8ec883f5d 6827653: Make Synth UI classes public
peterz
parents: 3741
diff changeset
   267
     * @inheritDoc
92a8ec883f5d 6827653: Make Synth UI classes public
peterz
parents: 3741
diff changeset
   268
     *
92a8ec883f5d 6827653: Make Synth UI classes public
peterz
parents: 3741
diff changeset
   269
     * <p>Overridden to return {@code true} when one of the following
92a8ec883f5d 6827653: Make Synth UI classes public
peterz
parents: 3741
diff changeset
   270
     * properties change:
92a8ec883f5d 6827653: Make Synth UI classes public
peterz
parents: 3741
diff changeset
   271
     * <ul>
92a8ec883f5d 6827653: Make Synth UI classes public
peterz
parents: 3741
diff changeset
   272
     *   <li>{@code "Nimbus.Overrides"}
92a8ec883f5d 6827653: Make Synth UI classes public
peterz
parents: 3741
diff changeset
   273
     *   <li>{@code "Nimbus.Overrides.InheritDefaults"}
92a8ec883f5d 6827653: Make Synth UI classes public
peterz
parents: 3741
diff changeset
   274
     *   <li>{@code "JComponent.sizeVariant"}
92a8ec883f5d 6827653: Make Synth UI classes public
peterz
parents: 3741
diff changeset
   275
     * </ul>
92a8ec883f5d 6827653: Make Synth UI classes public
peterz
parents: 3741
diff changeset
   276
     *
92a8ec883f5d 6827653: Make Synth UI classes public
peterz
parents: 3741
diff changeset
   277
     * @since 1.7
92a8ec883f5d 6827653: Make Synth UI classes public
peterz
parents: 3741
diff changeset
   278
     */
92a8ec883f5d 6827653: Make Synth UI classes public
peterz
parents: 3741
diff changeset
   279
    @Override
92a8ec883f5d 6827653: Make Synth UI classes public
peterz
parents: 3741
diff changeset
   280
    protected boolean shouldUpdateStyleOnEvent(PropertyChangeEvent ev) {
92a8ec883f5d 6827653: Make Synth UI classes public
peterz
parents: 3741
diff changeset
   281
        String eName = ev.getPropertyName();
92a8ec883f5d 6827653: Make Synth UI classes public
peterz
parents: 3741
diff changeset
   282
4841
ae658e3b0f27 6860433: [Nimbus] Code to set a single slider's thumb background doesn't work as specified
peterz
parents: 4394
diff changeset
   283
        // These properties affect style cached inside NimbusDefaults (6860433)
ae658e3b0f27 6860433: [Nimbus] Code to set a single slider's thumb background doesn't work as specified
peterz
parents: 4394
diff changeset
   284
        if ("name" == eName ||
ae658e3b0f27 6860433: [Nimbus] Code to set a single slider's thumb background doesn't work as specified
peterz
parents: 4394
diff changeset
   285
            "ancestor" == eName ||
ae658e3b0f27 6860433: [Nimbus] Code to set a single slider's thumb background doesn't work as specified
peterz
parents: 4394
diff changeset
   286
            "Nimbus.Overrides" == eName ||
4394
92a8ec883f5d 6827653: Make Synth UI classes public
peterz
parents: 3741
diff changeset
   287
            "Nimbus.Overrides.InheritDefaults" == eName ||
92a8ec883f5d 6827653: Make Synth UI classes public
peterz
parents: 3741
diff changeset
   288
            "JComponent.sizeVariant" == eName) {
92a8ec883f5d 6827653: Make Synth UI classes public
peterz
parents: 3741
diff changeset
   289
4841
ae658e3b0f27 6860433: [Nimbus] Code to set a single slider's thumb background doesn't work as specified
peterz
parents: 4394
diff changeset
   290
            JComponent c = (JComponent) ev.getSource();
ae658e3b0f27 6860433: [Nimbus] Code to set a single slider's thumb background doesn't work as specified
peterz
parents: 4394
diff changeset
   291
            defaults.clearOverridesCache(c);
4394
92a8ec883f5d 6827653: Make Synth UI classes public
peterz
parents: 3741
diff changeset
   292
            return true;
92a8ec883f5d 6827653: Make Synth UI classes public
peterz
parents: 3741
diff changeset
   293
        }
92a8ec883f5d 6827653: Make Synth UI classes public
peterz
parents: 3741
diff changeset
   294
92a8ec883f5d 6827653: Make Synth UI classes public
peterz
parents: 3741
diff changeset
   295
        return super.shouldUpdateStyleOnEvent(ev);
92a8ec883f5d 6827653: Make Synth UI classes public
peterz
parents: 3741
diff changeset
   296
    }
92a8ec883f5d 6827653: Make Synth UI classes public
peterz
parents: 3741
diff changeset
   297
92a8ec883f5d 6827653: Make Synth UI classes public
peterz
parents: 3741
diff changeset
   298
    /**
2658
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   299
     * <p>Registers a third party component with the NimbusLookAndFeel.</p>
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   300
     *
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   301
     * <p>Regions represent Components and areas within Components that act as
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   302
     * independent painting areas. Once registered with the NimbusLookAndFeel,
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   303
     * NimbusStyles for these Regions can be retrieved via the
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   304
     * <code>getStyle</code> method.</p>
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   305
     *
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   306
     * <p>The NimbusLookAndFeel uses a standard naming scheme for entries in the
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   307
     * UIDefaults table. The key for each property, state, painter, and other
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   308
     * default registered in UIDefaults for a specific Region will begin with
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   309
     * the specified <code>prefix</code></p>
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   310
     *
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   311
     * <p>For example, suppose I had a component named JFoo. Suppose I then registered
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   312
     * this component with the NimbusLookAndFeel in this manner:</p>
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   313
     *
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   314
     * <pre><code>
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   315
     *     laf.register(NimbusFooUI.FOO_REGION, "Foo");
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   316
     * </code></pre>
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   317
     *
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   318
     * <p>In this case, I could then register properties for this component with
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   319
     * UIDefaults in the following manner:</p>
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   320
     *
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   321
     * <pre><code>
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   322
     *     UIManager.put("Foo.background", new ColorUIResource(Color.BLACK));
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   323
     *     UIManager.put("Foo.Enabled.backgroundPainter", new FooBackgroundPainter());
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   324
     * </code></pre>
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   325
     *
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   326
     * <p>It is also possible to register a named component with Nimbus.
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   327
     * For example, suppose you wanted to style the background of a JPanel
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   328
     * named "MyPanel" differently from other JPanels. You could accomplish this
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   329
     * by doing the following:</p>
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   330
     *
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   331
     * <pre><code>
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   332
     *     laf.register(Region.PANEL, "\"MyPanel\"");
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   333
     *     UIManager.put("\"MyPanel\".background", new ColorUIResource(Color.RED));
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   334
     * </code></pre>
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   335
     *
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   336
     * @param region The Synth Region that is being registered. Such as Button, or
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   337
     *        ScrollBarThumb, or NimbusFooUI.FOO_REGION.
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   338
     * @param prefix The UIDefault prefix. For example, could be ComboBox, or if
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   339
     *        a named components, "MyComboBox", or even something like
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   340
     *        ToolBar."MyComboBox"."ComboBox.arrowButton"
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   341
     */
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   342
    public void register(Region region, String prefix) {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   343
        defaults.register(region, prefix);
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   344
    }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   345
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   346
    /**
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   347
     * Simple utility method that reads system keys.
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   348
     */
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   349
    private String getSystemProperty(String key) {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   350
        return AccessController.doPrivileged(new GetPropertyAction(key));
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   351
    }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   352
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   353
    @Override
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   354
    public Icon getDisabledIcon(JComponent component, Icon icon) {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   355
        if (icon instanceof SynthIcon) {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   356
            SynthIcon si = (SynthIcon)icon;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   357
            BufferedImage img = EffectUtils.createCompatibleTranslucentImage(
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   358
                    si.getIconWidth(), si.getIconHeight());
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   359
            Graphics2D gfx = img.createGraphics();
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   360
            si.paintIcon(component, gfx, 0, 0);
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   361
            gfx.dispose();
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   362
            return new ImageIconUIResource(GrayFilter.createDisabledImage(img));
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   363
        } else {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   364
            return super.getDisabledIcon(component, icon);
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   365
        }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   366
    }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   367
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   368
    /**
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   369
     * Get a derived color, derived colors are shared instances and is color
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   370
     * value will change when its parent UIDefault color changes.
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   371
     *
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   372
     * @param uiDefaultParentName The parent UIDefault key
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   373
     * @param hOffset             The hue offset
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   374
     * @param sOffset             The saturation offset
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   375
     * @param bOffset             The brightness offset
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   376
     * @param aOffset             The alpha offset
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   377
     * @param uiResource          True if the derived color should be a
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   378
     *                            UIResource, false if it should not be
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   379
     * @return The stored derived color
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   380
     */
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   381
    public Color getDerivedColor(String uiDefaultParentName,
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   382
                                 float hOffset, float sOffset,
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   383
                                 float bOffset, int aOffset,
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   384
                                 boolean uiResource) {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   385
        return defaults.getDerivedColor(uiDefaultParentName, hOffset, sOffset,
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   386
                bOffset, aOffset, uiResource);
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   387
    }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   388
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   389
    /**
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   390
     * Decodes and returns a color, which is derived from an offset between two
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   391
     * other colors.
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   392
     *
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   393
     * @param color1   The first color
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   394
     * @param color2   The second color
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   395
     * @param midPoint The offset between color 1 and color 2, a value of 0.0 is
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   396
     *                 color 1 and 1.0 is color 2;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   397
     * @param uiResource True if the derived color should be a UIResource
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   398
     * @return The derived color
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   399
     */
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   400
    protected final Color getDerivedColor(Color color1, Color color2,
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   401
                                      float midPoint, boolean uiResource) {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   402
        int argb = deriveARGB(color1, color2, midPoint);
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   403
        if (uiResource) {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   404
            return new ColorUIResource(argb);
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   405
        } else {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   406
            return new Color(argb);
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   407
        }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   408
    }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   409
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   410
    /**
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   411
     * Decodes and returns a color, which is derived from a offset between two
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   412
     * other colors.
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   413
     *
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   414
     * @param color1   The first color
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   415
     * @param color2   The second color
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   416
     * @param midPoint The offset between color 1 and color 2, a value of 0.0 is
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   417
     *                 color 1 and 1.0 is color 2;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   418
     * @return The derived color, which will be a UIResource
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   419
     */
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   420
    protected final Color getDerivedColor(Color color1, Color color2,
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   421
                                      float midPoint) {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   422
        return getDerivedColor(color1, color2, midPoint, true);
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   423
    }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   424
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   425
    /**
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   426
     * Package private method which returns either BorderLayout.NORTH,
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   427
     * BorderLayout.SOUTH, BorderLayout.EAST, or BorderLayout.WEST depending
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   428
     * on the location of the toolbar in its parent. The toolbar might be
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   429
     * in PAGE_START, PAGE_END, CENTER, or some other position, but will be
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   430
     * resolved to either NORTH,SOUTH,EAST, or WEST based on where the toolbar
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   431
     * actually IS, with CENTER being NORTH.
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   432
     *
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   433
     * This code is used to determine where the border line should be drawn
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   434
     * by the custom toolbar states, and also used by NimbusIcon to determine
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   435
     * whether the handle icon needs to be shifted to look correct.
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   436
     *
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   437
     * Toollbars are unfortunately odd in the way these things are handled,
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   438
     * and so this code exists to unify the logic related to toolbars so it can
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   439
     * be shared among the static files such as NimbusIcon and generated files
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   440
     * such as the ToolBar state classes.
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   441
     */
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   442
    static Object resolveToolbarConstraint(JToolBar toolbar) {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   443
        //NOTE: we don't worry about component orientation or PAGE_END etc
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   444
        //because the BasicToolBarUI always uses an absolute position of
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   445
        //NORTH/SOUTH/EAST/WEST.
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   446
        if (toolbar != null) {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   447
            Container parent = toolbar.getParent();
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   448
            if (parent != null) {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   449
                LayoutManager m = parent.getLayout();
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   450
                if (m instanceof BorderLayout) {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   451
                    BorderLayout b = (BorderLayout)m;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   452
                    Object con = b.getConstraints(toolbar);
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   453
                    if (con == SOUTH || con == EAST || con == WEST) {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   454
                        return con;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   455
                    }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   456
                    return NORTH;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   457
                }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   458
            }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   459
        }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   460
        return NORTH;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   461
    }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   462
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   463
    /**
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   464
     * Derives the ARGB value for a color based on an offset between two
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   465
     * other colors.
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   466
     *
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   467
     * @param color1   The first color
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   468
     * @param color2   The second color
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   469
     * @param midPoint The offset between color 1 and color 2, a value of 0.0 is
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   470
     *                 color 1 and 1.0 is color 2;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   471
     * @return the ARGB value for a new color based on this derivation
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   472
     */
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   473
    static int deriveARGB(Color color1, Color color2, float midPoint) {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   474
        int r = color1.getRed() +
3107
51a846c2c16f 6849805: Nimbus L&F: NimbusLookAndFeel.getDerivedColor() not always returns color2 for 1.0 midPoint
peterz
parents: 2658
diff changeset
   475
                Math.round((color2.getRed() - color1.getRed()) * midPoint);
2658
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   476
        int g = color1.getGreen() +
3107
51a846c2c16f 6849805: Nimbus L&F: NimbusLookAndFeel.getDerivedColor() not always returns color2 for 1.0 midPoint
peterz
parents: 2658
diff changeset
   477
                Math.round((color2.getGreen() - color1.getGreen()) * midPoint);
2658
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   478
        int b = color1.getBlue() +
3107
51a846c2c16f 6849805: Nimbus L&F: NimbusLookAndFeel.getDerivedColor() not always returns color2 for 1.0 midPoint
peterz
parents: 2658
diff changeset
   479
                Math.round((color2.getBlue() - color1.getBlue()) * midPoint);
2658
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   480
        int a = color1.getAlpha() +
3107
51a846c2c16f 6849805: Nimbus L&F: NimbusLookAndFeel.getDerivedColor() not always returns color2 for 1.0 midPoint
peterz
parents: 2658
diff changeset
   481
                Math.round((color2.getAlpha() - color1.getAlpha()) * midPoint);
2658
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   482
        return ((a & 0xFF) << 24) |
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   483
                ((r & 0xFF) << 16) |
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   484
                ((g & 0xFF) << 8) |
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   485
                (b & 0xFF);
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   486
    }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   487
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   488
    /**
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   489
     * Simple Symbolic Link style UIDefalts Property
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   490
     */
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   491
    private class LinkProperty implements UIDefaults.ActiveValue, UIResource{
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   492
        private String dstPropName;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   493
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   494
        private LinkProperty(String dstPropName) {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   495
            this.dstPropName = dstPropName;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   496
        }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   497
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   498
        @Override
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   499
        public Object createValue(UIDefaults table) {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   500
            return UIManager.get(dstPropName);
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   501
        }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   502
    }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   503
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   504
    /**
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   505
     * Nimbus Property that looks up Nimbus keys for standard key names. For
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   506
     * example "Button.background" --> "Button[Enabled].backgound"
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   507
     */
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   508
    private class NimbusProperty implements UIDefaults.ActiveValue, UIResource {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   509
        private String prefix;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   510
        private String state = null;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   511
        private String suffix;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   512
        private boolean isFont;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   513
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   514
        private NimbusProperty(String prefix, String suffix) {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   515
            this.prefix = prefix;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   516
            this.suffix = suffix;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   517
            isFont = "font".equals(suffix);
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   518
        }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   519
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   520
        private NimbusProperty(String prefix, String state, String suffix) {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   521
            this(prefix,suffix);
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   522
            this.state = state;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   523
        }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   524
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   525
        /**
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   526
         * Creates the value retrieved from the <code>UIDefaults</code> table.
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   527
         * The object is created each time it is accessed.
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   528
         *
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   529
         * @param table a <code>UIDefaults</code> table
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   530
         * @return the created <code>Object</code>
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   531
         */
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   532
        @Override
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   533
        public Object createValue(UIDefaults table) {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   534
            Object obj = null;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   535
            // check specified state
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   536
            if (state!=null){
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   537
                obj = uiDefaults.get(prefix+"["+state+"]."+suffix);
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   538
            }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   539
            // check enabled state
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   540
            if (obj==null){
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   541
                obj = uiDefaults.get(prefix+"[Enabled]."+suffix);
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   542
            }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   543
            // check for defaults
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   544
            if (obj==null){
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   545
                if (isFont) {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   546
                    obj = uiDefaults.get("defaultFont");
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   547
                } else {
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   548
                    obj = uiDefaults.get(suffix);
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   549
                }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   550
            }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   551
            return obj;
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   552
        }
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   553
    }
3741
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   554
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   555
    private Map<String, Map<String, Object>> compiledDefaults = null;
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   556
    private boolean defaultListenerAdded = false;
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   557
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   558
    static String parsePrefix(String key) {
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   559
        if (key == null) {
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   560
            return null;
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   561
        }
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   562
        boolean inquotes = false;
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   563
        for (int i = 0; i < key.length(); i++) {
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   564
            char c = key.charAt(i);
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   565
            if (c == '"') {
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   566
                inquotes = !inquotes;
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   567
            } else if ((c == '[' || c == '.') && !inquotes) {
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   568
                return key.substring(0, i);
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   569
            }
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   570
        }
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   571
        return null;
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   572
    }
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   573
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   574
    Map<String, Object> getDefaultsForPrefix(String prefix) {
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   575
        if (compiledDefaults == null) {
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   576
            compiledDefaults = new HashMap<String, Map<String, Object>>();
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   577
            for (Map.Entry<Object, Object> entry: UIManager.getDefaults().entrySet()) {
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   578
                if (entry.getKey() instanceof String) {
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   579
                    addDefault((String) entry.getKey(), entry.getValue());
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   580
                }
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   581
            }
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   582
            if (! defaultListenerAdded) {
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   583
                UIManager.getDefaults().addPropertyChangeListener(defaultsListener);
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   584
                defaultListenerAdded = true;
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   585
            }
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   586
        }
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   587
        return compiledDefaults.get(prefix);
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   588
    }
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   589
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   590
    private void addDefault(String key, Object value) {
9769
7af3ada3cf8e 7048204: NPE from NimbusLookAndFeel.addDefault
rupashka
parents: 5506
diff changeset
   591
        if (compiledDefaults == null) {
7af3ada3cf8e 7048204: NPE from NimbusLookAndFeel.addDefault
rupashka
parents: 5506
diff changeset
   592
            return;
7af3ada3cf8e 7048204: NPE from NimbusLookAndFeel.addDefault
rupashka
parents: 5506
diff changeset
   593
        }
7af3ada3cf8e 7048204: NPE from NimbusLookAndFeel.addDefault
rupashka
parents: 5506
diff changeset
   594
3741
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   595
        String prefix = parsePrefix(key);
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   596
        if (prefix != null) {
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   597
            Map<String, Object> keys = compiledDefaults.get(prefix);
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   598
            if (keys == null) {
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   599
                keys = new HashMap<String, Object>();
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   600
                compiledDefaults.put(prefix, keys);
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   601
            }
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   602
            keys.put(key, value);
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   603
        }
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   604
    }
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   605
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   606
    private class DefaultsListener implements PropertyChangeListener {
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   607
        @Override public void propertyChange(PropertyChangeEvent ev) {
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   608
            String key = ev.getPropertyName();
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   609
            if ("UIDefaults".equals(key)) {
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   610
                compiledDefaults = null;
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   611
            } else {
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   612
                addDefault(key, ev.getNewValue());
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   613
            }
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   614
        }
4021567cd4ca 6802944: Nimbus initialization is too slow
peterz
parents: 3107
diff changeset
   615
    }
2658
43e06bc950ec 6591875: Nimbus Swing Look and Feel
peterz
parents:
diff changeset
   616
}