From 22cb1b50a6eea4d27cc1b10c936b4e1d4642f32e Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Sun, 14 Nov 2021 22:11:19 +0100 Subject: [PATCH] ComboBox (not editable): fixed regression that may display text in non-editable combo boxes in bold (issue #423) fixes commits 02f32396697135d139a6728b041b38221c485f7c and 0b6df8be1c3fe3be0103a5f149afcbed065c41f8 --- CHANGELOG.md | 8 ++++++ .../formdev/flatlaf/ui/FlatComboBoxUI.java | 28 ++++++++----------- .../testing/FlatCustomBordersTest.java | 8 +++--- 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fee209ac..714b7dde 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,14 @@ FlatLaf Change Log ================== +## 1.6.3 + +#### Fixed bugs + +- ComboBox (not editable): Fixed regression in FlatLaf 1.6.2 that may display + text in non-editable combo boxes in bold. (issue #423) + + ## 1.6.2 #### Fixed bugs diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatComboBoxUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatComboBoxUI.java index d6fef81f..259fb550 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatComboBoxUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatComboBoxUI.java @@ -482,22 +482,6 @@ public class FlatComboBoxUI @Override @SuppressWarnings( "unchecked" ) public void paintCurrentValue( Graphics g, Rectangle bounds, boolean hasFocus ) { - // apply clipping using rounded rectangle to avoid that renderer paints - // outside of border if combobox uses larger arc for edges - // (e.g. FlatClientProperties.COMPONENT_ROUND_RECT is true) - FlatBorder border = FlatUIUtils.getOutsideFlatBorder( comboBox ); - if( border != null ) { - int clipArc = border.getArc( comboBox ) - (border.getLineWidth( comboBox ) * 2); - if( clipArc > 0 ) { - int x = bounds.x; - int width = bounds.width + bounds.height; - if( !comboBox.getComponentOrientation().isLeftToRight() ) - x -= bounds.height; - ((Graphics2D)g).clip( FlatUIUtils.createComponentRectangle( - x, bounds.y, width, bounds.height, scale( (float) clipArc ) ) ); - } - } - paddingBorder.uninstall(); ListCellRenderer renderer = comboBox.getRenderer(); @@ -511,11 +495,23 @@ public class FlatComboBoxUI c.setBackground( getBackground( enabled ) ); c.setForeground( getForeground( enabled ) ); + // make renderer component temporary non-opaque to avoid that renderer paints + // background outside of border if combobox uses larger arc for edges + // (e.g. FlatClientProperties.COMPONENT_ROUND_RECT is true) + boolean oldOpaque = true; + if( c instanceof JComponent ) { + oldOpaque = ((JComponent)c).isOpaque(); + ((JComponent)c).setOpaque( false ); + } + boolean shouldValidate = (c instanceof JPanel); paddingBorder.install( c ); currentValuePane.paintComponent( g, c, comboBox, bounds.x, bounds.y, bounds.width, bounds.height, shouldValidate ); paddingBorder.uninstall(); + + if( c instanceof JComponent ) + ((JComponent)c).setOpaque( oldOpaque ); } @Override diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatCustomBordersTest.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatCustomBordersTest.java index fecc5730..2d2bd064 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatCustomBordersTest.java +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatCustomBordersTest.java @@ -34,7 +34,7 @@ public class FlatCustomBordersTest private static final Color RED = new Color( 0x60ff0000, true ); private static final Color GREEN = new Color( 0x6000ff00, true ); private static final Color MAGENTA = new Color( 0x60ff00ff, true ); - private static final Color ORANGE = new Color( 0x60ffc800, true ); + private static final Color BLUE = new Color( 0x300000ff, true ); public static void main( String[] args ) { SwingUtilities.invokeLater( () -> { @@ -127,7 +127,7 @@ public class FlatCustomBordersTest @SuppressWarnings( "unchecked" ) private void applySpecialComboBoxRenderers() { BasicComboBoxRenderer sharedRenderer = new BasicComboBoxRenderer(); - sharedRenderer.setBorder( new LineBorder( ORANGE, UIScale.scale( 2 ) ) ); + sharedRenderer.setBorder( new LineBorder( BLUE, UIScale.scale( 2 ) ) ); comboBox29.setRenderer( sharedRenderer ); comboBox30.setRenderer( sharedRenderer ); @@ -160,7 +160,7 @@ public class FlatCustomBordersTest } private void applyCustomComboBoxEditorBorder( JComboBox comboBox ) { - applyCustomComboBoxEditorBorder( comboBox, new LineBorder( ORANGE, UIScale.scale( 6 ) ) ); + applyCustomComboBoxEditorBorder( comboBox, new LineBorder( BLUE, UIScale.scale( 6 ) ) ); } private void applyCustomComboBoxEditorBorderWithIcon( JComboBox comboBox ) { @@ -180,7 +180,7 @@ public class FlatCustomBordersTest } private void applyCustomComboBoxRendererBorder( JComboBox comboBox ) { - applyCustomComboBoxRendererBorder( comboBox, new LineBorder( ORANGE, UIScale.scale( 6 ) ) ); + applyCustomComboBoxRendererBorder( comboBox, new LineBorder( BLUE, UIScale.scale( 6 ) ) ); } private void applyCustomComboBoxRendererBorderWithIcon( JComboBox comboBox ) {