mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2026-02-12 23:07:15 -06:00
Slider:
- hover feedback only when mouse is over thumb - pressed feedback added - separate disabled colors for track and thumb - made private fields protected
This commit is contained in:
@@ -20,7 +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.event.MouseEvent;
|
||||
import java.awt.geom.Path2D;
|
||||
import java.awt.geom.RoundRectangle2D;
|
||||
import javax.swing.JComponent;
|
||||
@@ -53,25 +53,29 @@ import com.formdev.flatlaf.util.UIScale;
|
||||
* @uiDefault Slider.trackColor Color
|
||||
* @uiDefault Slider.thumbColor Color
|
||||
* @uiDefault Slider.focusedColor Color optional; defaults to Component.focusColor
|
||||
* @uiDefault Slider.hoverColor Color optional; defaults to Slider.focusedColor
|
||||
* @uiDefault Slider.disabledForeground Color used for track and thumb is disabled
|
||||
* @uiDefault Slider.hoverThumbColor Color optional
|
||||
* @uiDefault Slider.pressedThumbColor Color optional
|
||||
* @uiDefault Slider.disabledTrackColor Color
|
||||
* @uiDefault Slider.disabledThumbColor Color
|
||||
*
|
||||
* @author Karl Tauber
|
||||
*/
|
||||
public class FlatSliderUI
|
||||
extends BasicSliderUI
|
||||
{
|
||||
private int trackWidth;
|
||||
private int thumbWidth;
|
||||
protected int trackWidth;
|
||||
protected int thumbWidth;
|
||||
|
||||
private Color trackColor;
|
||||
private Color thumbColor;
|
||||
private Color focusColor;
|
||||
private Color hoverColor;
|
||||
private Color disabledForeground;
|
||||
protected Color trackColor;
|
||||
protected Color thumbColor;
|
||||
protected Color focusColor;
|
||||
protected Color hoverThumbColor;
|
||||
protected Color pressedThumbColor;
|
||||
protected Color disabledTrackColor;
|
||||
protected Color disabledThumbColor;
|
||||
|
||||
private MouseListener hoverListener;
|
||||
private boolean hover;
|
||||
protected boolean thumbHover;
|
||||
protected boolean thumbPressed;
|
||||
|
||||
public static ComponentUI createUI( JComponent c ) {
|
||||
return new FlatSliderUI();
|
||||
@@ -81,24 +85,6 @@ 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 );
|
||||
@@ -111,8 +97,10 @@ public class FlatSliderUI
|
||||
trackColor = UIManager.getColor( "Slider.trackColor" );
|
||||
thumbColor = UIManager.getColor( "Slider.thumbColor" );
|
||||
focusColor = FlatUIUtils.getUIColor( "Slider.focusedColor", "Component.focusColor" );
|
||||
hoverColor = FlatUIUtils.getUIColor( "Slider.hoverColor", focusColor );
|
||||
disabledForeground = UIManager.getColor( "Slider.disabledForeground" );
|
||||
hoverThumbColor = UIManager.getColor( "Slider.hoverThumbColor" );
|
||||
pressedThumbColor = UIManager.getColor( "Slider.pressedThumbColor" );
|
||||
disabledTrackColor = UIManager.getColor( "Slider.disabledTrackColor" );
|
||||
disabledThumbColor = UIManager.getColor( "Slider.disabledThumbColor" );
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -122,8 +110,15 @@ public class FlatSliderUI
|
||||
trackColor = null;
|
||||
thumbColor = null;
|
||||
focusColor = null;
|
||||
hoverColor = null;
|
||||
disabledForeground = null;
|
||||
hoverThumbColor = null;
|
||||
pressedThumbColor = null;
|
||||
disabledTrackColor = null;
|
||||
disabledThumbColor = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected TrackListener createTrackListener( JSlider slider ) {
|
||||
return new FlatTrackListener();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -201,20 +196,17 @@ public class FlatSliderUI
|
||||
}
|
||||
|
||||
if( coloredTrack != null ) {
|
||||
g.setColor( FlatUIUtils.deriveColor( FlatUIUtils.isPermanentFocusOwner( slider ) ? focusColor : (hover ? hoverColor : thumbColor), thumbColor ) );
|
||||
g.setColor( thumbColor );
|
||||
((Graphics2D)g).fill( coloredTrack );
|
||||
}
|
||||
|
||||
g.setColor( enabled ? trackColor : disabledForeground );
|
||||
g.setColor( enabled ? trackColor : disabledTrackColor );
|
||||
((Graphics2D)g).fill( track );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void paintThumb( Graphics g ) {
|
||||
g.setColor( FlatUIUtils.deriveColor( slider.isEnabled()
|
||||
? (FlatUIUtils.isPermanentFocusOwner( slider ) ? focusColor : (hover ? hoverColor : thumbColor))
|
||||
: disabledForeground,
|
||||
thumbColor ) );
|
||||
g.setColor( FlatUIUtils.deriveColor( getThumbColor(), thumbColor ) );
|
||||
|
||||
if( isRoundThumb() )
|
||||
g.fillOval( thumbRect.x, thumbRect.y, thumbRect.width, thumbRect.height );
|
||||
@@ -244,7 +236,73 @@ public class FlatSliderUI
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isRoundThumb() {
|
||||
protected Color getThumbColor() {
|
||||
if( !slider.isEnabled() )
|
||||
return disabledThumbColor;
|
||||
if( thumbPressed && pressedThumbColor != null )
|
||||
return pressedThumbColor;
|
||||
if( thumbHover && hoverThumbColor != null )
|
||||
return hoverThumbColor;
|
||||
if( FlatUIUtils.isPermanentFocusOwner( slider ) )
|
||||
return focusColor;
|
||||
return thumbColor;
|
||||
}
|
||||
|
||||
protected boolean isRoundThumb() {
|
||||
return !slider.getPaintTicks() && !slider.getPaintLabels();
|
||||
}
|
||||
|
||||
//---- class FlatTrackListener --------------------------------------------
|
||||
|
||||
protected class FlatTrackListener
|
||||
extends TrackListener
|
||||
{
|
||||
@Override
|
||||
public void mouseEntered( MouseEvent e ) {
|
||||
setThumbHover( isOverThumb( e ) );
|
||||
super.mouseEntered( e );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseExited( MouseEvent e ) {
|
||||
setThumbHover( false );
|
||||
super.mouseExited( e );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseMoved( MouseEvent e ) {
|
||||
setThumbHover( isOverThumb( e ) );
|
||||
super.mouseMoved( e );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mousePressed( MouseEvent e ) {
|
||||
setThumbPressed( isOverThumb( e ) );
|
||||
super.mousePressed( e );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseReleased( MouseEvent e ) {
|
||||
setThumbPressed( false );
|
||||
super.mouseReleased( e );
|
||||
}
|
||||
|
||||
protected void setThumbHover( boolean hover ) {
|
||||
if( hover != thumbHover ) {
|
||||
thumbHover = hover;
|
||||
slider.repaint( thumbRect );
|
||||
}
|
||||
}
|
||||
|
||||
protected void setThumbPressed( boolean pressed ) {
|
||||
if( pressed != thumbPressed ) {
|
||||
thumbPressed = pressed;
|
||||
slider.repaint( thumbRect );
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean isOverThumb( MouseEvent e ) {
|
||||
return e != null && slider.isEnabled() && thumbRect.contains( e.getX(), e.getY() );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -240,8 +240,10 @@ Separator.foreground=#515151
|
||||
Slider.trackColor=#646464
|
||||
Slider.thumbColor=#A6A6A6
|
||||
Slider.tickColor=#888
|
||||
Slider.hoverColor=darken($Slider.thumbColor,15%,derived)
|
||||
Slider.disabledForeground=#4c5052
|
||||
Slider.hoverThumbColor=darken($Slider.thumbColor,10%,derived)
|
||||
Slider.pressedThumbColor=darken($Slider.thumbColor,15%,derived)
|
||||
Slider.disabledTrackColor=#4c5052
|
||||
Slider.disabledThumbColor=$Slider.disabledTrackColor
|
||||
|
||||
|
||||
#---- SplitPane ----
|
||||
|
||||
@@ -252,8 +252,10 @@ Separator.foreground=#d1d1d1
|
||||
Slider.trackColor=#c4c4c4
|
||||
Slider.thumbColor=#6e6e6e
|
||||
Slider.tickColor=#888
|
||||
Slider.hoverColor=lighten($Slider.thumbColor,15%,derived)
|
||||
Slider.disabledForeground=#c0c0c0
|
||||
Slider.hoverThumbColor=lighten($Slider.thumbColor,10%,derived)
|
||||
Slider.pressedThumbColor=lighten($Slider.thumbColor,15%,derived)
|
||||
Slider.disabledTrackColor=#c0c0c0
|
||||
Slider.disabledThumbColor=$Slider.disabledTrackColor
|
||||
|
||||
|
||||
#---- SplitPane ----
|
||||
|
||||
Reference in New Issue
Block a user