mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2026-02-10 22:17:13 -06:00
Slider: hover support
This commit is contained in:
@@ -20,6 +20,7 @@ import java.awt.Color;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.event.MouseListener;
|
||||
import java.awt.geom.Path2D;
|
||||
import java.awt.geom.RoundRectangle2D;
|
||||
import javax.swing.JComponent;
|
||||
@@ -39,13 +40,14 @@ import com.formdev.flatlaf.util.UIScale;
|
||||
* @uiDefault Slider.trackColor Color
|
||||
* @uiDefault Slider.thumbColor Color
|
||||
* @uiDefault Slider.tickColor Color
|
||||
* @uiDefault Slider.focusedColor Color
|
||||
* @uiDefault Slider.hoverColor Color optional; defaults to Slider.focusedColor
|
||||
* @uiDefault Slider.trackWidth int
|
||||
* @uiDefault Slider.thumbWidth int
|
||||
* @uiDefault Slider.horizontalSize Dimension preferred horizontal size; height is ignored; computed slider height is used
|
||||
* @uiDefault Slider.verticalSize Dimension preferred vertical size; width is ignored; computed slider width is used
|
||||
* @uiDefault Slider.minimumHorizontalSize Dimension height is ignored; computed slider height is used
|
||||
* @uiDefault Slider.minimumVerticalSize Dimension width is ignored; computed slider width is used
|
||||
* @uiDefault Component.focusColor Color
|
||||
*
|
||||
* @author Karl Tauber
|
||||
*/
|
||||
@@ -57,8 +59,12 @@ public class FlatSliderUI
|
||||
|
||||
private Color trackColor;
|
||||
private Color thumbColor;
|
||||
private Color disabledForeground;
|
||||
private Color focusColor;
|
||||
private Color hoverColor;
|
||||
private Color disabledForeground;
|
||||
|
||||
private MouseListener hoverListener;
|
||||
private boolean hover;
|
||||
|
||||
public static ComponentUI createUI( JComponent c ) {
|
||||
return new FlatSliderUI();
|
||||
@@ -68,6 +74,24 @@ public class FlatSliderUI
|
||||
super( null );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void installListeners( JSlider slider ) {
|
||||
super.installListeners( slider );
|
||||
|
||||
hoverListener = new FlatUIUtils.HoverListener( slider, h -> {
|
||||
hover = h;
|
||||
} );
|
||||
slider.addMouseListener( hoverListener );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void uninstallListeners( JSlider slider ) {
|
||||
super.uninstallListeners( slider );
|
||||
|
||||
slider.removeMouseListener( hoverListener );
|
||||
hoverListener = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void installDefaults( JSlider slider ) {
|
||||
super.installDefaults( slider );
|
||||
@@ -77,8 +101,9 @@ public class FlatSliderUI
|
||||
|
||||
trackColor = UIManager.getColor( "Slider.trackColor" );
|
||||
thumbColor = UIManager.getColor( "Slider.thumbColor" );
|
||||
focusColor = UIManager.getColor( "Slider.focusedColor" );
|
||||
hoverColor = FlatUIUtils.getUIColor( "Slider.hoverColor", focusColor );
|
||||
disabledForeground = UIManager.getColor( "Slider.disabledForeground" );
|
||||
focusColor = UIManager.getColor( "Component.focusColor" );
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -87,8 +112,9 @@ public class FlatSliderUI
|
||||
|
||||
trackColor = null;
|
||||
thumbColor = null;
|
||||
disabledForeground = null;
|
||||
focusColor = null;
|
||||
hoverColor = null;
|
||||
disabledForeground = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -160,7 +186,7 @@ public class FlatSliderUI
|
||||
}
|
||||
|
||||
if( coloredTrack != null ) {
|
||||
g.setColor( slider.hasFocus() ? focusColor : thumbColor );
|
||||
g.setColor( hover ? hoverColor : (slider.hasFocus() ? focusColor : thumbColor) );
|
||||
((Graphics2D)g).fill( coloredTrack );
|
||||
}
|
||||
|
||||
@@ -170,7 +196,9 @@ public class FlatSliderUI
|
||||
|
||||
@Override
|
||||
public void paintThumb( Graphics g ) {
|
||||
g.setColor( slider.hasFocus() ? focusColor : (slider.isEnabled() ? thumbColor : disabledForeground) );
|
||||
g.setColor( slider.isEnabled()
|
||||
? (hover ? hoverColor : (slider.hasFocus() ? focusColor : thumbColor))
|
||||
: disabledForeground );
|
||||
|
||||
if( isRoundThumb() )
|
||||
g.fillOval( thumbRect.x, thumbRect.y, thumbRect.width, thumbRect.height );
|
||||
|
||||
@@ -23,8 +23,11 @@ import java.awt.Graphics2D;
|
||||
import java.awt.Insets;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.RenderingHints;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
import java.awt.geom.Path2D;
|
||||
import java.awt.geom.RoundRectangle2D;
|
||||
import java.util.function.Consumer;
|
||||
import javax.swing.JComponent;
|
||||
import javax.swing.UIManager;
|
||||
import javax.swing.plaf.ColorUIResource;
|
||||
@@ -53,6 +56,11 @@ public class FlatUIUtils
|
||||
return (color != null) ? color : new Color( defaultColorRGB );
|
||||
}
|
||||
|
||||
public static Color getUIColor( String key, Color defaultColor ) {
|
||||
Color color = UIManager.getColor( key );
|
||||
return (color != null) ? color : defaultColor;
|
||||
}
|
||||
|
||||
public static int getUIInt( String key, int defaultValue ) {
|
||||
Object value = UIManager.get( key );
|
||||
return (value instanceof Integer) ? (Integer) value : defaultValue;
|
||||
@@ -180,4 +188,35 @@ public class FlatUIUtils
|
||||
{
|
||||
JavaCompatibility.drawStringUnderlineCharAt( c, g, text, underlinedIndex, x, y );
|
||||
}
|
||||
|
||||
//---- class HoverListener ------------------------------------------------
|
||||
|
||||
public static class HoverListener
|
||||
extends MouseAdapter
|
||||
{
|
||||
private final JComponent repaintComponent;
|
||||
private final Consumer<Boolean> hoverChanged;
|
||||
|
||||
public HoverListener( JComponent repaintComponent, Consumer<Boolean> hoverChanged ) {
|
||||
this.repaintComponent = repaintComponent;
|
||||
this.hoverChanged = hoverChanged;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseEntered( MouseEvent e ) {
|
||||
hoverChanged.accept( true );
|
||||
repaint();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseExited( MouseEvent e ) {
|
||||
hoverChanged.accept( false );
|
||||
repaint();
|
||||
}
|
||||
|
||||
private void repaint() {
|
||||
if( repaintComponent != null && repaintComponent.isEnabled() )
|
||||
repaintComponent.repaint();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -169,6 +169,7 @@ Separator.foreground=515151
|
||||
Slider.trackColor=646464
|
||||
Slider.thumbColor=A6A6A6
|
||||
Slider.tickColor=888888
|
||||
Slider.focusedColor=@@Component.focusColor
|
||||
Slider.disabledForeground=4c5052
|
||||
|
||||
|
||||
|
||||
@@ -174,6 +174,7 @@ Separator.foreground=cdcdcd
|
||||
Slider.trackColor=c4c4c4
|
||||
Slider.thumbColor=6e6e6e
|
||||
Slider.tickColor=888888
|
||||
Slider.focusedColor=@@Component.focusColor
|
||||
Slider.disabledForeground=c0c0c0
|
||||
|
||||
|
||||
|
||||
@@ -180,6 +180,8 @@ Separator.stripeIndent=5
|
||||
Slider.trackColor=00bb00
|
||||
Slider.thumbColor=880000
|
||||
Slider.tickColor=ff0000
|
||||
Slider.focusedColor=@@Component.focusColor
|
||||
Slider.hoverColor=0000ff
|
||||
Slider.disabledForeground=000088
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user