From 5ecf19ef4f2010fa6a48800ba329e1cb90b5caad Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Thu, 7 Oct 2021 14:22:47 +0200 Subject: [PATCH] Styling: added styling properties that are likewise to client properties (e.g. `buttonType: help` on `JButton` does the same as setting client property `JButton.buttonType` to `help`) --- .../com/formdev/flatlaf/ui/FlatBorder.java | 16 +++++++ .../com/formdev/flatlaf/ui/FlatButtonUI.java | 33 ++++++++++---- .../formdev/flatlaf/ui/FlatProgressBarUI.java | 8 +++- .../formdev/flatlaf/ui/FlatRoundBorder.java | 5 +++ .../formdev/flatlaf/ui/FlatScrollBarUI.java | 12 +++++- .../formdev/flatlaf/ui/FlatScrollPaneUI.java | 4 ++ .../formdev/flatlaf/ui/FlatTabbedPaneUI.java | 43 ++++++++++++++++--- .../formdev/flatlaf/ui/FlatTextBorder.java | 5 +++ .../flatlaf/ui/FlatToggleButtonUI.java | 2 +- .../com/formdev/flatlaf/ui/FlatTreeUI.java | 5 ++- .../flatlaf/ui/TestFlatStyleableInfo.java | 37 +++++++++++++--- .../formdev/flatlaf/ui/TestFlatStyling.java | 25 +++++++++++ .../themeeditor/FlatThemePreviewButtons.java | 2 +- 13 files changed, 169 insertions(+), 28 deletions(-) diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatBorder.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatBorder.java index d5ece26c..276c5061 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatBorder.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatBorder.java @@ -80,6 +80,11 @@ public class FlatBorder @Styleable(dot=true) protected Color warningFocusedBorderColor = UIManager.getColor( "Component.warning.focusedBorderColor" ); @Styleable(dot=true) protected Color customBorderColor = UIManager.getColor( "Component.custom.borderColor" ); + // only used via styling (not in UI defaults, but has likewise client properties) + /** @since 2 */ @Styleable protected String outline; + /** @since 2 */ @Styleable protected Color outlineColor; + /** @since 2 */ @Styleable protected Color outlineFocusedColor; + /** @since 2 */ @Override public Object applyStyleProperty( String key, Object value ) { @@ -136,6 +141,17 @@ public class FlatBorder return null; Object outline = ((JComponent)c).getClientProperty( FlatClientProperties.OUTLINE ); + if( outline == null ) + outline = this.outline; + if( outline == null ) { + if( outlineColor != null && outlineFocusedColor != null ) + outline = new Color[] { outlineFocusedColor, outlineColor }; + else if( outlineColor != null ) + outline = outlineColor; + else if( outlineFocusedColor != null ) + outline = outlineFocusedColor; + } + if( outline instanceof String ) { switch( (String) outline ) { case FlatClientProperties.OUTLINE_ERROR: 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 5ff78276..8a34382b 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 @@ -42,6 +42,7 @@ import javax.swing.JToggleButton; import javax.swing.JToolBar; import javax.swing.LookAndFeel; import javax.swing.UIManager; +import javax.swing.plaf.ButtonUI; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.UIResource; import javax.swing.plaf.basic.BasicButtonListener; @@ -137,6 +138,11 @@ public class FlatButtonUI @Styleable(dot=true) protected Color toolbarPressedBackground; @Styleable(dot=true) protected Color toolbarSelectedBackground; + // only used via styling (not in UI defaults, but has likewise client properties) + /** @since 2 */ @Styleable protected String buttonType; + /** @since 2 */ @Styleable protected boolean squareSize; + /** @since 2 */ @Styleable protected int minimumHeight; + private Icon helpButtonIcon; private Insets defaultMargin; @@ -353,11 +359,11 @@ public class FlatButtonUI if( !(c instanceof AbstractButton) ) return TYPE_OTHER; - Object value = ((AbstractButton)c).getClientProperty( BUTTON_TYPE ); - if( !(value instanceof String) ) + String value = getButtonTypeStr( (AbstractButton) c ); + if( value == null ) return TYPE_OTHER; - switch( (String) value ) { + switch( value ) { case BUTTON_TYPE_SQUARE: return TYPE_SQUARE; case BUTTON_TYPE_ROUND_RECT: return TYPE_ROUND_RECT; default: return TYPE_OTHER; @@ -365,16 +371,27 @@ public class FlatButtonUI } static boolean isHelpButton( Component c ) { - return c instanceof JButton && clientPropertyEquals( (JButton) c, BUTTON_TYPE, BUTTON_TYPE_HELP ); + return c instanceof JButton && BUTTON_TYPE_HELP.equals( getButtonTypeStr( (JButton) c ) ); } static boolean isToolBarButton( Component c ) { return c.getParent() instanceof JToolBar || - (c instanceof AbstractButton && clientPropertyEquals( (AbstractButton) c, BUTTON_TYPE, BUTTON_TYPE_TOOLBAR_BUTTON )); + (c instanceof AbstractButton && BUTTON_TYPE_TOOLBAR_BUTTON.equals( getButtonTypeStr( (AbstractButton) c ) )); } static boolean isBorderlessButton( Component c ) { - return c instanceof AbstractButton && clientPropertyEquals( (AbstractButton) c, BUTTON_TYPE, BUTTON_TYPE_BORDERLESS ); + return c instanceof AbstractButton && BUTTON_TYPE_BORDERLESS.equals( getButtonTypeStr( (AbstractButton) c ) ); + } + + static String getButtonTypeStr( AbstractButton c ) { + // get from client property + Object value = c.getClientProperty( BUTTON_TYPE ); + if( value instanceof String ) + return (String) value; + + // get from styling property + ButtonUI ui = c.getUI(); + return (ui instanceof FlatButtonUI) ? ((FlatButtonUI)ui).buttonType : null; } @Override @@ -582,7 +599,7 @@ public class FlatButtonUI // make square or apply minimum width/height boolean isIconOnlyOrSingleCharacter = isIconOnlyOrSingleCharacterButton( c ); - if( clientPropertyBoolean( c, SQUARE_SIZE, false ) ) { + if( clientPropertyBoolean( c, SQUARE_SIZE, squareSize ) ) { // make button square (increase width or height so that they are equal) prefSize.width = prefSize.height = Math.max( prefSize.width, prefSize.height ); } else if( isIconOnlyOrSingleCharacter && ((AbstractButton)c).getIcon() == null ) { @@ -594,7 +611,7 @@ public class FlatButtonUI // apply minimum width/height int fw = Math.round( FlatUIUtils.getBorderFocusWidth( c ) * 2 ); prefSize.width = Math.max( prefSize.width, scale( FlatUIUtils.minimumWidth( c, minimumWidth ) ) + fw ); - prefSize.height = Math.max( prefSize.height, scale( FlatUIUtils.minimumHeight( c, 0 ) ) + fw ); + prefSize.height = Math.max( prefSize.height, scale( FlatUIUtils.minimumHeight( c, minimumHeight ) ) + fw ); } return prefSize; diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatProgressBarUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatProgressBarUI.java index 7a13421b..0d43b7fd 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatProgressBarUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatProgressBarUI.java @@ -68,6 +68,10 @@ public class FlatProgressBarUI @Styleable protected Dimension horizontalSize; @Styleable protected Dimension verticalSize; + // only used via styling (not in UI defaults, but has likewise client properties) + /** @since 2 */ @Styleable protected boolean largeHeight; + /** @since 2 */ @Styleable protected boolean square; + private PropertyChangeListener propertyChangeListener; private Map oldStyleValues; @@ -160,7 +164,7 @@ public class FlatProgressBarUI public Dimension getPreferredSize( JComponent c ) { Dimension size = super.getPreferredSize( c ); - if( progressBar.isStringPainted() || clientPropertyBoolean( c, PROGRESS_BAR_LARGE_HEIGHT, false ) ) { + if( progressBar.isStringPainted() || clientPropertyBoolean( c, PROGRESS_BAR_LARGE_HEIGHT, largeHeight ) ) { // recalculate progress height/width to make it smaller Insets insets = progressBar.getInsets(); FontMetrics fm = progressBar.getFontMetrics( progressBar.getFont() ); @@ -203,7 +207,7 @@ public class FlatProgressBarUI return; boolean horizontal = (progressBar.getOrientation() == JProgressBar.HORIZONTAL); - int arc = clientPropertyBoolean( c, PROGRESS_BAR_SQUARE, false ) + int arc = clientPropertyBoolean( c, PROGRESS_BAR_SQUARE, square ) ? 0 : Math.min( UIScale.scale( this.arc ), horizontal ? height : width ); diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRoundBorder.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRoundBorder.java index f9cce14d..bd6e6c53 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRoundBorder.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRoundBorder.java @@ -32,12 +32,17 @@ public class FlatRoundBorder { @Styleable protected int arc = UIManager.getInt( "Component.arc" ); + // only used via styling (not in UI defaults, but has likewise client properties) + /** @since 2 */ @Styleable protected Boolean roundRect; + @Override protected int getArc( Component c ) { if( isCellEditor( c ) ) return 0; Boolean roundRect = FlatUIUtils.isRoundRect( c ); + if( roundRect == null ) + roundRect = this.roundRect; return roundRect != null ? (roundRect ? Short.MAX_VALUE : 0) : arc; } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatScrollBarUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatScrollBarUI.java index fac36074..b7e959b8 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatScrollBarUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatScrollBarUI.java @@ -284,9 +284,17 @@ public class FlatScrollBarUI } protected boolean isShowButtons() { + // check client property on scroll bar Object showButtons = scrollbar.getClientProperty( FlatClientProperties.SCROLL_BAR_SHOW_BUTTONS ); - if( showButtons == null && scrollbar.getParent() instanceof JScrollPane ) - showButtons = ((JScrollPane)scrollbar.getParent()).getClientProperty( FlatClientProperties.SCROLL_BAR_SHOW_BUTTONS ); + if( showButtons == null && scrollbar.getParent() instanceof JScrollPane ) { + JScrollPane scrollPane = (JScrollPane) scrollbar.getParent(); + // check client property on scroll pane + showButtons = scrollPane.getClientProperty( FlatClientProperties.SCROLL_BAR_SHOW_BUTTONS ); + if( showButtons == null && scrollPane.getUI() instanceof FlatScrollPaneUI ) { + // check styling property on scroll pane + showButtons = ((FlatScrollPaneUI)scrollPane.getUI()).showButtons; + } + } return (showButtons != null) ? Objects.equals( showButtons, true ) : this.showButtons; } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatScrollPaneUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatScrollPaneUI.java index 4b52cd62..21c74b19 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatScrollPaneUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatScrollPaneUI.java @@ -48,6 +48,7 @@ import javax.swing.UIManager; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicScrollPaneUI; import com.formdev.flatlaf.FlatClientProperties; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI; import com.formdev.flatlaf.util.LoggingFacade; @@ -72,6 +73,9 @@ public class FlatScrollPaneUI extends BasicScrollPaneUI implements StyleableUI { + // only used via styling (not in UI defaults, but has likewise client properties) + /** @since 2 */ @Styleable protected Boolean showButtons; + private Handler handler; private Map oldStyleValues; diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTabbedPaneUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTabbedPaneUI.java index 3dcbf750..7b0aae0d 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTabbedPaneUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTabbedPaneUI.java @@ -157,6 +157,7 @@ import com.formdev.flatlaf.util.UIScale; * @uiDefault TabbedPane.buttonPressedBackground Color * * @uiDefault TabbedPane.moreTabsButtonToolTipText String + * @uiDefault TabbedPane.tabCloseToolTipText String * * @author Karl Tauber */ @@ -221,6 +222,13 @@ public class FlatTabbedPaneUI @Styleable protected Color buttonPressedBackground; @Styleable protected String moreTabsButtonToolTipText; + /** @since 2 */ @Styleable protected String tabCloseToolTipText; + + // only used via styling (not in UI defaults, but has likewise client properties) + /** @since 2 */ @Styleable protected boolean showContentSeparator = true; + /** @since 2 */ @Styleable protected boolean hideTabAreaWithOneTab; + /** @since 2 */ @Styleable protected boolean tabClosable; + /** @since 2 */ @Styleable protected int tabIconPlacement = LEADING; protected JViewport tabViewport; protected FlatWheelTabScroller wheelTabScroller; @@ -331,6 +339,7 @@ public class FlatTabbedPaneUI Locale l = tabPane.getLocale(); moreTabsButtonToolTipText = UIManager.getString( "TabbedPane.moreTabsButtonToolTipText", l ); + tabCloseToolTipText = UIManager.getString( "TabbedPane.tabCloseToolTipText", l ); // scale textIconGap = scale( textIconGapUnscaled ); @@ -616,6 +625,8 @@ public class FlatTabbedPaneUI case "tabAreaAlignment": value = parseAlignment( (String) value, LEADING ); break; case "tabAlignment": value = parseAlignment( (String) value, CENTER ); break; case "tabWidthMode": value = parseTabWidthMode( (String) value ); break; + + case "tabIconPlacement": value = parseTabIconPlacement( (String) value ); break; } } else { Object oldValue = null; @@ -728,7 +739,7 @@ public class FlatTabbedPaneUI Insets tabInsets = getTabInsets( tabPlacement, tabIndex ); tabWidth = icon.getIconWidth() + tabInsets.left + tabInsets.right; } else { - int iconPlacement = clientPropertyInt( tabPane, TABBED_PANE_TAB_ICON_PLACEMENT, LEADING ); + int iconPlacement = clientPropertyInt( tabPane, TABBED_PANE_TAB_ICON_PLACEMENT, tabIconPlacement ); if( (iconPlacement == TOP || iconPlacement == BOTTOM) && tabPane.getTabComponentAt( tabIndex ) == null && (icon = getIconForTab( tabIndex )) != null ) @@ -771,7 +782,7 @@ public class FlatTabbedPaneUI int tabHeight; Icon icon; - int iconPlacement = clientPropertyInt( tabPane, TABBED_PANE_TAB_ICON_PLACEMENT, LEADING ); + int iconPlacement = clientPropertyInt( tabPane, TABBED_PANE_TAB_ICON_PLACEMENT, tabIconPlacement ); if( (iconPlacement == TOP || iconPlacement == BOTTOM) && tabPane.getTabComponentAt( tabIndex ) == null && (icon = getIconForTab( tabIndex )) != null ) @@ -879,7 +890,7 @@ public class FlatTabbedPaneUI */ @Override protected Insets getContentBorderInsets( int tabPlacement ) { - if( hideTabArea() || contentSeparatorHeight == 0 || !clientPropertyBoolean( tabPane, TABBED_PANE_SHOW_CONTENT_SEPARATOR, true ) ) + if( hideTabArea() || contentSeparatorHeight == 0 || !clientPropertyBoolean( tabPane, TABBED_PANE_SHOW_CONTENT_SEPARATOR, showContentSeparator ) ) return new Insets( 0, 0, 0, 0 ); boolean hasFullBorder = clientPropertyBoolean( tabPane, TABBED_PANE_HAS_FULL_BORDER, this.hasFullBorder ); @@ -1135,7 +1146,7 @@ public class FlatTabbedPaneUI protected void paintContentBorder( Graphics g, int tabPlacement, int selectedIndex ) { if( tabPane.getTabCount() <= 0 || contentSeparatorHeight == 0 || - !clientPropertyBoolean( tabPane, TABBED_PANE_SHOW_CONTENT_SEPARATOR, true ) ) + !clientPropertyBoolean( tabPane, TABBED_PANE_SHOW_CONTENT_SEPARATOR, showContentSeparator ) ) return; Insets insets = tabPane.getInsets(); @@ -1226,7 +1237,7 @@ public class FlatTabbedPaneUI // icon placement int verticalTextPosition; int horizontalTextPosition; - switch( clientPropertyInt( tabPane, TABBED_PANE_TAB_ICON_PLACEMENT, LEADING ) ) { + switch( clientPropertyInt( tabPane, TABBED_PANE_TAB_ICON_PLACEMENT, tabIconPlacement ) ) { default: case LEADING: verticalTextPosition = CENTER; horizontalTextPosition = TRAILING; break; case TRAILING: verticalTextPosition = CENTER; horizontalTextPosition = LEADING; break; @@ -1307,8 +1318,11 @@ public class FlatTabbedPaneUI } protected boolean isTabClosable( int tabIndex ) { + if( tabIndex < 0 ) + return false; + Object value = getTabClientProperty( tabIndex, TABBED_PANE_TAB_CLOSABLE ); - return (value instanceof Boolean) ? (boolean) value : false; + return (value instanceof Boolean) ? (boolean) value : tabClosable; } @SuppressWarnings( { "unchecked" } ) @@ -1382,7 +1396,7 @@ public class FlatTabbedPaneUI return tabPane.getTabCount() == 1 && leadingComponent == null && trailingComponent == null && - clientPropertyBoolean( tabPane, TABBED_PANE_HIDE_TAB_AREA_WITH_ONE_TAB, false ); + clientPropertyBoolean( tabPane, TABBED_PANE_HIDE_TAB_AREA_WITH_ONE_TAB, hideTabAreaWithOneTab ); } protected int getTabsPopupPolicy() { @@ -1496,6 +1510,19 @@ public class FlatTabbedPaneUI } } + protected static int parseTabIconPlacement( String str ) { + if( str == null ) + return LEADING; + + switch( str ) { + default: + case "leading": return LEADING; + case "trailing": return TRAILING; + case "top": return TOP; + case "bottom": return BOTTOM; + } + } + private void runWithOriginalLayoutManager( Runnable runnable ) { LayoutManager layout = tabPane.getLayout(); if( layout instanceof FlatTabbedPaneScrollLayout ) { @@ -2347,6 +2374,8 @@ public class FlatTabbedPaneUI // update tooltip if( tabIndex >= 0 && hitClose ) { Object closeTip = getTabClientProperty( tabIndex, TABBED_PANE_TAB_CLOSE_TOOLTIPTEXT ); + if( closeTip == null ) + closeTip = tabCloseToolTipText; if( closeTip instanceof String ) setCloseToolTip( tabIndex, (String) closeTip ); else diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTextBorder.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTextBorder.java index e446e670..be152aa3 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTextBorder.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTextBorder.java @@ -32,12 +32,17 @@ public class FlatTextBorder { @Styleable protected int arc = UIManager.getInt( "TextComponent.arc" ); + // only used via styling (not in UI defaults, but has likewise client properties) + /** @since 2 */ @Styleable protected Boolean roundRect; + @Override protected int getArc( Component c ) { if( isCellEditor( c ) ) return 0; Boolean roundRect = FlatUIUtils.isRoundRect( c ); + if( roundRect == null ) + roundRect = this.roundRect; return roundRect != null ? (roundRect ? Short.MAX_VALUE : 0) : arc; } } 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 89e1492f..f6f4b075 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 @@ -173,7 +173,7 @@ public class FlatToggleButtonUI } static boolean isTabButton( Component c ) { - return c instanceof JToggleButton && clientPropertyEquals( (JToggleButton) c, BUTTON_TYPE, BUTTON_TYPE_TAB ); + return c instanceof JToggleButton && BUTTON_TYPE_TAB.equals( getButtonTypeStr( (JToggleButton) c ) ); } @Override diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTreeUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTreeUI.java index 03c63d3b..4ce76078 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTreeUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTreeUI.java @@ -143,6 +143,9 @@ public class FlatTreeUI @Styleable(dot=true) public Color iconClosedColor; @Styleable(dot=true) public Color iconOpenColor; + // only used via styling (not in UI defaults, but has likewise client properties) + /** @since 2 */ @Styleable protected boolean paintSelection = true; + private Color defaultCellNonSelectionBackground; private Color defaultSelectionBackground; private Color defaultSelectionForeground; @@ -535,6 +538,6 @@ public class FlatTreeUI } protected boolean isPaintSelection() { - return clientPropertyBoolean( tree, TREE_PAINT_SELECTION, true ); + return clientPropertyBoolean( tree, TREE_PAINT_SELECTION, paintSelection ); } } diff --git a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleableInfo.java b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleableInfo.java index ad747e89..56f3a74c 100644 --- a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleableInfo.java +++ b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleableInfo.java @@ -118,7 +118,11 @@ public class TestFlatStyleableInfo "toolbar.spacingInsets", Insets.class, "toolbar.hoverBackground", Color.class, "toolbar.pressedBackground", Color.class, - "toolbar.selectedBackground", Color.class + "toolbar.selectedBackground", Color.class, + + "buttonType", String.class, + "squareSize", boolean.class, + "minimumHeight", int.class ); // border @@ -432,7 +436,10 @@ public class TestFlatStyleableInfo Map> expected = expectedMap( "arc", int.class, "horizontalSize", Dimension.class, - "verticalSize", Dimension.class + "verticalSize", Dimension.class, + + "largeHeight", boolean.class, + "square", boolean.class ); assertMapEquals( expected, ui.getStyleableInfos( c ) ); @@ -535,7 +542,9 @@ public class TestFlatStyleableInfo JScrollPane c = new JScrollPane(); FlatScrollPaneUI ui = (FlatScrollPaneUI) c.getUI(); - Map> expected = new LinkedHashMap<>(); + Map> expected = expectedMap( + "showButtons", Boolean.class + ); // border flatBorder( expected ); @@ -684,6 +693,12 @@ public class TestFlatStyleableInfo "buttonPressedBackground", Color.class, "moreTabsButtonToolTipText", String.class, + "tabCloseToolTipText", String.class, + + "showContentSeparator", boolean.class, + "hideTabAreaWithOneTab", boolean.class, + "tabClosable", boolean.class, + "tabIconPlacement", int.class, // FlatTabbedPaneCloseIcon "closeSize", Dimension.class, @@ -866,6 +881,8 @@ public class TestFlatStyleableInfo "wideSelection", boolean.class, "showCellFocusIndicator", boolean.class, + "paintSelection", boolean.class, + // icons "icon.arrowType", String.class, "icon.expandedColor", Color.class, @@ -908,7 +925,9 @@ public class TestFlatStyleableInfo flatBorder( expected ); expectedMap( expected, - "arc", int.class + "arc", int.class, + + "roundRect", Boolean.class ); } @@ -916,7 +935,9 @@ public class TestFlatStyleableInfo flatBorder( expected ); expectedMap( expected, - "arc", int.class + "arc", int.class, + + "roundRect", Boolean.class ); } @@ -934,7 +955,11 @@ public class TestFlatStyleableInfo "error.focusedBorderColor", Color.class, "warning.borderColor", Color.class, "warning.focusedBorderColor", Color.class, - "custom.borderColor", Color.class + "custom.borderColor", Color.class, + + "outline", String.class, + "outlineColor", Color.class, + "outlineFocusedColor", Color.class ); } diff --git a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyling.java b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyling.java index 2d2b6bd4..7af01268 100644 --- a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyling.java +++ b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyling.java @@ -232,6 +232,10 @@ public class TestFlatStyling ui.applyStyle( b, "toolbar.pressedBackground: #fff" ); ui.applyStyle( b, "toolbar.selectedBackground: #fff" ); + ui.applyStyle( b, "buttonType: help" ); + ui.applyStyle( b, "squareSize: true" ); + ui.applyStyle( b, "minimumHeight: 100" ); + // border flatButtonBorder( style -> ui.applyStyle( b, style ) ); @@ -546,6 +550,9 @@ public class TestFlatStyling ui.applyStyle( "horizontalSize: 100,12" ); ui.applyStyle( "verticalSize: 12,100" ); + ui.applyStyle( "largeHeight: true" ); + ui.applyStyle( "square: true" ); + // JComponent properties ui.applyStyle( "background: #fff" ); ui.applyStyle( "foreground: #fff" ); @@ -654,6 +661,8 @@ public class TestFlatStyling // border flatBorder( style -> ui.applyStyle( style ) ); + ui.applyStyle( "showButtons: true" ); + // JComponent properties ui.applyStyle( "background: #fff" ); ui.applyStyle( "foreground: #fff" ); @@ -823,6 +832,12 @@ public class TestFlatStyling ui.applyStyle( "buttonPressedBackground: #fff" ); ui.applyStyle( "moreTabsButtonToolTipText: Gimme more" ); + ui.applyStyle( "tabCloseToolTipText: Close me" ); + + ui.applyStyle( "showContentSeparator: true" ); + ui.applyStyle( "hideTabAreaWithOneTab: true" ); + ui.applyStyle( "tabClosable: true" ); + ui.applyStyle( "tabIconPlacement: top" ); // FlatTabbedPaneCloseIcon ui.applyStyle( "closeSize: 16,16" ); @@ -1034,6 +1049,8 @@ public class TestFlatStyling ui.applyStyle( "wideSelection: true" ); ui.applyStyle( "showCellFocusIndicator: true" ); + ui.applyStyle( "paintSelection: false" ); + // icons ui.applyStyle( "icon.arrowType: chevron" ); ui.applyStyle( "icon.expandedColor: #fff" ); @@ -1083,12 +1100,16 @@ public class TestFlatStyling flatBorder( applyStyle ); applyStyle.accept( "arc: 6" ); + + applyStyle.accept( "roundRect: true" ); } private void flatTextBorder( Consumer applyStyle ) { flatBorder( applyStyle ); applyStyle.accept( "arc: 6" ); + + applyStyle.accept( "roundRect: true" ); } private void flatBorder( Consumer applyStyle ) { @@ -1105,6 +1126,10 @@ public class TestFlatStyling applyStyle.accept( "warning.borderColor: #fff" ); applyStyle.accept( "warning.focusedBorderColor: #fff" ); applyStyle.accept( "custom.borderColor: desaturate(#f00,50%,relative derived noAutoInverse)" ); + + applyStyle.accept( "outline: error" ); + applyStyle.accept( "outlineColor: #fff" ); + applyStyle.accept( "outlineFocusedColor: #fff" ); } //---- borders ------------------------------------------------------------ diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewButtons.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewButtons.java index b358acda..07e294b6 100644 --- a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewButtons.java +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewButtons.java @@ -82,7 +82,7 @@ class FlatThemePreviewButtons continue; AbstractButton b = (AbstractButton) c; - if( !Objects.equals( b.getClientProperty( BUTTON_TYPE ), BUTTON_TYPE_HELP ) ) + if( !BUTTON_TYPE_HELP.equals( b.getClientProperty( BUTTON_TYPE ) ) ) b.putClientProperty( BUTTON_TYPE, buttonType ); }