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