mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2026-02-12 23:07:15 -06:00
FlatCheckBoxIcon:
- added parameter `Component c` to all paint methods so that subclasses can access component states - extracted methods to get colors and selected/indeterminate state
This commit is contained in:
@@ -129,78 +129,101 @@ public class FlatCheckBoxIcon
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void paintIcon( Component c, Graphics2D g2 ) {
|
protected void paintIcon( Component c, Graphics2D g ) {
|
||||||
boolean indeterminate = c instanceof JComponent && clientPropertyEquals( (JComponent) c, SELECTED_STATE, SELECTED_STATE_INDETERMINATE );
|
boolean indeterminate = isIndeterminate( c );
|
||||||
boolean selected = indeterminate || (c instanceof AbstractButton && ((AbstractButton)c).isSelected());
|
boolean selected = indeterminate || isSelected( c );
|
||||||
boolean isFocused = FlatUIUtils.isPermanentFocusOwner( c );
|
boolean isFocused = FlatUIUtils.isPermanentFocusOwner( c );
|
||||||
|
|
||||||
// paint focused border
|
// paint focused border
|
||||||
if( isFocused && focusWidth > 0 && FlatButtonUI.isFocusPainted( c ) ) {
|
if( isFocused && focusWidth > 0 && FlatButtonUI.isFocusPainted( c ) ) {
|
||||||
g2.setColor( focusColor );
|
g.setColor( getFocusColor( c ) );
|
||||||
paintFocusBorder( g2 );
|
paintFocusBorder( c, g );
|
||||||
}
|
}
|
||||||
|
|
||||||
// paint border
|
// paint border
|
||||||
g2.setColor( FlatButtonUI.buttonStateColor( c,
|
g.setColor( getBorderColor( c, selected ) );
|
||||||
selected ? selectedBorderColor : borderColor,
|
paintBorder( c, g );
|
||||||
disabledBorderColor,
|
|
||||||
selected && selectedFocusedBorderColor != null ? selectedFocusedBorderColor : focusedBorderColor,
|
|
||||||
hoverBorderColor,
|
|
||||||
null ) );
|
|
||||||
paintBorder( g2 );
|
|
||||||
|
|
||||||
// paint background
|
// paint background
|
||||||
g2.setColor( FlatUIUtils.deriveColor( FlatButtonUI.buttonStateColor( c,
|
g.setColor( FlatUIUtils.deriveColor( getBackground( c, selected ), background ) );
|
||||||
selected ? selectedBackground : background,
|
paintBackground( c, g );
|
||||||
disabledBackground,
|
|
||||||
(selected && selectedFocusedBackground != null) ? selectedFocusedBackground : focusedBackground,
|
|
||||||
(selected && selectedHoverBackground != null) ? selectedHoverBackground : hoverBackground,
|
|
||||||
(selected && selectedPressedBackground != null) ? selectedPressedBackground : pressedBackground ),
|
|
||||||
background ) );
|
|
||||||
paintBackground( g2 );
|
|
||||||
|
|
||||||
// paint checkmark
|
// paint checkmark
|
||||||
if( selected || indeterminate ) {
|
if( selected || indeterminate ) {
|
||||||
g2.setColor( c.isEnabled()
|
g.setColor( getCheckmarkColor( c, selected, isFocused ) );
|
||||||
? ((selected && isFocused && selectedFocusedCheckmarkColor != null)
|
|
||||||
? selectedFocusedCheckmarkColor
|
|
||||||
: checkmarkColor)
|
|
||||||
: disabledCheckmarkColor );
|
|
||||||
if( indeterminate )
|
if( indeterminate )
|
||||||
paintIndeterminate( g2 );
|
paintIndeterminate( c, g );
|
||||||
else
|
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
|
// the outline focus border is painted outside of the icon
|
||||||
int wh = ICON_SIZE - 1 + (focusWidth * 2);
|
int wh = ICON_SIZE - 1 + (focusWidth * 2);
|
||||||
int arcwh = arc + (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;
|
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;
|
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();
|
Path2D.Float path = new Path2D.Float();
|
||||||
path.moveTo( 4.5f, 7.5f );
|
path.moveTo( 4.5f, 7.5f );
|
||||||
path.lineTo( 6.6f, 10f );
|
path.lineTo( 6.6f, 10f );
|
||||||
path.lineTo( 11.25f, 3.5f );
|
path.lineTo( 11.25f, 3.5f );
|
||||||
|
|
||||||
g2.setStroke( new BasicStroke( 1.9f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND ) );
|
g.setStroke( new BasicStroke( 1.9f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND ) );
|
||||||
g2.draw( path );
|
g.draw( path );
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void paintIndeterminate( Graphics2D g2 ) {
|
protected void paintIndeterminate( Component c, Graphics2D g ) {
|
||||||
g2.fill( new RoundRectangle2D.Float( 3.75f, 5.75f, 8.5f, 2.5f, 2f, 2f ) );
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package com.formdev.flatlaf.icons;
|
package com.formdev.flatlaf.icons;
|
||||||
|
|
||||||
|
import java.awt.Component;
|
||||||
import java.awt.Graphics2D;
|
import java.awt.Graphics2D;
|
||||||
import java.awt.geom.Ellipse2D;
|
import java.awt.geom.Ellipse2D;
|
||||||
|
|
||||||
@@ -36,25 +37,25 @@ public class FlatRadioButtonIcon
|
|||||||
protected final int centerDiameter = getUIInt( "RadioButton.icon.centerDiameter", 8, style );
|
protected final int centerDiameter = getUIInt( "RadioButton.icon.centerDiameter", 8, style );
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void paintFocusBorder( Graphics2D g2 ) {
|
protected void paintFocusBorder( Component c, Graphics2D g ) {
|
||||||
// the outline focus border is painted outside of the icon
|
// the outline focus border is painted outside of the icon
|
||||||
int wh = ICON_SIZE + (focusWidth * 2);
|
int wh = ICON_SIZE + (focusWidth * 2);
|
||||||
g2.fillOval( -focusWidth, -focusWidth, wh, wh );
|
g.fillOval( -focusWidth, -focusWidth, wh, wh );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void paintBorder( Graphics2D g2 ) {
|
protected void paintBorder( Component c, Graphics2D g ) {
|
||||||
g2.fillOval( 0, 0, 15, 15 );
|
g.fillOval( 0, 0, 15, 15 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void paintBackground( Graphics2D g2 ) {
|
protected void paintBackground( Component c, Graphics2D g ) {
|
||||||
g2.fillOval( 1, 1, 13, 13 );
|
g.fillOval( 1, 1, 13, 13 );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void paintCheckmark( Graphics2D g2 ) {
|
protected void paintCheckmark( Component c, Graphics2D g ) {
|
||||||
float xy = (ICON_SIZE - centerDiameter) / 2f;
|
float xy = (ICON_SIZE - centerDiameter) / 2f;
|
||||||
g2.fill( new Ellipse2D.Float( xy, xy, centerDiameter, centerDiameter ) );
|
g.fill( new Ellipse2D.Float( xy, xy, centerDiameter, centerDiameter ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user