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); + } +}