From 7aaf700d34ec4f3f1123e81b7768f3a9ad7f3b59 Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Sat, 14 Sep 2019 21:23:33 +0200 Subject: [PATCH] get UI defaults in shared instances only once (same as used in e.g. MetalRadioButtonUI) Note: this optimization does not work when switching from one Flat LaF to another Flat LaF because UI uninstall/install is done per component --- .../com/formdev/flatlaf/ui/FlatButtonUI.java | 39 +++++++++++-------- .../com/formdev/flatlaf/ui/FlatLabelUI.java | 14 ++++++- .../formdev/flatlaf/ui/FlatSeparatorUI.java | 20 ++++++++-- .../flatlaf/ui/FlatToggleButtonUI.java | 20 ++++++++-- .../flatlaf/ui/FlatToolBarSeparatorUI.java | 16 +++++++- 5 files changed, 82 insertions(+), 27 deletions(-) diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatButtonUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatButtonUI.java index e53a1776..5a3796ea 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatButtonUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatButtonUI.java @@ -81,6 +81,8 @@ public class FlatButtonUI private Icon helpButtonIcon; + private boolean defaults_initialized = false; + private static ComponentUI instance; public static ComponentUI createUI( JComponent c ) { @@ -93,27 +95,31 @@ public class FlatButtonUI protected void installDefaults( AbstractButton b ) { super.installDefaults( b ); - String prefix = getPropertyPrefix(); + if( !defaults_initialized ) { + String prefix = getPropertyPrefix(); - focusWidth = UIManager.getInt( "Component.focusWidth" ); - arc = UIManager.getInt( prefix + "arc" ); - minimumWidth = UIManager.getInt( prefix + "minimumWidth" ); + focusWidth = UIManager.getInt( "Component.focusWidth" ); + arc = UIManager.getInt( prefix + "arc" ); + minimumWidth = UIManager.getInt( prefix + "minimumWidth" ); - focusedBackground = UIManager.getColor( prefix + "focusedBackground" ); - hoverBackground = UIManager.getColor( prefix + "hoverBackground" ); - pressedBackground = UIManager.getColor( prefix + "pressedBackground" ); - disabledText = UIManager.getColor( prefix + "disabledText" ); + focusedBackground = UIManager.getColor( prefix + "focusedBackground" ); + hoverBackground = UIManager.getColor( prefix + "hoverBackground" ); + pressedBackground = UIManager.getColor( prefix + "pressedBackground" ); + disabledText = UIManager.getColor( prefix + "disabledText" ); - defaultBackground = UIManager.getColor( "Button.default.background" ); - defaultForeground = UIManager.getColor( "Button.default.foreground" ); - defaultFocusedBackground = UIManager.getColor( "Button.default.focusedBackground" ); - defaultHoverBackground = UIManager.getColor( "Button.default.hoverBackground" ); - defaultPressedBackground = UIManager.getColor( "Button.default.pressedBackground" ); + defaultBackground = UIManager.getColor( "Button.default.background" ); + defaultForeground = UIManager.getColor( "Button.default.foreground" ); + defaultFocusedBackground = UIManager.getColor( "Button.default.focusedBackground" ); + defaultHoverBackground = UIManager.getColor( "Button.default.hoverBackground" ); + defaultPressedBackground = UIManager.getColor( "Button.default.pressedBackground" ); - toolbarHoverBackground = UIManager.getColor( prefix + "toolbar.hoverBackground" ); - toolbarPressedBackground = UIManager.getColor( prefix + "toolbar.pressedBackground" ); + toolbarHoverBackground = UIManager.getColor( prefix + "toolbar.hoverBackground" ); + toolbarPressedBackground = UIManager.getColor( prefix + "toolbar.pressedBackground" ); - helpButtonIcon = UIManager.getIcon( "HelpButton.icon" ); + helpButtonIcon = UIManager.getIcon( "HelpButton.icon" ); + + defaults_initialized = true; + } MigLayoutVisualPadding.install( b, focusWidth ); } @@ -123,6 +129,7 @@ public class FlatButtonUI super.uninstallDefaults( b ); MigLayoutVisualPadding.uninstall( b ); + defaults_initialized = false; } static boolean isContentAreaFilled( Component c ) { diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatLabelUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatLabelUI.java index 5d2218a3..76d49910 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatLabelUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatLabelUI.java @@ -39,6 +39,8 @@ public class FlatLabelUI { private Color disabledForeground; + private boolean defaults_initialized = false; + private static ComponentUI instance; public static ComponentUI createUI( JComponent c ) { @@ -51,7 +53,17 @@ public class FlatLabelUI protected void installDefaults( JLabel c ) { super.installDefaults( c ); - disabledForeground = UIManager.getColor( "Label.disabledForeground" ); + if( !defaults_initialized ) { + disabledForeground = UIManager.getColor( "Label.disabledForeground" ); + + defaults_initialized = true; + } + } + + @Override + protected void uninstallDefaults( JLabel c ) { + super.uninstallDefaults( c ); + defaults_initialized = false; } @Override diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSeparatorUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSeparatorUI.java index bcf89870..e9fb4e49 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSeparatorUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSeparatorUI.java @@ -45,6 +45,8 @@ public class FlatSeparatorUI protected int stripeWidth; protected int stripeIndent; + private boolean defaults_initialized = false; + private static ComponentUI instance; public static ComponentUI createUI( JComponent c ) { @@ -57,10 +59,20 @@ public class FlatSeparatorUI protected void installDefaults( JSeparator s ) { super.installDefaults( s ); - String prefix = getPropertyPrefix(); - height = UIManager.getInt( prefix + ".height" ); - stripeWidth = UIManager.getInt( prefix + ".stripeWidth" ); - stripeIndent = UIManager.getInt( prefix + ".stripeIndent" ); + if( !defaults_initialized ) { + String prefix = getPropertyPrefix(); + height = UIManager.getInt( prefix + ".height" ); + stripeWidth = UIManager.getInt( prefix + ".stripeWidth" ); + stripeIndent = UIManager.getInt( prefix + ".stripeIndent" ); + + defaults_initialized = true; + } + } + + @Override + protected void uninstallDefaults( JSeparator s ) { + super.uninstallDefaults( s ); + defaults_initialized = false; } protected String getPropertyPrefix() { diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToggleButtonUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToggleButtonUI.java index d4ba77fe..c311bd3d 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToggleButtonUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToggleButtonUI.java @@ -51,6 +51,8 @@ public class FlatToggleButtonUI protected Color toolbarSelectedBackground; + private boolean defaults_initialized = false; + private static ComponentUI instance; public static ComponentUI createUI( JComponent c ) { @@ -68,11 +70,21 @@ public class FlatToggleButtonUI protected void installDefaults( AbstractButton b ) { super.installDefaults( b ); - selectedBackground = UIManager.getColor( "ToggleButton.selectedBackground" ); - selectedForeground = UIManager.getColor( "ToggleButton.selectedForeground" ); - disabledSelectedBackground = UIManager.getColor( "ToggleButton.disabledSelectedBackground" ); + if( !defaults_initialized ) { + selectedBackground = UIManager.getColor( "ToggleButton.selectedBackground" ); + selectedForeground = UIManager.getColor( "ToggleButton.selectedForeground" ); + disabledSelectedBackground = UIManager.getColor( "ToggleButton.disabledSelectedBackground" ); - toolbarSelectedBackground = UIManager.getColor( "ToggleButton.toolbar.selectedBackground" ); + toolbarSelectedBackground = UIManager.getColor( "ToggleButton.toolbar.selectedBackground" ); + + defaults_initialized = true; + } + } + + @Override + protected void uninstallDefaults( AbstractButton b ) { + super.uninstallDefaults( b ); + defaults_initialized = false; } @Override diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolBarSeparatorUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolBarSeparatorUI.java index 71770727..c567c3eb 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolBarSeparatorUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolBarSeparatorUI.java @@ -46,6 +46,8 @@ public class FlatToolBarSeparatorUI protected int separatorWidth; protected Color separatorColor; + private boolean defaults_initialized = false; + private static ComponentUI instance; public static ComponentUI createUI( JComponent c ) { @@ -58,14 +60,24 @@ public class FlatToolBarSeparatorUI protected void installDefaults( JSeparator c ) { super.installDefaults( c ); - separatorWidth = UIManager.getInt( "ToolBar.separatorWidth" ); - separatorColor = UIManager.getColor( "ToolBar.separatorColor" ); + if( !defaults_initialized ) { + separatorWidth = UIManager.getInt( "ToolBar.separatorWidth" ); + separatorColor = UIManager.getColor( "ToolBar.separatorColor" ); + + defaults_initialized = true; + } // necessary for vertical toolbars if separator size was set using setSeparatorSize() // (otherwise there will be a gap on the left side of the vertical toolbar) c.setAlignmentX( 0 ); } + @Override + protected void uninstallDefaults( JSeparator s ) { + super.uninstallDefaults( s ); + defaults_initialized = false; + } + @Override public Dimension getPreferredSize( JComponent c ) { Dimension size = ((JToolBar.Separator)c).getSeparatorSize();