diff -r 4ebc2e2fb97c -r 71c04702a3d5 src/java.desktop/macosx/classes/com/apple/laf/AquaLookAndFeel.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/java.desktop/macosx/classes/com/apple/laf/AquaLookAndFeel.java Tue Sep 12 19:03:39 2017 +0200
@@ -0,0 +1,1100 @@
+/*
+ * Copyright (c) 2011, 2017, 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 com.apple.laf;
+
+import java.awt.*;
+import java.security.PrivilegedAction;
+import java.util.*;
+
+import javax.swing.*;
+import javax.swing.border.Border;
+import javax.swing.plaf.*;
+import javax.swing.plaf.basic.BasicBorders;
+import javax.swing.plaf.basic.BasicLookAndFeel;
+import static javax.swing.UIDefaults.LazyValue;
+import sun.swing.*;
+import apple.laf.*;
+
+@SuppressWarnings("serial") // Superclass is not serializable across versions
+public class AquaLookAndFeel extends BasicLookAndFeel {
+ static final String sOldPropertyPrefix = "com.apple.macos."; // old prefix for things like 'useScreenMenuBar'
+ static final String sPropertyPrefix = "apple.laf."; // new prefix for things like 'useScreenMenuBar'
+
+ // for lazy initalizers. Following the pattern from metal.
+ private static final String PKG_PREFIX = "com.apple.laf.";
+
+ /**
+ * Return a short string that identifies this look and feel, e.g.
+ * "CDE/Motif". This string should be appropriate for a menu item.
+ * Distinct look and feels should have different names, e.g.
+ * a subclass of MotifLookAndFeel that changes the way a few components
+ * are rendered should be called "CDE/Motif My Way"; something
+ * that would be useful to a user trying to select a L&F from a list
+ * of names.
+ */
+ public String getName() {
+ return "Mac OS X";
+ }
+
+ /**
+ * Return a string that identifies this look and feel. This string
+ * will be used by applications/services that want to recognize
+ * well known look and feel implementations. Presently
+ * the well known names are "Motif", "Windows", "Mac", "Metal". Note
+ * that a LookAndFeel derived from a well known superclass
+ * that doesn't make any fundamental changes to the look or feel
+ * shouldn't override this method.
+ */
+ public String getID() {
+ return "Aqua";
+ }
+
+ /**
+ * Return a one line description of this look and feel implementation,
+ * e.g. "The CDE/Motif Look and Feel". This string is intended for
+ * the user, e.g. in the title of a window or in a ToolTip message.
+ */
+ public String getDescription() {
+ return "Aqua Look and Feel for Mac OS X";
+ }
+
+ /**
+ * Returns true if the {@code LookAndFeel} returned
+ * {@code RootPaneUI} instances support providing Window decorations
+ * in a {@code JRootPane}.
+ *
+ * The default implementation returns false, subclasses that support
+ * Window decorations should override this and return true.
+ *
+ * @return True if the RootPaneUI instances created support client side
+ * decorations
+ * @see JDialog#setDefaultLookAndFeelDecorated
+ * @see JFrame#setDefaultLookAndFeelDecorated
+ * @see JRootPane#setWindowDecorationStyle
+ * @since 1.4
+ */
+ public boolean getSupportsWindowDecorations() {
+ return false;
+ }
+
+ /**
+ * If the underlying platform has a "native" look and feel, and this
+ * is an implementation of it, return true.
+ */
+ public boolean isNativeLookAndFeel() {
+ return true;
+ }
+
+ /**
+ * Return true if the underlying platform supports and or permits
+ * this look and feel. This method returns false if the look
+ * and feel depends on special resources or legal agreements that
+ * aren't defined for the current platform.
+ *
+ * @see UIManager#setLookAndFeel
+ */
+ public boolean isSupportedLookAndFeel() {
+ return true;
+ }
+
+ /**
+ * UIManager.setLookAndFeel calls this method before the first
+ * call (and typically the only call) to getDefaults(). Subclasses
+ * should do any one-time setup they need here, rather than
+ * in a static initializer, because look and feel class objects
+ * may be loaded just to discover that isSupportedLookAndFeel()
+ * returns false.
+ *
+ * @see #uninitialize
+ * @see UIManager#setLookAndFeel
+ */
+ public void initialize() {
+ java.security.AccessController.doPrivileged(new PrivilegedAction() {
+ public Void run() {
+ System.loadLibrary("osxui");
+ return null;
+ }
+ });
+
+ java.security.AccessController.doPrivileged(new PrivilegedAction(){
+ @Override
+ public Void run() {
+ JRSUIControl.initJRSUI();
+ return null;
+ }
+ });
+
+ super.initialize();
+ final ScreenPopupFactory spf = new ScreenPopupFactory();
+ spf.setActive(true);
+ PopupFactory.setSharedInstance(spf);
+
+ KeyboardFocusManager.getCurrentKeyboardFocusManager().addKeyEventPostProcessor(AquaMnemonicHandler.getInstance());
+ }
+
+ /**
+ * UIManager.setLookAndFeel calls this method just before we're
+ * replaced by a new default look and feel. Subclasses may
+ * choose to free up some resources here.
+ *
+ * @see #initialize
+ */
+ public void uninitialize() {
+ KeyboardFocusManager.getCurrentKeyboardFocusManager().removeKeyEventPostProcessor(AquaMnemonicHandler.getInstance());
+
+ final PopupFactory popupFactory = PopupFactory.getSharedInstance();
+ if (popupFactory != null && popupFactory instanceof ScreenPopupFactory) {
+ ((ScreenPopupFactory)popupFactory).setActive(false);
+ }
+
+ super.uninitialize();
+ }
+
+ /**
+ * Returns an {@code ActionMap}.
+ *
+ * This {@code ActionMap} contains {@code Actions} that
+ * embody the ability to render an auditory cue. These auditory
+ * cues map onto user and system activities that may be useful
+ * for an end user to know about (such as a dialog box appearing).
+ *
+ * At the appropriate time in a {@code JComponent} UI's lifecycle,
+ * the ComponentUI is responsible for getting the appropriate
+ * {@code Action} out of the {@code ActionMap} and passing
+ * it on to {@code playSound}.
+ *
+ * The {@code Actions} in this {@code ActionMap} are
+ * created by the {@code createAudioAction} method.
+ *
+ * @return an ActionMap containing Actions
+ * responsible for rendering auditory cues
+ * @see #createAudioAction
+ * @see #playSound(Action)
+ * @since 1.4
+ */
+ protected ActionMap getAudioActionMap() {
+ ActionMap audioActionMap = (ActionMap)UIManager.get("AuditoryCues.actionMap");
+ if (audioActionMap != null) return audioActionMap;
+
+ final Object[] acList = (Object[])UIManager.get("AuditoryCues.cueList");
+ if (acList != null) {
+ audioActionMap = new ActionMapUIResource();
+ for (int counter = acList.length - 1; counter >= 0; counter--) {
+ audioActionMap.put(acList[counter], createAudioAction(acList[counter]));
+ }
+ }
+ UIManager.getLookAndFeelDefaults().put("AuditoryCues.actionMap", audioActionMap);
+
+ return audioActionMap;
+ }
+
+ /**
+ * We override getDefaults() so we can install our own debug defaults
+ * if needed for testing
+ */
+ public UIDefaults getDefaults() {
+ final UIDefaults table = new UIDefaults();
+ // use debug defaults if you want to see every query into the defaults object.
+ //UIDefaults table = new DebugDefaults();
+ try {
+ // PopupFactory.getSharedInstance().setPopupType(2);
+ initClassDefaults(table);
+
+ // Here we install all the Basic defaults in case we missed some in our System color
+ // or component defaults that follow. Eventually we will take this out.
+ // This is a big negative to performance so we want to get it out as soon
+ // as we are comfortable with the Aqua defaults.
+ super.initSystemColorDefaults(table);
+ super.initComponentDefaults(table);
+
+ // Because the last elements added win in precedence we add all of our aqua elements here.
+ initSystemColorDefaults(table);
+ initComponentDefaults(table);
+ } catch(final Exception e) {
+ e.printStackTrace();
+ }
+ return table;
+ }
+
+ /**
+ * Initialize the defaults table with the name of the ResourceBundle
+ * used for getting localized defaults. Also initialize the default
+ * locale used when no locale is passed into UIDefaults.get(). The
+ * default locale should generally not be relied upon. It is here for
+ * compatibility with releases prior to 1.4.
+ */
+ private void initResourceBundle(final UIDefaults table) {
+ table.setDefaultLocale(Locale.getDefault());
+ SwingAccessor.getUIDefaultsAccessor().addInternalBundle(table,
+ PKG_PREFIX + "resources.aqua");
+ try {
+ final ResourceBundle aquaProperties = ResourceBundle.getBundle(PKG_PREFIX + "resources.aqua");
+ final Enumeration propertyKeys = aquaProperties.getKeys();
+
+ while (propertyKeys.hasMoreElements()) {
+ final String key = propertyKeys.nextElement();
+ table.put(key, aquaProperties.getString(key));
+ }
+ } catch (final Exception e) {
+ }
+ }
+
+ /**
+ * This is the last step in the getDefaults routine usually called from our superclass
+ */
+ protected void initComponentDefaults(final UIDefaults table) {
+ initResourceBundle(table);
+
+ final InsetsUIResource zeroInsets = new InsetsUIResource(0, 0, 0, 0);
+ final InsetsUIResource menuItemMargin = zeroInsets;
+
+ // Entire Java application window refreshes when moving off Shortcut menu item
+ final Boolean useOpaqueComponents = Boolean.TRUE;
+
+ final Boolean buttonShouldBeOpaque = AquaUtils.shouldUseOpaqueButtons() ? Boolean.TRUE : Boolean.FALSE;
+
+ // *** List value objects
+ final Object listCellRendererActiveValue = new UIDefaults.ActiveValue(){
+ public Object createValue(UIDefaults defaultsTable) {
+ return new DefaultListCellRenderer.UIResource();
+ }
+ };
+
+ // SJA - I'm basing this on what is in the MetalLookAndFeel class, but
+ // without being based on BasicLookAndFeel. We want more flexibility.
+ // The key to doing this well is to use Lazy initializing classes as
+ // much as possible.
+
+ // Here I want to go to native and get all the values we'd need for colors etc.
+ final Border toolTipBorder = new BorderUIResource.EmptyBorderUIResource(2, 0, 2, 0);
+ final ColorUIResource toolTipBackground = new ColorUIResource(255, 255, (int)(255.0 * 0.80));
+ final ColorUIResource black = new ColorUIResource(Color.black);
+ final ColorUIResource white = new ColorUIResource(Color.white);
+ final ColorUIResource smokyGlass = new ColorUIResource(new Color(0, 0, 0, 152));
+ final ColorUIResource dockIconRim = new ColorUIResource(new Color(192, 192, 192, 192));
+ final ColorUIResource mediumTranslucentBlack = new ColorUIResource(new Color(0, 0, 0, 100));
+ final ColorUIResource translucentWhite = new ColorUIResource(new Color(255, 255, 255, 254));
+ // final ColorUIResource lightGray = new ColorUIResource(232, 232, 232);
+ final ColorUIResource disabled = new ColorUIResource(0.5f, 0.5f, 0.5f);
+ final ColorUIResource disabledShadow = new ColorUIResource(0.25f, 0.25f, 0.25f);
+ final ColorUIResource selected = new ColorUIResource(1.0f, 0.4f, 0.4f);
+
+ // Contrast tab UI colors
+
+ final ColorUIResource selectedTabTitlePressedColor = new ColorUIResource(240, 240, 240);
+ final ColorUIResource selectedTabTitleDisabledColor = new ColorUIResource(new Color(1, 1, 1, 0.55f));
+ final ColorUIResource selectedTabTitleNormalColor = white;
+ final ColorUIResource selectedTabTitleShadowDisabledColor = new ColorUIResource(new Color(0, 0, 0, 0.25f));
+ final ColorUIResource selectedTabTitleShadowNormalColor = mediumTranslucentBlack;
+ final ColorUIResource nonSelectedTabTitleNormalColor = black;
+
+ final ColorUIResource toolbarDragHandleColor = new ColorUIResource(140, 140, 140);
+
+ // sja todo Make these lazy values so we only get them when required - if we deem it necessary
+ // it may be the case that we think the overhead of a proxy lazy value is not worth delaying
+ // creating the object if we think that most swing apps will use this.
+ // the lazy value is useful for delaying initialization until this default value is actually
+ // accessed by the LAF instead of at init time, so making it lazy should speed up
+ // our launch times of Swing apps.
+
+ // *** Text value objects
+ final LazyValue marginBorder = t -> new BasicBorders.MarginBorder();
+
+ final int zero = 0;
+ final Object editorMargin = zeroInsets; // this is not correct - look at TextEdit to determine the right margin
+ final int textCaretBlinkRate = 500;
+ final LazyValue textFieldBorder = t ->
+ AquaTextFieldBorder.getTextFieldBorder();
+ final Object textAreaBorder = marginBorder; // text areas have no real border - radar 311073
+
+ final LazyValue scollListBorder = t ->
+ AquaScrollRegionBorder.getScrollRegionBorder();
+ final LazyValue aquaTitledBorder = t ->
+ AquaGroupBorder.getBorderForTitledBorder();
+ final LazyValue aquaInsetBorder = t ->
+ AquaGroupBorder.getTitlelessBorder();
+
+ final Border listHeaderBorder = AquaTableHeaderBorder.getListHeaderBorder();
+ final Border zeroBorder = new BorderUIResource.EmptyBorderUIResource(0, 0, 0, 0);
+
+ // we can't seem to proxy Colors
+ final Color selectionBackground = AquaImageFactory.getSelectionBackgroundColorUIResource();
+ final Color selectionForeground = AquaImageFactory.getSelectionForegroundColorUIResource();
+ final Color selectionInactiveBackground = AquaImageFactory.getSelectionInactiveBackgroundColorUIResource();
+ final Color selectionInactiveForeground = AquaImageFactory.getSelectionInactiveForegroundColorUIResource();
+
+ final Color textHighlightText = AquaImageFactory.getTextSelectionForegroundColorUIResource();
+ final Color textHighlight = AquaImageFactory.getTextSelectionBackgroundColorUIResource();
+ final Color textHighlightInactive = new ColorUIResource(212, 212, 212);
+
+ final Color textInactiveText = disabled;
+ final Color textForeground = black;
+ final Color textBackground = white;
+ final Color textInactiveBackground = white;
+
+ final Color textPasswordFieldCapsLockIconColor = mediumTranslucentBlack;
+
+ final LazyValue internalFrameBorder = t ->
+ BasicBorders.getInternalFrameBorder();
+ final Color desktopBackgroundColor = new ColorUIResource(new Color(65, 105, 170));//SystemColor.desktop
+
+ final Color focusRingColor = AquaImageFactory.getFocusRingColorUIResource();
+ final Border focusCellHighlightBorder = new BorderUIResource.LineBorderUIResource(focusRingColor);
+
+ final Color windowBackgroundColor = AquaImageFactory.getWindowBackgroundColorUIResource();
+ final Color panelBackgroundColor = windowBackgroundColor;
+ final Color tabBackgroundColor = windowBackgroundColor;
+ final Color controlBackgroundColor = windowBackgroundColor;
+
+ final LazyValue controlFont = t -> AquaFonts.getControlTextFont();
+ final LazyValue controlSmallFont = t ->
+ AquaFonts.getControlTextSmallFont();
+ final LazyValue alertHeaderFont = t -> AquaFonts.getAlertHeaderFont();
+ final LazyValue menuFont = t -> AquaFonts.getMenuFont();
+ final LazyValue viewFont = t -> AquaFonts.getViewFont();
+
+ final Color menuBackgroundColor = new ColorUIResource(Color.white);
+ final Color menuForegroundColor = black;
+
+ final Color menuSelectedForegroundColor = white;
+ final Color menuSelectedBackgroundColor = focusRingColor;
+
+ final Color menuDisabledBackgroundColor = menuBackgroundColor;
+ final Color menuDisabledForegroundColor = disabled;
+
+ final Color menuAccelForegroundColor = black;
+ final Color menuAccelSelectionForegroundColor = black;
+
+ final Border menuBorder = new AquaMenuBorder();
+
+ final UIDefaults.LazyInputMap controlFocusInputMap = new UIDefaults.LazyInputMap(new Object[]{
+ "SPACE", "pressed",
+ "released SPACE", "released"
+ });
+
+ // sja testing
+ final LazyValue confirmIcon = t ->
+ AquaImageFactory.getConfirmImageIcon();
+ final LazyValue cautionIcon = t ->
+ AquaImageFactory.getCautionImageIcon();
+ final LazyValue stopIcon = t ->
+ AquaImageFactory.getStopImageIcon();
+ final LazyValue securityIcon = t ->
+ AquaImageFactory.getLockImageIcon();
+
+ final AquaKeyBindings aquaKeyBindings = AquaKeyBindings.instance();
+
+ final Object[] defaults = {
+ "control", windowBackgroundColor, /* Default color for controls (buttons, sliders, etc) */
+
+ // Buttons
+ "Button.background", controlBackgroundColor,
+ "Button.foreground", black,
+ "Button.disabledText", disabled,
+ "Button.select", selected,
+ "Button.border",(LazyValue) t -> AquaButtonBorder.getDynamicButtonBorder(),
+ "Button.font", controlFont,
+ "Button.textIconGap", Integer.valueOf(4),
+ "Button.textShiftOffset", zero, // radar 3308129 - aqua doesn't move images when pressed.
+ "Button.focusInputMap", controlFocusInputMap,
+ "Button.margin", new InsetsUIResource(0, 2, 0, 2),
+ "Button.opaque", buttonShouldBeOpaque,
+
+ "CheckBox.background", controlBackgroundColor,
+ "CheckBox.foreground", black,
+ "CheckBox.disabledText", disabled,
+ "CheckBox.select", selected,
+ "CheckBox.icon",(LazyValue) t -> AquaButtonCheckBoxUI.getSizingCheckBoxIcon(),
+ "CheckBox.font", controlFont,
+ "CheckBox.border", AquaButtonBorder.getBevelButtonBorder(),
+ "CheckBox.margin", new InsetsUIResource(1, 1, 0, 1),
+ // radar 3583849. This property never gets
+ // used. The border for the Checkbox gets overridden
+ // by AquaRadiButtonUI.setThemeBorder(). Needs refactoring. (vm)
+ // why is button focus commented out?
+ //"CheckBox.focus", getFocusColor(),
+ "CheckBox.focusInputMap", controlFocusInputMap,
+
+ "CheckBoxMenuItem.font", menuFont,
+ "CheckBoxMenuItem.acceleratorFont", menuFont,
+ "CheckBoxMenuItem.background", menuBackgroundColor,
+ "CheckBoxMenuItem.foreground", menuForegroundColor,
+ "CheckBoxMenuItem.selectionBackground", menuSelectedBackgroundColor,
+ "CheckBoxMenuItem.selectionForeground", menuSelectedForegroundColor,
+ "CheckBoxMenuItem.disabledBackground", menuDisabledBackgroundColor,
+ "CheckBoxMenuItem.disabledForeground", menuDisabledForegroundColor,
+ "CheckBoxMenuItem.acceleratorForeground", menuAccelForegroundColor,
+ "CheckBoxMenuItem.acceleratorSelectionForeground", menuAccelSelectionForegroundColor,
+ "CheckBoxMenuItem.acceleratorDelimiter", "",
+ "CheckBoxMenuItem.border", menuBorder, // for inset calculation
+ "CheckBoxMenuItem.margin", menuItemMargin,
+ "CheckBoxMenuItem.borderPainted", Boolean.TRUE,
+ "CheckBoxMenuItem.checkIcon",(LazyValue) t -> AquaImageFactory.getMenuItemCheckIcon(),
+ "CheckBoxMenuItem.dashIcon",(LazyValue) t -> AquaImageFactory.getMenuItemDashIcon(),
+ //"CheckBoxMenuItem.arrowIcon", null,
+
+ "ColorChooser.background", panelBackgroundColor,
+
+ // *** ComboBox
+ "ComboBox.font", controlFont,
+ "ComboBox.background", controlBackgroundColor, //menuBackgroundColor, // "menu" when it has no scrollbar, "listView" when it does
+ "ComboBox.foreground", menuForegroundColor,
+ "ComboBox.selectionBackground", menuSelectedBackgroundColor,
+ "ComboBox.selectionForeground", menuSelectedForegroundColor,
+ "ComboBox.disabledBackground", menuDisabledBackgroundColor,
+ "ComboBox.disabledForeground", menuDisabledForegroundColor,
+ "ComboBox.ancestorInputMap", aquaKeyBindings.getComboBoxInputMap(),
+
+ "DesktopIcon.border", internalFrameBorder,
+ "DesktopIcon.borderColor", smokyGlass,
+ "DesktopIcon.borderRimColor", dockIconRim,
+ "DesktopIcon.labelBackground", mediumTranslucentBlack,
+ "Desktop.background", desktopBackgroundColor,
+
+ "EditorPane.focusInputMap", aquaKeyBindings.getMultiLineTextInputMap(),
+ "EditorPane.font", controlFont,
+ "EditorPane.background", textBackground,
+ "EditorPane.foreground", textForeground,
+ "EditorPane.selectionBackground", textHighlight,
+ "EditorPane.selectionForeground", textHighlightText,
+ "EditorPane.caretForeground", textForeground,
+ "EditorPane.caretBlinkRate", textCaretBlinkRate,
+ "EditorPane.inactiveForeground", textInactiveText,
+ "EditorPane.inactiveBackground", textInactiveBackground,
+ "EditorPane.border", textAreaBorder,
+ "EditorPane.margin", editorMargin,
+
+ "FileChooser.newFolderIcon", AquaIcon.SystemIcon.getFolderIconUIResource(),
+ "FileChooser.upFolderIcon", AquaIcon.SystemIcon.getFolderIconUIResource(),
+ "FileChooser.homeFolderIcon", AquaIcon.SystemIcon.getDesktopIconUIResource(),
+ "FileChooser.detailsViewIcon", AquaIcon.SystemIcon.getComputerIconUIResource(),
+ "FileChooser.listViewIcon", AquaIcon.SystemIcon.getComputerIconUIResource(),
+
+ "FileView.directoryIcon", AquaIcon.SystemIcon.getFolderIconUIResource(),
+ "FileView.fileIcon", AquaIcon.SystemIcon.getDocumentIconUIResource(),
+ "FileView.computerIcon", AquaIcon.SystemIcon.getDesktopIconUIResource(),
+ "FileView.hardDriveIcon", AquaIcon.SystemIcon.getHardDriveIconUIResource(),
+ "FileView.floppyDriveIcon", AquaIcon.SystemIcon.getFloppyIconUIResource(),
+
+ // File View
+ "FileChooser.cancelButtonMnemonic", zero,
+ "FileChooser.saveButtonMnemonic", zero,
+ "FileChooser.openButtonMnemonic", zero,
+ "FileChooser.updateButtonMnemonic", zero,
+ "FileChooser.helpButtonMnemonic", zero,
+ "FileChooser.directoryOpenButtonMnemonic", zero,
+
+ "FileChooser.lookInLabelMnemonic", zero,
+ "FileChooser.fileNameLabelMnemonic", zero,
+ "FileChooser.filesOfTypeLabelMnemonic", zero,
+
+ "Focus.color", focusRingColor,
+
+ "FormattedTextField.focusInputMap", aquaKeyBindings.getFormattedTextFieldInputMap(),
+ "FormattedTextField.font", controlFont,
+ "FormattedTextField.background", textBackground,
+ "FormattedTextField.foreground", textForeground,
+ "FormattedTextField.inactiveForeground", textInactiveText,
+ "FormattedTextField.inactiveBackground", textInactiveBackground,
+ "FormattedTextField.selectionBackground", textHighlight,
+ "FormattedTextField.selectionForeground", textHighlightText,
+ "FormattedTextField.caretForeground", textForeground,
+ "FormattedTextField.caretBlinkRate", textCaretBlinkRate,
+ "FormattedTextField.border", textFieldBorder,
+ "FormattedTextField.margin", zeroInsets,
+
+ "IconButton.font", controlSmallFont,
+
+ "InternalFrame.titleFont", menuFont,
+ "InternalFrame.background", windowBackgroundColor,
+ "InternalFrame.borderColor", windowBackgroundColor,
+ "InternalFrame.borderShadow", Color.red,
+ "InternalFrame.borderDarkShadow", Color.green,
+ "InternalFrame.borderHighlight", Color.blue,
+ "InternalFrame.borderLight", Color.yellow,
+ "InternalFrame.opaque", Boolean.FALSE,
+ "InternalFrame.border", null, //internalFrameBorder,
+ "InternalFrame.icon", null,
+
+ "InternalFrame.paletteBorder", null,//internalFrameBorder,
+ "InternalFrame.paletteTitleFont", menuFont,
+ "InternalFrame.paletteBackground", windowBackgroundColor,
+
+ "InternalFrame.optionDialogBorder", null,//internalFrameBorder,
+ "InternalFrame.optionDialogTitleFont", menuFont,
+ "InternalFrame.optionDialogBackground", windowBackgroundColor,
+
+ /* Default frame icons are undefined for Basic. */
+
+ "InternalFrame.closeIcon",(LazyValue) t -> AquaInternalFrameUI.exportCloseIcon(),
+ "InternalFrame.maximizeIcon",(LazyValue) t -> AquaInternalFrameUI.exportZoomIcon(),
+ "InternalFrame.iconifyIcon",(LazyValue) t -> AquaInternalFrameUI.exportMinimizeIcon(),
+ "InternalFrame.minimizeIcon",(LazyValue) t -> AquaInternalFrameUI.exportMinimizeIcon(),
+ // this could be either grow or icon
+ // we decided to make it icon so that anyone who uses
+ // these for ui will have different icons for max and min
+ // these icons are pretty crappy to use in Mac OS X since
+ // they really are interactive but we have to return a static
+ // icon for now.
+
+ // InternalFrame Auditory Cue Mappings
+ "InternalFrame.closeSound", null,
+ "InternalFrame.maximizeSound", null,
+ "InternalFrame.minimizeSound", null,
+ "InternalFrame.restoreDownSound", null,
+ "InternalFrame.restoreUpSound", null,
+
+ "InternalFrame.activeTitleBackground", windowBackgroundColor,
+ "InternalFrame.activeTitleForeground", textForeground,
+ "InternalFrame.inactiveTitleBackground", windowBackgroundColor,
+ "InternalFrame.inactiveTitleForeground", textInactiveText,
+ "InternalFrame.windowBindings", new Object[]{
+ "shift ESCAPE", "showSystemMenu",
+ "ctrl SPACE", "showSystemMenu",
+ "ESCAPE", "hideSystemMenu"
+ },
+
+ // Radar [3543438]. We now define the TitledBorder properties for font and color.
+ // Aqua HIG doesn't define TitledBorders as Swing does. Eventually, we might want to
+ // re-think TitledBorder to behave more like a Box (NSBox). (vm)
+ "TitledBorder.font", controlFont,
+ "TitledBorder.titleColor", black,
+ // "TitledBorder.border", -- we inherit this property from BasicLookAndFeel (etched border)
+ "TitledBorder.aquaVariant", aquaTitledBorder, // this is the border that matches what aqua really looks like
+ "InsetBorder.aquaVariant", aquaInsetBorder, // this is the title-less variant
+
+ // *** Label
+ "Label.font", controlFont, // themeLabelFont is for small things like ToolbarButtons
+ "Label.background", controlBackgroundColor,
+ "Label.foreground", black,
+ "Label.disabledForeground", disabled,
+ "Label.disabledShadow", disabledShadow,
+ "Label.opaque", useOpaqueComponents,
+ "Label.border", null,
+
+ "List.font", viewFont, // [3577901] Aqua HIG says "default font of text in lists and tables" should be 12 point (vm).
+ "List.background", white,
+ "List.foreground", black,
+ "List.selectionBackground", selectionBackground,
+ "List.selectionForeground", selectionForeground,
+ "List.selectionInactiveBackground", selectionInactiveBackground,
+ "List.selectionInactiveForeground", selectionInactiveForeground,
+ "List.focusCellHighlightBorder", focusCellHighlightBorder,
+ "List.border", null,
+ "List.cellRenderer", listCellRendererActiveValue,
+
+ "List.sourceListBackgroundPainter",(LazyValue) t -> AquaListUI.getSourceListBackgroundPainter(),
+ "List.sourceListSelectionBackgroundPainter",(LazyValue) t -> AquaListUI.getSourceListSelectionBackgroundPainter(),
+ "List.sourceListFocusedSelectionBackgroundPainter",(LazyValue) t -> AquaListUI.getSourceListFocusedSelectionBackgroundPainter(),
+ "List.evenRowBackgroundPainter",(LazyValue) t -> AquaListUI.getListEvenBackgroundPainter(),
+ "List.oddRowBackgroundPainter",(LazyValue) t -> AquaListUI.getListOddBackgroundPainter(),
+
+ // The modifier for the Mac is meta, not control.
+ "List.focusInputMap", aquaKeyBindings.getListInputMap(),
+
+ //"List.scrollPaneBorder", listBoxBorder, // Not used in Swing1.1
+ //"ListItem.border", ThemeMenu.listItemBorder(), // for inset calculation
+
+ // *** Menus
+ "Menu.font", menuFont,
+ "Menu.acceleratorFont", menuFont,
+ "Menu.background", menuBackgroundColor,
+ "Menu.foreground", menuForegroundColor,
+ "Menu.selectionBackground", menuSelectedBackgroundColor,
+ "Menu.selectionForeground", menuSelectedForegroundColor,
+ "Menu.disabledBackground", menuDisabledBackgroundColor,
+ "Menu.disabledForeground", menuDisabledForegroundColor,
+ "Menu.acceleratorForeground", menuAccelForegroundColor,
+ "Menu.acceleratorSelectionForeground", menuAccelSelectionForegroundColor,
+ //"Menu.border", ThemeMenu.menuItemBorder(), // for inset calculation
+ "Menu.border", menuBorder,
+ "Menu.borderPainted", Boolean.FALSE,
+ "Menu.margin", menuItemMargin,
+ //"Menu.checkIcon", emptyCheckIcon, // A non-drawing GlyphIcon to make the spacing consistent
+ "Menu.arrowIcon",(LazyValue) t -> AquaImageFactory.getMenuArrowIcon(),
+ "Menu.consumesTabs", Boolean.TRUE,
+ "Menu.menuPopupOffsetY", Integer.valueOf(1),
+ "Menu.submenuPopupOffsetY", Integer.valueOf(-4),
+
+ "MenuBar.font", menuFont,
+ "MenuBar.background", menuBackgroundColor, // not a menu item, not selected
+ "MenuBar.foreground", menuForegroundColor,
+ "MenuBar.border", new AquaMenuBarBorder(), // sja make lazy!
+ "MenuBar.margin", new InsetsUIResource(0, 8, 0, 8), // sja make lazy!
+ "MenuBar.selectionBackground", menuSelectedBackgroundColor, // not a menu item, is selected
+ "MenuBar.selectionForeground", menuSelectedForegroundColor,
+ "MenuBar.disabledBackground", menuDisabledBackgroundColor, //ThemeBrush.GetThemeBrushForMenu(false, false), // not a menu item, not selected
+ "MenuBar.disabledForeground", menuDisabledForegroundColor,
+ "MenuBar.backgroundPainter",(LazyValue) t -> AquaMenuPainter.getMenuBarPainter(),
+ "MenuBar.selectedBackgroundPainter",(LazyValue) t -> AquaMenuPainter.getSelectedMenuBarItemPainter(),
+
+ "MenuItem.font", menuFont,
+ "MenuItem.acceleratorFont", menuFont,
+ "MenuItem.background", menuBackgroundColor,
+ "MenuItem.foreground", menuForegroundColor,
+ "MenuItem.selectionBackground", menuSelectedBackgroundColor,
+ "MenuItem.selectionForeground", menuSelectedForegroundColor,
+ "MenuItem.disabledBackground", menuDisabledBackgroundColor,
+ "MenuItem.disabledForeground", menuDisabledForegroundColor,
+ "MenuItem.acceleratorForeground", menuAccelForegroundColor,
+ "MenuItem.acceleratorSelectionForeground", menuAccelSelectionForegroundColor,
+ "MenuItem.acceleratorDelimiter", "",
+ "MenuItem.border", menuBorder,
+ "MenuItem.margin", menuItemMargin,
+ "MenuItem.borderPainted", Boolean.TRUE,
+ //"MenuItem.checkIcon", emptyCheckIcon, // A non-drawing GlyphIcon to make the spacing consistent
+ //"MenuItem.arrowIcon", null,
+ "MenuItem.selectedBackgroundPainter",(LazyValue) t -> AquaMenuPainter.getSelectedMenuItemPainter(),
+
+ // *** OptionPane
+ // You can additionaly define OptionPane.messageFont which will
+ // dictate the fonts used for the message, and
+ // OptionPane.buttonFont, which defines the font for the buttons.
+ "OptionPane.font", alertHeaderFont,
+ "OptionPane.messageFont", controlFont,
+ "OptionPane.buttonFont", controlFont,
+ "OptionPane.background", windowBackgroundColor,
+ "OptionPane.foreground", black,
+ "OptionPane.messageForeground", black,
+ "OptionPane.border", new BorderUIResource.EmptyBorderUIResource(12, 21, 17, 21),
+ "OptionPane.messageAreaBorder", zeroBorder,
+ "OptionPane.buttonAreaBorder", new BorderUIResource.EmptyBorderUIResource(13, 0, 0, 0),
+ "OptionPane.minimumSize", new DimensionUIResource(262, 90),
+
+ "OptionPane.errorIcon", stopIcon,
+ "OptionPane.informationIcon", confirmIcon,
+ "OptionPane.warningIcon", cautionIcon,
+ "OptionPane.questionIcon", confirmIcon,
+ "_SecurityDecisionIcon", securityIcon,
+ "OptionPane.windowBindings", new Object[]{"ESCAPE", "close"},
+ // OptionPane Auditory Cue Mappings
+ "OptionPane.errorSound", null,
+ "OptionPane.informationSound", null, // Info and Plain
+ "OptionPane.questionSound", null,
+ "OptionPane.warningSound", null,
+ "OptionPane.buttonClickThreshhold", Integer.valueOf(500),
+ "OptionPane.yesButtonMnemonic", "",
+ "OptionPane.noButtonMnemonic", "",
+ "OptionPane.okButtonMnemonic", "",
+ "OptionPane.cancelButtonMnemonic", "",
+
+ "Panel.font", controlFont,
+ "Panel.background", panelBackgroundColor, //new ColorUIResource(0.5647f, 0.9957f, 0.5059f),
+ "Panel.foreground", black,
+ "Panel.opaque", useOpaqueComponents,
+
+ "PasswordField.focusInputMap", aquaKeyBindings.getPasswordFieldInputMap(),
+ "PasswordField.font", controlFont,
+ "PasswordField.background", textBackground,
+ "PasswordField.foreground", textForeground,
+ "PasswordField.inactiveForeground", textInactiveText,
+ "PasswordField.inactiveBackground", textInactiveBackground,
+ "PasswordField.selectionBackground", textHighlight,
+ "PasswordField.selectionForeground", textHighlightText,
+ "PasswordField.caretForeground", textForeground,
+ "PasswordField.caretBlinkRate", textCaretBlinkRate,
+ "PasswordField.border", textFieldBorder,
+ "PasswordField.margin", zeroInsets,
+ "PasswordField.echoChar", Character.valueOf((char)0x25CF),
+ "PasswordField.capsLockIconColor", textPasswordFieldCapsLockIconColor,
+
+ "PopupMenu.font", menuFont,
+ "PopupMenu.background", menuBackgroundColor,
+ // Fix for 7154516: make popups opaque
+ "PopupMenu.translucentBackground", white,
+ "PopupMenu.foreground", menuForegroundColor,
+ "PopupMenu.selectionBackground", menuSelectedBackgroundColor,
+ "PopupMenu.selectionForeground", menuSelectedForegroundColor,
+ "PopupMenu.border", menuBorder,
+// "PopupMenu.margin",
+
+ "ProgressBar.font", controlFont,
+ "ProgressBar.foreground", black,
+ "ProgressBar.background", controlBackgroundColor,
+ "ProgressBar.selectionForeground", black,
+ "ProgressBar.selectionBackground", white,
+ "ProgressBar.border", new BorderUIResource(BorderFactory.createEmptyBorder()),
+ "ProgressBar.repaintInterval", Integer.valueOf(20),
+
+ "RadioButton.background", controlBackgroundColor,
+ "RadioButton.foreground", black,
+ "RadioButton.disabledText", disabled,
+ "RadioButton.select", selected,
+ "RadioButton.icon",(LazyValue) t -> AquaButtonRadioUI.getSizingRadioButtonIcon(),
+ "RadioButton.font", controlFont,
+ "RadioButton.border", AquaButtonBorder.getBevelButtonBorder(),
+ "RadioButton.margin", new InsetsUIResource(1, 1, 0, 1),
+ "RadioButton.focusInputMap", controlFocusInputMap,
+
+ "RadioButtonMenuItem.font", menuFont,
+ "RadioButtonMenuItem.acceleratorFont", menuFont,
+ "RadioButtonMenuItem.background", menuBackgroundColor,
+ "RadioButtonMenuItem.foreground", menuForegroundColor,
+ "RadioButtonMenuItem.selectionBackground", menuSelectedBackgroundColor,
+ "RadioButtonMenuItem.selectionForeground", menuSelectedForegroundColor,
+ "RadioButtonMenuItem.disabledBackground", menuDisabledBackgroundColor,
+ "RadioButtonMenuItem.disabledForeground", menuDisabledForegroundColor,
+ "RadioButtonMenuItem.acceleratorForeground", menuAccelForegroundColor,
+ "RadioButtonMenuItem.acceleratorSelectionForeground", menuAccelSelectionForegroundColor,
+ "RadioButtonMenuItem.acceleratorDelimiter", "",
+ "RadioButtonMenuItem.border", menuBorder, // for inset calculation
+ "RadioButtonMenuItem.margin", menuItemMargin,
+ "RadioButtonMenuItem.borderPainted", Boolean.TRUE,
+ "RadioButtonMenuItem.checkIcon",(LazyValue) t -> AquaImageFactory.getMenuItemCheckIcon(),
+ "RadioButtonMenuItem.dashIcon",(LazyValue) t -> AquaImageFactory.getMenuItemDashIcon(),
+ //"RadioButtonMenuItem.arrowIcon", null,
+
+ "Separator.background", null,
+ "Separator.foreground", new ColorUIResource(0xD4, 0xD4, 0xD4),
+
+ "ScrollBar.border", null,
+ "ScrollBar.focusInputMap", aquaKeyBindings.getScrollBarInputMap(),
+ "ScrollBar.focusInputMap.RightToLeft", aquaKeyBindings.getScrollBarRightToLeftInputMap(),
+ "ScrollBar.width", Integer.valueOf(16),
+ "ScrollBar.background", white,
+ "ScrollBar.foreground", black,
+
+ "ScrollPane.font", controlFont,
+ "ScrollPane.background", white,
+ "ScrollPane.foreground", black, //$
+ "ScrollPane.border", scollListBorder,
+ "ScrollPane.viewportBorder", null,
+
+ "ScrollPane.ancestorInputMap", aquaKeyBindings.getScrollPaneInputMap(),
+ "ScrollPane.ancestorInputMap.RightToLeft", new UIDefaults.LazyInputMap(new Object[]{}),
+
+ "Viewport.font", controlFont,
+ "Viewport.background", white, // The background for tables, lists, etc
+ "Viewport.foreground", black,
+
+ // *** Slider
+ "Slider.foreground", black, "Slider.background", controlBackgroundColor,
+ "Slider.font", controlSmallFont,
+ //"Slider.highlight", table.get("controlLtHighlight"),
+ //"Slider.shadow", table.get("controlShadow"),
+ //"Slider.focus", table.get("controlDkShadow"),
+ "Slider.tickColor", new ColorUIResource(Color.GRAY),
+ "Slider.border", null,
+ "Slider.focusInsets", new InsetsUIResource(2, 2, 2, 2),
+ "Slider.focusInputMap", aquaKeyBindings.getSliderInputMap(),
+ "Slider.focusInputMap.RightToLeft", aquaKeyBindings.getSliderRightToLeftInputMap(),
+
+ // *** Spinner
+ "Spinner.font", controlFont,
+ "Spinner.background", controlBackgroundColor,
+ "Spinner.foreground", black,
+ "Spinner.border", null,
+ "Spinner.arrowButtonSize", new Dimension(16, 5),
+ "Spinner.ancestorInputMap", aquaKeyBindings.getSpinnerInputMap(),
+ "Spinner.editorBorderPainted", Boolean.TRUE,
+ "Spinner.editorAlignment", SwingConstants.TRAILING,
+
+ // *** SplitPane
+ //"SplitPane.highlight", table.get("controlLtHighlight"),
+ //"SplitPane.shadow", table.get("controlShadow"),
+ "SplitPane.background", panelBackgroundColor,
+ "SplitPane.border", scollListBorder,
+ "SplitPane.dividerSize", Integer.valueOf(9), //$
+ "SplitPaneDivider.border", null, // AquaSplitPaneDividerUI draws it
+ "SplitPaneDivider.horizontalGradientVariant",(LazyValue) t -> AquaSplitPaneDividerUI.getHorizontalSplitDividerGradientVariant(),
+
+ // *** TabbedPane
+ "TabbedPane.font", controlFont,
+ "TabbedPane.smallFont", controlSmallFont,
+ "TabbedPane.useSmallLayout", Boolean.FALSE,//sSmallTabs ? Boolean.TRUE : Boolean.FALSE,
+ "TabbedPane.background", tabBackgroundColor, // for bug [3398277] use a background color so that
+ // tabs on a custom pane get erased when they are removed.
+ "TabbedPane.foreground", black, //ThemeTextColor.GetThemeTextColor(AppearanceConstants.kThemeTextColorTabFrontActive),
+ //"TabbedPane.lightHighlight", table.get("controlLtHighlight"),
+ //"TabbedPane.highlight", table.get("controlHighlight"),
+ //"TabbedPane.shadow", table.get("controlShadow"),
+ //"TabbedPane.darkShadow", table.get("controlDkShadow"),
+ //"TabbedPane.focus", table.get("controlText"),
+ "TabbedPane.opaque", useOpaqueComponents,
+ "TabbedPane.textIconGap", Integer.valueOf(4),
+ "TabbedPane.tabInsets", new InsetsUIResource(0, 10, 3, 10), // Label within tab (top, left, bottom, right)
+ //"TabbedPane.rightTabInsets", new InsetsUIResource(0, 10, 3, 10), // Label within tab (top, left, bottom, right)
+ "TabbedPane.leftTabInsets", new InsetsUIResource(0, 10, 3, 10), // Label within tab
+ "TabbedPane.rightTabInsets", new InsetsUIResource(0, 10, 3, 10), // Label within tab
+ //"TabbedPane.tabAreaInsets", new InsetsUIResource(3, 9, -1, 9), // Tabs relative to edge of pane (negative value for overlapping)
+ "TabbedPane.tabAreaInsets", new InsetsUIResource(3, 9, -1, 9), // Tabs relative to edge of pane (negative value for overlapping)
+ // (top = side opposite pane, left = edge || to pane, bottom = side adjacent to pane, right = left) - see rotateInsets
+ "TabbedPane.contentBorderInsets", new InsetsUIResource(8, 0, 0, 0), // width of border
+ //"TabbedPane.selectedTabPadInsets", new InsetsUIResource(0, 0, 1, 0), // Really outsets, this is where we allow for overlap
+ "TabbedPane.selectedTabPadInsets", new InsetsUIResource(0, 0, 0, 0), // Really outsets, this is where we allow for overlap
+ "TabbedPane.tabsOverlapBorder", Boolean.TRUE,
+ "TabbedPane.selectedTabTitlePressedColor", selectedTabTitlePressedColor,
+ "TabbedPane.selectedTabTitleDisabledColor", selectedTabTitleDisabledColor,
+ "TabbedPane.selectedTabTitleNormalColor", selectedTabTitleNormalColor,
+ "TabbedPane.selectedTabTitleShadowDisabledColor", selectedTabTitleShadowDisabledColor,
+ "TabbedPane.selectedTabTitleShadowNormalColor", selectedTabTitleShadowNormalColor,
+ "TabbedPane.nonSelectedTabTitleNormalColor", nonSelectedTabTitleNormalColor,
+
+ // *** Table
+ "Table.font", viewFont, // [3577901] Aqua HIG says "default font of text in lists and tables" should be 12 point (vm).
+ "Table.foreground", black, // cell text color
+ "Table.background", white, // cell background color
+ "Table.selectionForeground", selectionForeground,
+ "Table.selectionBackground", selectionBackground,
+ "Table.selectionInactiveBackground", selectionInactiveBackground,
+ "Table.selectionInactiveForeground", selectionInactiveForeground,
+ "Table.gridColor", white, // grid line color
+ "Table.focusCellBackground", textHighlightText,
+ "Table.focusCellForeground", textHighlight,
+ "Table.focusCellHighlightBorder", focusCellHighlightBorder,
+ "Table.scrollPaneBorder", scollListBorder,
+
+ "Table.ancestorInputMap", aquaKeyBindings.getTableInputMap(),
+ "Table.ancestorInputMap.RightToLeft", aquaKeyBindings.getTableRightToLeftInputMap(),
+
+ "TableHeader.font", controlSmallFont,
+ "TableHeader.foreground", black,
+ "TableHeader.background", white, // header background
+ "TableHeader.cellBorder", listHeaderBorder,
+
+ // *** Text
+ "TextArea.focusInputMap", aquaKeyBindings.getMultiLineTextInputMap(),
+ "TextArea.font", controlFont,
+ "TextArea.background", textBackground,
+ "TextArea.foreground", textForeground,
+ "TextArea.inactiveForeground", textInactiveText,
+ "TextArea.inactiveBackground", textInactiveBackground,
+ "TextArea.selectionBackground", textHighlight,
+ "TextArea.selectionForeground", textHighlightText,
+ "TextArea.caretForeground", textForeground,
+ "TextArea.caretBlinkRate", textCaretBlinkRate,
+ "TextArea.border", textAreaBorder,
+ "TextArea.margin", zeroInsets,
+
+ "TextComponent.selectionBackgroundInactive", textHighlightInactive,
+
+ "TextField.focusInputMap", aquaKeyBindings.getTextFieldInputMap(),
+ "TextField.font", controlFont,
+ "TextField.background", textBackground,
+ "TextField.foreground", textForeground,
+ "TextField.inactiveForeground", textInactiveText,
+ "TextField.inactiveBackground", textInactiveBackground,
+ "TextField.selectionBackground", textHighlight,
+ "TextField.selectionForeground", textHighlightText,
+ "TextField.caretForeground", textForeground,
+ "TextField.caretBlinkRate", textCaretBlinkRate,
+ "TextField.border", textFieldBorder,
+ "TextField.margin", zeroInsets,
+
+ "TextPane.focusInputMap", aquaKeyBindings.getMultiLineTextInputMap(),
+ "TextPane.font", controlFont,
+ "TextPane.background", textBackground,
+ "TextPane.foreground", textForeground,
+ "TextPane.selectionBackground", textHighlight,
+ "TextPane.selectionForeground", textHighlightText,
+ "TextPane.caretForeground", textForeground,
+ "TextPane.caretBlinkRate", textCaretBlinkRate,
+ "TextPane.inactiveForeground", textInactiveText,
+ "TextPane.inactiveBackground", textInactiveBackground,
+ "TextPane.border", textAreaBorder,
+ "TextPane.margin", editorMargin,
+
+ // *** ToggleButton
+ "ToggleButton.background", controlBackgroundColor,
+ "ToggleButton.foreground", black,
+ "ToggleButton.disabledText", disabled,
+ // we need to go through and find out if these are used, and if not what to set
+ // so that subclasses will get good aqua like colors.
+ // "ToggleButton.select", getControlShadow(),
+ // "ToggleButton.text", getControl(),
+ // "ToggleButton.disabledSelectedText", getControlDarkShadow(),
+ // "ToggleButton.disabledBackground", getControl(),
+ // "ToggleButton.disabledSelectedBackground", getControlShadow(),
+ //"ToggleButton.focus", getFocusColor(),
+ "ToggleButton.border",(LazyValue) t -> AquaButtonBorder.getDynamicButtonBorder(), // sja make this lazy!
+ "ToggleButton.font", controlFont,
+ "ToggleButton.focusInputMap", controlFocusInputMap,
+ "ToggleButton.margin", new InsetsUIResource(2, 2, 2, 2),
+
+ // *** ToolBar
+ "ToolBar.font", controlFont,
+ "ToolBar.background", panelBackgroundColor,
+ "ToolBar.foreground", new ColorUIResource(Color.gray),
+ "ToolBar.dockingBackground", panelBackgroundColor,
+ "ToolBar.dockingForeground", selectionBackground,
+ "ToolBar.floatingBackground", panelBackgroundColor,
+ "ToolBar.floatingForeground", new ColorUIResource(Color.darkGray),
+ "ToolBar.border",(LazyValue) t -> AquaToolBarUI.getToolBarBorder(),
+ "ToolBar.borderHandleColor", toolbarDragHandleColor,
+ //"ToolBar.separatorSize", new DimensionUIResource( 10, 10 ),
+ "ToolBar.separatorSize", null,
+
+ // *** ToolBarButton
+ "ToolBarButton.margin", new InsetsUIResource(3, 3, 3, 3),
+ "ToolBarButton.insets", new InsetsUIResource(1, 1, 1, 1),
+
+ // *** ToolTips
+ "ToolTip.font", controlSmallFont,
+ //$ Tooltips - Same color as help balloons?
+ "ToolTip.background", toolTipBackground,
+ "ToolTip.foreground", black,
+ "ToolTip.border", toolTipBorder,
+
+ // *** Tree
+ "Tree.font", viewFont, // [3577901] Aqua HIG says "default font of text in lists and tables" should be 12 point (vm).
+ "Tree.background", white,
+ "Tree.foreground", black,
+ // for now no lines
+ "Tree.hash", white, //disabled, // Line color
+ "Tree.line", white, //disabled, // Line color
+ "Tree.textForeground", black,
+ "Tree.textBackground", white,
+ "Tree.selectionForeground", selectionForeground,
+ "Tree.selectionBackground", selectionBackground,
+ "Tree.selectionInactiveBackground", selectionInactiveBackground,
+ "Tree.selectionInactiveForeground", selectionInactiveForeground,
+ "Tree.selectionBorderColor", selectionBackground, // match the background so it looks like we don't draw anything
+ "Tree.editorBorderSelectionColor", null, // The EditTextFrame provides its own border
+ // "Tree.editorBorder", textFieldBorder, // If you still have Sun bug 4376328 in DefaultTreeCellEditor, it has to have the same insets as TextField.border
+ "Tree.leftChildIndent", Integer.valueOf(7),//$
+ "Tree.rightChildIndent", Integer.valueOf(13),//$
+ "Tree.rowHeight", Integer.valueOf(19),// iconHeight + 3, to match finder - a zero would have the renderer decide, except that leaves the icons touching
+ "Tree.scrollsOnExpand", Boolean.FALSE,
+ "Tree.openIcon",(LazyValue) t -> AquaImageFactory.getTreeOpenFolderIcon(), // Open folder icon
+ "Tree.closedIcon",(LazyValue) t -> AquaImageFactory.getTreeFolderIcon(), // Closed folder icon
+ "Tree.leafIcon",(LazyValue) t -> AquaImageFactory.getTreeDocumentIcon(), // Document icon
+ "Tree.expandedIcon",(LazyValue) t -> AquaImageFactory.getTreeExpandedIcon(),
+ "Tree.collapsedIcon",(LazyValue) t -> AquaImageFactory.getTreeCollapsedIcon(),
+ "Tree.rightToLeftCollapsedIcon",(LazyValue) t -> AquaImageFactory.getTreeRightToLeftCollapsedIcon(),
+ "Tree.changeSelectionWithFocus", Boolean.TRUE,
+ "Tree.drawsFocusBorderAroundIcon", Boolean.FALSE,
+
+ "Tree.focusInputMap", aquaKeyBindings.getTreeInputMap(),
+ "Tree.focusInputMap.RightToLeft", aquaKeyBindings.getTreeRightToLeftInputMap(),
+ "Tree.ancestorInputMap", new UIDefaults.LazyInputMap(new Object[]{"ESCAPE", "cancel"}),};
+
+ table.putDefaults(defaults);
+ SwingUtilities2.putAATextInfo(true, table);
+ }
+
+ protected void initSystemColorDefaults(final UIDefaults table) {
+// String[] defaultSystemColors = {
+// "desktop", "#005C5C", /* Color of the desktop background */
+// "activeCaption", "#000080", /* Color for captions (title bars) when they are active. */
+// "activeCaptionText", "#FFFFFF", /* Text color for text in captions (title bars). */
+// "activeCaptionBorder", "#C0C0C0", /* Border color for caption (title bar) window borders. */
+// "inactiveCaption", "#808080", /* Color for captions (title bars) when not active. */
+// "inactiveCaptionText", "#C0C0C0", /* Text color for text in inactive captions (title bars). */
+// "inactiveCaptionBorder", "#C0C0C0", /* Border color for inactive caption (title bar) window borders. */
+// "window", "#FFFFFF", /* Default color for the interior of windows */
+// "windowBorder", "#000000", /* ??? */
+// "windowText", "#000000", /* ??? */
+// "menu", "#C0C0C0", /* Background color for menus */
+// "menuText", "#000000", /* Text color for menus */
+// "text", "#C0C0C0", /* Text background color */
+// "textText", "#000000", /* Text foreground color */
+// "textHighlight", "#000080", /* Text background color when selected */
+// "textHighlightText", "#FFFFFF", /* Text color when selected */
+// "textInactiveText", "#808080", /* Text color when disabled */
+// "control", "#C0C0C0", /* Default color for controls (buttons, sliders, etc) */
+// "controlText", "#000000", /* Default color for text in controls */
+// "controlHighlight", "#C0C0C0", /* Specular highlight (opposite of the shadow) */
+// "controlLtHighlight", "#FFFFFF", /* Highlight color for controls */
+// "controlShadow", "#808080", /* Shadow color for controls */
+// "controlDkShadow", "#000000", /* Dark shadow color for controls */
+// "scrollbar", "#E0E0E0", /* Scrollbar background (usually the "track") */
+// "info", "#FFFFE1", /* ??? */
+// "infoText", "#000000" /* ??? */
+// };
+//
+// loadSystemColors(table, defaultSystemColors, isNativeLookAndFeel());
+ }
+
+ /**
+ * Initialize the uiClassID to AquaComponentUI mapping.
+ * The JComponent classes define their own uiClassID constants
+ * (see AbstractComponent.getUIClassID). This table must
+ * map those constants to a BasicComponentUI class of the
+ * appropriate type.
+ *
+ * @see #getDefaults
+ */
+ protected void initClassDefaults(final UIDefaults table) {
+ final String basicPackageName = "javax.swing.plaf.basic.";
+
+ final Object[] uiDefaults = {
+ "ButtonUI", PKG_PREFIX + "AquaButtonUI",
+ "CheckBoxUI", PKG_PREFIX + "AquaButtonCheckBoxUI",
+ "CheckBoxMenuItemUI", PKG_PREFIX + "AquaMenuItemUI",
+ "LabelUI", PKG_PREFIX + "AquaLabelUI",
+ "ListUI", PKG_PREFIX + "AquaListUI",
+ "MenuUI", PKG_PREFIX + "AquaMenuUI",
+ "MenuItemUI", PKG_PREFIX + "AquaMenuItemUI",
+ "OptionPaneUI", PKG_PREFIX + "AquaOptionPaneUI",
+ "PanelUI", PKG_PREFIX + "AquaPanelUI",
+ "RadioButtonMenuItemUI", PKG_PREFIX + "AquaMenuItemUI",
+ "RadioButtonUI", PKG_PREFIX + "AquaButtonRadioUI",
+ "ProgressBarUI", PKG_PREFIX + "AquaProgressBarUI",
+ "RootPaneUI", PKG_PREFIX + "AquaRootPaneUI",
+ "SliderUI", PKG_PREFIX + "AquaSliderUI",
+ "ScrollBarUI", PKG_PREFIX + "AquaScrollBarUI",
+ "TabbedPaneUI", PKG_PREFIX + (JRSUIUtils.TabbedPane.shouldUseTabbedPaneContrastUI() ? "AquaTabbedPaneContrastUI" : "AquaTabbedPaneUI"),
+ "TableUI", PKG_PREFIX + "AquaTableUI",
+ "ToggleButtonUI", PKG_PREFIX + "AquaButtonToggleUI",
+ "ToolBarUI", PKG_PREFIX + "AquaToolBarUI",
+ "ToolTipUI", PKG_PREFIX + "AquaToolTipUI",
+ "TreeUI", PKG_PREFIX + "AquaTreeUI",
+
+ "InternalFrameUI", PKG_PREFIX + "AquaInternalFrameUI",
+ "DesktopIconUI", PKG_PREFIX + "AquaInternalFrameDockIconUI",
+ "DesktopPaneUI", PKG_PREFIX + "AquaInternalFramePaneUI",
+ "EditorPaneUI", PKG_PREFIX + "AquaEditorPaneUI",
+ "TextFieldUI", PKG_PREFIX + "AquaTextFieldUI",
+ "TextPaneUI", PKG_PREFIX + "AquaTextPaneUI",
+ "ComboBoxUI", PKG_PREFIX + "AquaComboBoxUI",
+ "PopupMenuUI", PKG_PREFIX + "AquaPopupMenuUI",
+ "TextAreaUI", PKG_PREFIX + "AquaTextAreaUI",
+ "MenuBarUI", PKG_PREFIX + "AquaMenuBarUI",
+ "FileChooserUI", PKG_PREFIX + "AquaFileChooserUI",
+ "PasswordFieldUI", PKG_PREFIX + "AquaTextPasswordFieldUI",
+ "TableHeaderUI", PKG_PREFIX + "AquaTableHeaderUI",
+
+ "FormattedTextFieldUI", PKG_PREFIX + "AquaTextFieldFormattedUI",
+
+ "SpinnerUI", PKG_PREFIX + "AquaSpinnerUI",
+ "SplitPaneUI", PKG_PREFIX + "AquaSplitPaneUI",
+ "ScrollPaneUI", PKG_PREFIX + "AquaScrollPaneUI",
+
+ "PopupMenuSeparatorUI", PKG_PREFIX + "AquaPopupMenuSeparatorUI",
+ "SeparatorUI", PKG_PREFIX + "AquaPopupMenuSeparatorUI",
+ "ToolBarSeparatorUI", PKG_PREFIX + "AquaToolBarSeparatorUI",
+
+ // as we implement aqua versions of the swing elements
+ // we will aad the com.apple.laf.FooUI classes to this table.
+
+ "ColorChooserUI", basicPackageName + "BasicColorChooserUI",
+
+ // text UIs
+ "ViewportUI", basicPackageName + "BasicViewportUI",
+ };
+ table.putDefaults(uiDefaults);
+ }
+}