UI defaults: replaced "base" Metal LaF with BasicLookAndFeel (on Windows and Linux)

(UI defaults dumps did not change, so UI defaults are equal to Metal defaults)
This commit is contained in:
Karl Tauber
2020-02-19 16:47:02 +01:00
parent ae8093313e
commit fee00b2acb
3 changed files with 30 additions and 103 deletions

View File

@@ -49,7 +49,6 @@ import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.plaf.ColorUIResource; import javax.swing.plaf.ColorUIResource;
import javax.swing.plaf.FontUIResource; import javax.swing.plaf.FontUIResource;
import javax.swing.plaf.basic.BasicLookAndFeel; import javax.swing.plaf.basic.BasicLookAndFeel;
import javax.swing.plaf.metal.MetalLookAndFeel;
import javax.swing.text.html.HTMLEditorKit; import javax.swing.text.html.HTMLEditorKit;
import com.formdev.flatlaf.util.SystemInfo; import com.formdev.flatlaf.util.SystemInfo;
import com.formdev.flatlaf.util.UIScale; import com.formdev.flatlaf.util.UIScale;
@@ -115,7 +114,10 @@ public abstract class FlatLaf
@Override @Override
public void initialize() { public void initialize() {
getBase().initialize(); initBase();
if( base != null )
base.initialize();
super.initialize(); super.initialize();
@@ -200,34 +202,33 @@ public abstract class FlatLaf
} }
/** /**
* Get/create base LaF. This is used to grab base UI defaults from different LaFs. * Create base LaF. This is used to grab base UI defaults from different LaFs.
* E.g. on Mac from system dependent LaF, otherwise from Metal LaF. * On Mac from Aqua LaF, otherwise from Basic LaF.
*/ */
private BasicLookAndFeel getBase() { private void initBase() {
if( base == null ) { if( SystemInfo.IS_MAC && base == null ) {
if( SystemInfo.IS_MAC ) { // use Mac Aqua LaF as base
// use Mac Aqua LaF as base String aquaLafClassName = "com.apple.laf.AquaLookAndFeel";
String aquaLafClassName = "com.apple.laf.AquaLookAndFeel"; try {
try { if( SystemInfo.IS_JAVA_9_OR_LATER ) {
if( SystemInfo.IS_JAVA_9_OR_LATER ) { Method m = UIManager.class.getMethod( "createLookAndFeel", String.class );
Method m = UIManager.class.getMethod( "createLookAndFeel", String.class ); base = (BasicLookAndFeel) m.invoke( null, "Mac OS X" );
base = (BasicLookAndFeel) m.invoke( null, "Mac OS X" ); } else
} else base = (BasicLookAndFeel) Class.forName( aquaLafClassName ).newInstance();
base = (BasicLookAndFeel) Class.forName( aquaLafClassName ).newInstance(); } catch( Exception ex ) {
} catch( Exception ex ) { LOG.log( Level.SEVERE, "FlatLaf: Failed to initialize base look and feel '" + aquaLafClassName + "'.", ex );
LOG.log( Level.SEVERE, "FlatLaf: Failed to initialize base look and feel '" + aquaLafClassName + "'.", ex ); throw new IllegalStateException();
throw new IllegalStateException(); }
}
} else
base = new MetalLookAndFeel();
} }
return base;
} }
@Override @Override
public UIDefaults getDefaults() { public UIDefaults getDefaults() {
UIDefaults defaults = getBase().getDefaults(); initBase();
UIDefaultsRemover.removeDefaults( defaults );
UIDefaults defaults = (base != null) ? base.getDefaults() : super.getDefaults();
if( base != null )
UIDefaultsRemover.removeDefaults( defaults );
// add Metal resource bundle, which is required for FlatFileChooserUI // add Metal resource bundle, which is required for FlatFileChooserUI
defaults.addResourceBundle( "com.sun.swing.internal.plaf.metal.resources.metal" ); defaults.addResourceBundle( "com.sun.swing.internal.plaf.metal.resources.metal" );

View File

@@ -16,11 +16,10 @@
package com.formdev.flatlaf; package com.formdev.flatlaf;
import java.util.Iterator;
import javax.swing.UIDefaults; import javax.swing.UIDefaults;
/** /**
* Removes UI defaults that are defined in "base" LaF (Metal or Aqua), but not used in FlatLaf. * Removes UI defaults that are defined in "base" LaF (Aqua), but not used in FlatLaf.
* *
* This is a temporary class that can be removed when dropping "base" LaF. * This is a temporary class that can be removed when dropping "base" LaF.
* *
@@ -29,88 +28,11 @@ import javax.swing.UIDefaults;
class UIDefaultsRemover class UIDefaultsRemover
{ {
static final String[] REMOVE_KEYS = { static final String[] REMOVE_KEYS = {
"AuditoryCues.defaultCueList",
"Button.disabledToolBarBorderBackground",
"Button.focus",
"Button.rolloverIconType",
"Button.select", "Button.select",
"Button.toolBarBorderBackground",
"CheckBox.focus",
"CheckBox.select", "CheckBox.select",
"Checkbox.select", // this is a typo in MetalLookAndFeel
"CheckBox.totalInsets",
"DesktopIcon.font",
"DesktopIcon.width",
"InternalFrame.activeTitleGradient",
"InternalFrame.optionDialogBorder",
"InternalFrame.paletteBorder",
"InternalFrame.paletteCloseIcon",
"InternalFrame.paletteTitleHeight",
"Menu.checkIcon",
"MenuItem.checkIcon",
"OptionPane.errorDialog.border.background",
"OptionPane.errorDialog.titlePane.background",
"OptionPane.errorDialog.titlePane.foreground",
"OptionPane.errorDialog.titlePane.shadow",
"OptionPane.questionDialog.border.background",
"OptionPane.questionDialog.titlePane.background",
"OptionPane.questionDialog.titlePane.foreground",
"OptionPane.questionDialog.titlePane.shadow",
"OptionPane.warningDialog.border.background",
"OptionPane.warningDialog.titlePane.background",
"OptionPane.warningDialog.titlePane.foreground",
"OptionPane.warningDialog.titlePane.shadow",
"RadioButton.focus",
"RadioButton.select", "RadioButton.select",
"RadioButton.totalInsets",
"RootPane.colorChooserDialogBorder",
"RootPane.errorDialogBorder",
"RootPane.fileChooserDialogBorder",
"RootPane.frameBorder",
"RootPane.informationDialogBorder",
"RootPane.plainDialogBorder",
"RootPane.questionDialogBorder",
"RootPane.warningDialogBorder",
"ScrollBar.darkShadow",
"ScrollBar.highlight",
"ScrollBar.shadow",
"Slider.altTrackColor",
"Slider.focusGradient",
"Slider.horizontalThumbIcon",
"Slider.majorTickLength",
"Slider.verticalThumbIcon",
"Spinner.arrowButtonBorder",
"Spinner.arrowButtonInsets",
"SplitPane.dividerFocusColor",
"SplitPane.oneTouchButtonsOpaque",
"TabbedPane.borderHightlightColor",
"TabbedPane.unselectedBackground",
"TabbedPane.tabAreaBackground",
"TabbedPane.selectHighlight",
"TabbedPane.selected",
"ToggleButton.focus",
"ToggleButton.select",
"ToolBar.borderColor",
"ToolBar.nonrolloverBorder",
"ToolBar.rolloverBorder",
"ToolTip.hideAccelerator",
"Tree.line", "Tree.line",
}; };
@@ -119,6 +41,7 @@ class UIDefaultsRemover
for( String key : REMOVE_KEYS ) for( String key : REMOVE_KEYS )
defaults.remove( key ); defaults.remove( key );
/*
Iterator<Object> itr = defaults.keySet().iterator(); Iterator<Object> itr = defaults.keySet().iterator();
while( itr.hasNext() ) { while( itr.hasNext() ) {
Object key = itr.next(); Object key = itr.next();
@@ -129,5 +52,6 @@ class UIDefaultsRemover
itr.remove(); itr.remove();
} }
} }
*/
} }
} }

