diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxIcon.java index 4b4a74e6..b728c675 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxIcon.java @@ -129,78 +129,101 @@ public class FlatCheckBoxIcon } @Override - protected void paintIcon( Component c, Graphics2D g2 ) { - boolean indeterminate = c instanceof JComponent && clientPropertyEquals( (JComponent) c, SELECTED_STATE, SELECTED_STATE_INDETERMINATE ); - boolean selected = indeterminate || (c instanceof AbstractButton && ((AbstractButton)c).isSelected()); + protected void paintIcon( Component c, Graphics2D g ) { + boolean indeterminate = isIndeterminate( c ); + boolean selected = indeterminate || isSelected( c ); boolean isFocused = FlatUIUtils.isPermanentFocusOwner( c ); // paint focused border if( isFocused && focusWidth > 0 && FlatButtonUI.isFocusPainted( c ) ) { - g2.setColor( focusColor ); - paintFocusBorder( g2 ); + g.setColor( getFocusColor( c ) ); + paintFocusBorder( c, g ); } // paint border - g2.setColor( FlatButtonUI.buttonStateColor( c, - selected ? selectedBorderColor : borderColor, - disabledBorderColor, - selected && selectedFocusedBorderColor != null ? selectedFocusedBorderColor : focusedBorderColor, - hoverBorderColor, - null ) ); - paintBorder( g2 ); + g.setColor( getBorderColor( c, selected ) ); + paintBorder( c, g ); // paint background - g2.setColor( FlatUIUtils.deriveColor( FlatButtonUI.buttonStateColor( c, - selected ? selectedBackground : background, - disabledBackground, - (selected && selectedFocusedBackground != null) ? selectedFocusedBackground : focusedBackground, - (selected && selectedHoverBackground != null) ? selectedHoverBackground : hoverBackground, - (selected && selectedPressedBackground != null) ? selectedPressedBackground : pressedBackground ), - background ) ); - paintBackground( g2 ); + g.setColor( FlatUIUtils.deriveColor( getBackground( c, selected ), background ) ); + paintBackground( c, g ); // paint checkmark if( selected || indeterminate ) { - g2.setColor( c.isEnabled() - ? ((selected && isFocused && selectedFocusedCheckmarkColor != null) - ? selectedFocusedCheckmarkColor - : checkmarkColor) - : disabledCheckmarkColor ); + g.setColor( getCheckmarkColor( c, selected, isFocused ) ); if( indeterminate ) - paintIndeterminate( g2 ); + paintIndeterminate( c, g ); else - paintCheckmark( g2 ); + paintCheckmark( c, g ); } } - protected void paintFocusBorder( Graphics2D g2 ) { + protected void paintFocusBorder( Component c, Graphics2D g ) { // the outline focus border is painted outside of the icon int wh = ICON_SIZE - 1 + (focusWidth * 2); int arcwh = arc + (focusWidth * 2); - g2.fillRoundRect( -focusWidth + 1, -focusWidth, wh, wh, arcwh, arcwh ); + g.fillRoundRect( -focusWidth + 1, -focusWidth, wh, wh, arcwh, arcwh ); } - protected void paintBorder( Graphics2D g2 ) { + protected void paintBorder( Component c, Graphics2D g ) { int arcwh = arc; - g2.fillRoundRect( 1, 0, 14, 14, arcwh, arcwh ); + g.fillRoundRect( 1, 0, 14, 14, arcwh, arcwh ); } - protected void paintBackground( Graphics2D g2 ) { + protected void paintBackground( Component c, Graphics2D g ) { int arcwh = arc - 1; - g2.fillRoundRect( 2, 1, 12, 12, arcwh, arcwh ); + g.fillRoundRect( 2, 1, 12, 12, arcwh, arcwh ); } - protected void paintCheckmark( Graphics2D g2 ) { + protected void paintCheckmark( Component c, Graphics2D g ) { Path2D.Float path = new Path2D.Float(); path.moveTo( 4.5f, 7.5f ); path.lineTo( 6.6f, 10f ); path.lineTo( 11.25f, 3.5f ); - g2.setStroke( new BasicStroke( 1.9f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND ) ); - g2.draw( path ); + g.setStroke( new BasicStroke( 1.9f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND ) ); + g.draw( path ); } - protected void paintIndeterminate( Graphics2D g2 ) { - g2.fill( new RoundRectangle2D.Float( 3.75f, 5.75f, 8.5f, 2.5f, 2f, 2f ) ); + protected void paintIndeterminate( Component c, Graphics2D g ) { + g.fill( new RoundRectangle2D.Float( 3.75f, 5.75f, 8.5f, 2.5f, 2f, 2f ) ); + } + + protected boolean isIndeterminate( Component c ) { + return c instanceof JComponent && clientPropertyEquals( (JComponent) c, SELECTED_STATE, SELECTED_STATE_INDETERMINATE ); + } + + protected boolean isSelected( Component c ) { + return c instanceof AbstractButton && ((AbstractButton)c).isSelected(); + } + + protected Color getFocusColor( Component c ) { + return focusColor; + } + + protected Color getBorderColor( Component c, boolean selected ) { + return FlatButtonUI.buttonStateColor( c, + selected ? selectedBorderColor : borderColor, + disabledBorderColor, + selected && selectedFocusedBorderColor != null ? selectedFocusedBorderColor : focusedBorderColor, + hoverBorderColor, + null ); + } + + protected Color getBackground( Component c, boolean selected ) { + return FlatButtonUI.buttonStateColor( c, + selected ? selectedBackground : background, + disabledBackground, + (selected && selectedFocusedBackground != null) ? selectedFocusedBackground : focusedBackground, + (selected && selectedHoverBackground != null) ? selectedHoverBackground : hoverBackground, + (selected && selectedPressedBackground != null) ? selectedPressedBackground : pressedBackground ); + } + + protected Color getCheckmarkColor( Component c, boolean selected, boolean isFocused ) { + return c.isEnabled() + ? ((selected && isFocused && selectedFocusedCheckmarkColor != null) + ? selectedFocusedCheckmarkColor + : checkmarkColor) + : disabledCheckmarkColor; } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatRadioButtonIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatRadioButtonIcon.java index 16c74bf8..06095b0f 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatRadioButtonIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatRadioButtonIcon.java @@ -16,6 +16,7 @@ package com.formdev.flatlaf.icons; +import java.awt.Component; import java.awt.Graphics2D; import java.awt.geom.Ellipse2D; @@ -36,25 +37,25 @@ public class FlatRadioButtonIcon protected final int centerDiameter = getUIInt( "RadioButton.icon.centerDiameter", 8, style ); @Override - protected void paintFocusBorder( Graphics2D g2 ) { + protected void paintFocusBorder( Component c, Graphics2D g ) { // the outline focus border is painted outside of the icon int wh = ICON_SIZE + (focusWidth * 2); - g2.fillOval( -focusWidth, -focusWidth, wh, wh ); + g.fillOval( -focusWidth, -focusWidth, wh, wh ); } @Override - protected void paintBorder( Graphics2D g2 ) { - g2.fillOval( 0, 0, 15, 15 ); + protected void paintBorder( Component c, Graphics2D g ) { + g.fillOval( 0, 0, 15, 15 ); } @Override - protected void paintBackground( Graphics2D g2 ) { - g2.fillOval( 1, 1, 13, 13 ); + protected void paintBackground( Component c, Graphics2D g ) { + g.fillOval( 1, 1, 13, 13 ); } @Override - protected void paintCheckmark( Graphics2D g2 ) { + protected void paintCheckmark( Component c, Graphics2D g ) { float xy = (ICON_SIZE - centerDiameter) / 2f; - g2.fill( new Ellipse2D.Float( xy, xy, centerDiameter, centerDiameter ) ); + g.fill( new Ellipse2D.Float( xy, xy, centerDiameter, centerDiameter ) ); } }