mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2026-02-11 06:27:13 -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 ----
|
||||
|
||||
@@ -841,17 +841,19 @@ SeparatorUI com.formdev.flatlaf.ui.FlatSeparatorUI
|
||||
#---- Slider ----
|
||||
|
||||
Slider.background #3c3f41 javax.swing.plaf.ColorUIResource [UI]
|
||||
Slider.disabledForeground #4c5052 javax.swing.plaf.ColorUIResource [UI]
|
||||
Slider.disabledThumbColor #4c5052 javax.swing.plaf.ColorUIResource [UI]
|
||||
Slider.disabledTrackColor #4c5052 javax.swing.plaf.ColorUIResource [UI]
|
||||
Slider.focus #7e7e7e javax.swing.plaf.ColorUIResource [UI]
|
||||
Slider.focusInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
|
||||
Slider.font [active] $defaultFont [UI]
|
||||
Slider.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
|
||||
Slider.highlight #242424 javax.swing.plaf.ColorUIResource [UI]
|
||||
Slider.horizontalSize 200,21 java.awt.Dimension
|
||||
Slider.hoverColor #808080 com.formdev.flatlaf.util.DerivedColor [UI] darken(15% autoInverse)
|
||||
Slider.hoverThumbColor #8d8d8d com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse)
|
||||
Slider.minimumHorizontalSize 36,21 java.awt.Dimension
|
||||
Slider.minimumVerticalSize 21,36 java.awt.Dimension
|
||||
Slider.onlyLeftMouseButtonDrag true
|
||||
Slider.pressedThumbColor #808080 com.formdev.flatlaf.util.DerivedColor [UI] darken(15% autoInverse)
|
||||
Slider.shadow #646464 javax.swing.plaf.ColorUIResource [UI]
|
||||
Slider.thumbColor #a6a6a6 javax.swing.plaf.ColorUIResource [UI]
|
||||
Slider.thumbWidth 11
|
||||
|
||||
@@ -846,17 +846,19 @@ SeparatorUI com.formdev.flatlaf.ui.FlatSeparatorUI
|
||||
#---- Slider ----
|
||||
|
||||
Slider.background #f2f2f2 javax.swing.plaf.ColorUIResource [UI]
|
||||
Slider.disabledForeground #c0c0c0 javax.swing.plaf.ColorUIResource [UI]
|
||||
Slider.disabledThumbColor #c0c0c0 javax.swing.plaf.ColorUIResource [UI]
|
||||
Slider.disabledTrackColor #c0c0c0 javax.swing.plaf.ColorUIResource [UI]
|
||||
Slider.focus #9e9e9e javax.swing.plaf.ColorUIResource [UI]
|
||||
Slider.focusInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
|
||||
Slider.font [active] $defaultFont [UI]
|
||||
Slider.foreground #000000 javax.swing.plaf.ColorUIResource [UI]
|
||||
Slider.highlight #ffffff javax.swing.plaf.ColorUIResource [UI]
|
||||
Slider.horizontalSize 200,21 java.awt.Dimension
|
||||
Slider.hoverColor #949494 com.formdev.flatlaf.util.DerivedColor [UI] lighten(15% autoInverse)
|
||||
Slider.hoverThumbColor #888888 com.formdev.flatlaf.util.DerivedColor [UI] lighten(10% autoInverse)
|
||||
Slider.minimumHorizontalSize 36,21 java.awt.Dimension
|
||||
Slider.minimumVerticalSize 21,36 java.awt.Dimension
|
||||
Slider.onlyLeftMouseButtonDrag true
|
||||
Slider.pressedThumbColor #949494 com.formdev.flatlaf.util.DerivedColor [UI] lighten(15% autoInverse)
|
||||
Slider.shadow #c4c4c4 javax.swing.plaf.ColorUIResource [UI]
|
||||
Slider.thumbColor #6e6e6e javax.swing.plaf.ColorUIResource [UI]
|
||||
Slider.thumbWidth 11
|
||||
|
||||
@@ -833,7 +833,8 @@ SeparatorUI com.formdev.flatlaf.ui.FlatSeparatorUI
|
||||
#---- Slider ----
|
||||
|
||||
Slider.background #ccffcc javax.swing.plaf.ColorUIResource [UI]
|
||||
Slider.disabledForeground #000088 javax.swing.plaf.ColorUIResource [UI]
|
||||
Slider.disabledThumbColor #888800 javax.swing.plaf.ColorUIResource [UI]
|
||||
Slider.disabledTrackColor #ffff88 javax.swing.plaf.ColorUIResource [UI]
|
||||
Slider.focus #696969 javax.swing.plaf.ColorUIResource [UI]
|
||||
Slider.focusInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
|
||||
Slider.focusedColor #97c3f3 javax.swing.plaf.ColorUIResource [UI]
|
||||
@@ -841,10 +842,11 @@ Slider.font [active] $defaultFont [UI]
|
||||
Slider.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI]
|
||||
Slider.highlight #ffffff javax.swing.plaf.ColorUIResource [UI]
|
||||
Slider.horizontalSize 200,21 java.awt.Dimension
|
||||
Slider.hoverColor #0000ff javax.swing.plaf.ColorUIResource [UI]
|
||||
Slider.hoverThumbColor #0000ff javax.swing.plaf.ColorUIResource [UI]
|
||||
Slider.minimumHorizontalSize 36,21 java.awt.Dimension
|
||||
Slider.minimumVerticalSize 21,36 java.awt.Dimension
|
||||
Slider.onlyLeftMouseButtonDrag true
|
||||
Slider.pressedThumbColor #00ff00 javax.swing.plaf.ColorUIResource [UI]
|
||||
Slider.shadow #a0a0a0 javax.swing.plaf.ColorUIResource [UI]
|
||||
Slider.thumbColor #880000 javax.swing.plaf.ColorUIResource [UI]
|
||||
Slider.thumbWidth 11
|
||||
|
||||
@@ -261,8 +261,10 @@ Slider.trackColor=#0b0
|
||||
Slider.thumbColor=#800
|
||||
Slider.tickColor=#f00
|
||||
Slider.focusedColor=$Component.focusColor
|
||||
Slider.hoverColor=#00f
|
||||
Slider.disabledForeground=#008
|
||||
Slider.hoverThumbColor=#00f
|
||||
Slider.pressedThumbColor=#0f0
|
||||
Slider.disabledTrackColor=#ff8
|
||||
Slider.disabledThumbColor=#880
|
||||
|
||||
|
||||
#---- SplitPane ----
|
||||
|
||||
@@ -581,7 +581,8 @@ Separator.stripeIndent
|
||||
Separator.stripeWidth
|
||||
SeparatorUI
|
||||
Slider.background
|
||||
Slider.disabledForeground
|
||||
Slider.disabledThumbColor
|
||||
Slider.disabledTrackColor
|
||||
Slider.focus
|
||||
Slider.focusInputMap
|
||||
Slider.focusInputMap.RightToLeft
|
||||
@@ -590,10 +591,11 @@ Slider.font
|
||||
Slider.foreground
|
||||
Slider.highlight
|
||||
Slider.horizontalSize
|
||||
Slider.hoverColor
|
||||
Slider.hoverThumbColor
|
||||
Slider.minimumHorizontalSize
|
||||
Slider.minimumVerticalSize
|
||||
Slider.onlyLeftMouseButtonDrag
|
||||
Slider.pressedThumbColor
|
||||
Slider.shadow
|
||||
Slider.thumbColor
|
||||
Slider.thumbWidth
|
||||
|
||||
Reference in New Issue
Block a user