View File

@@ -286,6 +286,7 @@ List.dropLineColor=@dropLineColor
Menu.border=com.formdev.flatlaf.ui.FlatMenuItemBorder Menu.border=com.formdev.flatlaf.ui.FlatMenuItemBorder
Menu.arrowIcon=com.formdev.flatlaf.icons.FlatMenuArrowIcon Menu.arrowIcon=com.formdev.flatlaf.icons.FlatMenuArrowIcon
Menu.checkIcon=null
Menu.margin=@menuItemMargin Menu.margin=@menuItemMargin
Menu.submenuPopupOffsetX={scaledInteger}-4 Menu.submenuPopupOffsetX={scaledInteger}-4
Menu.submenuPopupOffsetY={scaledInteger}-4 Menu.submenuPopupOffsetY={scaledInteger}-4
@@ -305,6 +306,7 @@ MenuBar.itemMargins=3,3,3,3
MenuItem.border=com.formdev.flatlaf.ui.FlatMenuItemBorder MenuItem.border=com.formdev.flatlaf.ui.FlatMenuItemBorder
MenuItem.arrowIcon=com.formdev.flatlaf.icons.FlatMenuItemArrowIcon MenuItem.arrowIcon=com.formdev.flatlaf.icons.FlatMenuItemArrowIcon
MenuItem.checkIcon=null
MenuItem.margin=@menuItemMargin MenuItem.margin=@menuItemMargin
MenuItem.opaque=false MenuItem.opaque=false
MenuItem.borderPainted=true MenuItem.borderPainted=true