ScrollBar: use derived colors for track and thumb (issue #103)

This commit is contained in:
Karl Tauber
2020-05-23 16:40:09 +02:00
parent 53fce4e81d
commit d2d4f73834
9 changed files with 59 additions and 30 deletions

View File

@@ -610,15 +610,17 @@ class UIDefaultsLoader
}
// parse base color
ColorUIResource baseColor = (ColorUIResource) parseColorOrFunction( resolver.apply( colorStr ), resolver, reportError );
String resolvedColorStr = resolver.apply( colorStr );
ColorUIResource baseColor = (ColorUIResource) parseColorOrFunction( resolvedColorStr, resolver, reportError );
// apply this function to base color
Color newColor = ColorFunctions.applyFunctions( baseColor, function );
if( derived ) {
ColorFunction[] functions;
if( baseColor instanceof DerivedColor ) {
if( baseColor instanceof DerivedColor && resolvedColorStr == colorStr ) {
// if the base color is also derived, join the color functions
// but only if base color function is specified directly in this function
ColorFunction[] baseFunctions = ((DerivedColor)baseColor).getFunctions();
functions = new ColorFunction[baseFunctions.length + 1];
System.arraycopy( baseFunctions, 0, functions, 0, baseFunctions.length );

View File

@@ -113,6 +113,10 @@ public class FlatArrowButton
this.yOffset = yOffset;
}
protected Color deriveHoverBackground( Color hoverBackground ) {
return hoverBackground;
}
@Override
public Dimension getPreferredSize() {
return scale( super.getPreferredSize() );
@@ -134,7 +138,7 @@ public class FlatArrowButton
// paint hover background
if( enabled && isHover() && hoverBackground != null ) {
g.setColor( hoverBackground );
g.setColor( deriveHoverBackground( hoverBackground ) );
g.fillRect( 0, 0, width, height );
}

View File

@@ -191,6 +191,11 @@ public class FlatScrollBarUI
FlatArrowButton button = new FlatArrowButton( orientation,
arrowType, buttonArrowColor, buttonDisabledArrowColor, null, hoverTrackColor )
{
@Override
protected Color deriveHoverBackground( Color hoverBackground ) {
return getTrackColor( scrollbar, true ) ;
}
@Override
public Dimension getPreferredSize() {
if( isShowButtons() ) {
@@ -231,7 +236,7 @@ public class FlatScrollBarUI
@Override
protected void paintTrack( Graphics g, JComponent c, Rectangle trackBounds ) {
g.setColor( hoverTrack ? hoverTrackColor : trackColor );
g.setColor( getTrackColor( c, hoverTrack ) );
paintTrackOrThumb( g, c, trackBounds, trackInsets, trackArc );
}
@@ -240,7 +245,7 @@ public class FlatScrollBarUI
if( thumbBounds.isEmpty() || !scrollbar.isEnabled() )
return;
g.setColor( hoverThumb ? hoverThumbColor : thumbColor );
g.setColor( getThumbColor( c, hoverThumb ) );
paintTrackOrThumb( g, c, thumbBounds, thumbInsets, thumbArc );
}
@@ -272,6 +277,17 @@ public class FlatScrollBarUI
// do not paint
}
protected Color getTrackColor( JComponent c, boolean hover ) {
Color trackColor = FlatUIUtils.deriveColor( this.trackColor, c.getBackground() );
return hover ? FlatUIUtils.deriveColor( hoverTrackColor, trackColor ) : trackColor;
}
protected Color getThumbColor( JComponent c, boolean hover ) {
Color trackColor = FlatUIUtils.deriveColor( this.trackColor, c.getBackground() );
Color thumbColor = FlatUIUtils.deriveColor( this.thumbColor, trackColor );
return hover ? FlatUIUtils.deriveColor( hoverThumbColor, thumbColor ) : thumbColor;
}
@Override
protected Dimension getMinimumThumbSize() {
return UIScale.scale( super.getMinimumThumbSize() );

View File

@@ -41,7 +41,7 @@ public class DerivedColor
}
public Color derive( Color baseColor ) {
if( hasBaseOfDefaultColor && baseOfDefaultColorRGB == baseColor.getRGB() )
if( (hasBaseOfDefaultColor && baseOfDefaultColorRGB == baseColor.getRGB()) || baseColor == this )
return this; // return default color
Color result = ColorFunctions.applyFunctions( baseColor, functions );

View File

@@ -217,10 +217,10 @@ ProgressBar.selectionBackground=@foreground
#---- ScrollBar ----
ScrollBar.track=#3F4244
ScrollBar.thumb=lighten($ScrollBar.track,10%)
ScrollBar.hoverTrackColor=lighten($ScrollBar.track,4%)
ScrollBar.hoverThumbColor=lighten($ScrollBar.thumb,10%)
ScrollBar.track=lighten(@background,1%,derived noAutoInverse)
ScrollBar.thumb=lighten($ScrollBar.track,10%,derived noAutoInverse)
ScrollBar.hoverTrackColor=lighten($ScrollBar.track,4%,derived noAutoInverse)
ScrollBar.hoverThumbColor=lighten($ScrollBar.thumb,10%,derived noAutoInverse)
#---- Separator ----

View File

@@ -224,10 +224,10 @@ ProgressBar.selectionBackground=@foreground
#---- ScrollBar ----
ScrollBar.track=#F5F5F5
ScrollBar.thumb=darken($ScrollBar.track,10%)
ScrollBar.hoverTrackColor=darken($ScrollBar.track,3%)
ScrollBar.hoverThumbColor=darken($ScrollBar.thumb,10%)
ScrollBar.track=lighten(@background,1%,derived noAutoInverse)
ScrollBar.thumb=darken($ScrollBar.track,10%,derived noAutoInverse)
ScrollBar.hoverTrackColor=darken($ScrollBar.track,3%,derived noAutoInverse)
ScrollBar.hoverThumbColor=darken($ScrollBar.thumb,10%,derived noAutoInverse)
#---- Separator ----

View File

@@ -348,13 +348,20 @@ public class FlatTestFrame
boolean explicit = explicitColorsCheckBox.isSelected();
ColorUIResource restoreColor = new ColorUIResource( Color.white );
LookAndFeel lookAndFeel = UIManager.getLookAndFeel();
boolean dark = (lookAndFeel instanceof FlatLaf && ((FlatLaf)lookAndFeel).isDark());
Color magenta = dark ? Color.magenta.darker() : Color.magenta;
Color orange = dark ? Color.orange.darker() : Color.orange;
Color blue = dark ? Color.blue.darker() : Color.blue;
Color green = dark ? Color.green.darker() : Color.green;
updateComponentsRecur( content, (c, type) -> {
if( type == "view" || type == "tab" ) {
c.setForeground( explicit ? Color.magenta : restoreColor );
c.setBackground( explicit ? Color.orange : restoreColor );
c.setForeground( explicit ? magenta : restoreColor );
c.setBackground( explicit ? orange : restoreColor );
} else {
c.setForeground( explicit ? Color.blue : restoreColor );
c.setBackground( explicit ? Color.green : restoreColor );
c.setForeground( explicit ? blue : restoreColor );
c.setBackground( explicit ? green : restoreColor );
}
} );

View File

@@ -760,20 +760,20 @@ ScrollBar.background #3c3f41 javax.swing.plaf.ColorUIResource [UI]
ScrollBar.buttonArrowColor #9a9da1 javax.swing.plaf.ColorUIResource [UI]
ScrollBar.buttonDisabledArrowColor #585858 javax.swing.plaf.ColorUIResource [UI]
ScrollBar.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
ScrollBar.hoverThumbColor #717678 javax.swing.plaf.ColorUIResource [UI]
ScrollBar.hoverThumbColor #6e767a com.formdev.flatlaf.util.DerivedColor [UI] lighten(10%)
ScrollBar.hoverThumbWithTrack false
ScrollBar.hoverTrackColor #494c4f javax.swing.plaf.ColorUIResource [UI]
ScrollBar.hoverTrackColor #484c4f com.formdev.flatlaf.util.DerivedColor [UI] lighten(4%)
ScrollBar.maximumThumbSize 4096,4096 javax.swing.plaf.DimensionUIResource [UI]
ScrollBar.minimumThumbSize 8,8 javax.swing.plaf.DimensionUIResource [UI]
ScrollBar.showButtons false
ScrollBar.squareButtons false
ScrollBar.thumb #585c5e javax.swing.plaf.ColorUIResource [UI]
ScrollBar.thumb #565c5f com.formdev.flatlaf.util.DerivedColor [UI] lighten(10%)
ScrollBar.thumbArc 0
ScrollBar.thumbDarkShadow #7e7e7e javax.swing.plaf.ColorUIResource [UI]
ScrollBar.thumbHighlight #242424 javax.swing.plaf.ColorUIResource [UI]
ScrollBar.thumbInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
ScrollBar.thumbShadow #646464 javax.swing.plaf.ColorUIResource [UI]
ScrollBar.track #3f4244 javax.swing.plaf.ColorUIResource [UI]
ScrollBar.track #3e4244 com.formdev.flatlaf.util.DerivedColor [UI] lighten(1%)
ScrollBar.trackArc 0
ScrollBar.trackHighlight #7e7e7e javax.swing.plaf.ColorUIResource [UI]
ScrollBar.trackInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
@@ -783,7 +783,7 @@ ScrollBarUI com.formdev.flatlaf.ui.FlatScrollBarUI
#---- ScrollPane ----
ScrollPane.background #3f4244 javax.swing.plaf.ColorUIResource [UI]
ScrollPane.background #3e4244 com.formdev.flatlaf.util.DerivedColor [UI] lighten(1%)
ScrollPane.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatBorder [UI]
ScrollPane.fillUpperCorner true
ScrollPane.font [active] $defaultFont [UI]
@@ -1220,7 +1220,7 @@ laf.scaleFactor [active] 1.0
menu #3c3f41 javax.swing.plaf.ColorUIResource [UI]
menuText #bbbbbb javax.swing.plaf.ColorUIResource [UI]
scrollbar #3f4244 javax.swing.plaf.ColorUIResource [UI]
scrollbar #3e4244 com.formdev.flatlaf.util.DerivedColor [UI] lighten(1%)
#---- swingx/TaskPane ----

View File

@@ -762,20 +762,20 @@ ScrollBar.background #f2f2f2 javax.swing.plaf.ColorUIResource [UI]
ScrollBar.buttonArrowColor #666666 javax.swing.plaf.ColorUIResource [UI]
ScrollBar.buttonDisabledArrowColor #ababab javax.swing.plaf.ColorUIResource [UI]
ScrollBar.foreground #000000 javax.swing.plaf.ColorUIResource [UI]
ScrollBar.hoverThumbColor #c3c3c3 javax.swing.plaf.ColorUIResource [UI]
ScrollBar.hoverThumbColor #c3c3c3 com.formdev.flatlaf.util.DerivedColor [UI] darken(10%)
ScrollBar.hoverThumbWithTrack false
ScrollBar.hoverTrackColor #ededed javax.swing.plaf.ColorUIResource [UI]
ScrollBar.hoverTrackColor #ededed com.formdev.flatlaf.util.DerivedColor [UI] darken(3%)
ScrollBar.maximumThumbSize 4096,4096 javax.swing.plaf.DimensionUIResource [UI]
ScrollBar.minimumThumbSize 8,8 javax.swing.plaf.DimensionUIResource [UI]
ScrollBar.showButtons false
ScrollBar.squareButtons false
ScrollBar.thumb #dcdcdc javax.swing.plaf.ColorUIResource [UI]
ScrollBar.thumb #dcdcdc com.formdev.flatlaf.util.DerivedColor [UI] darken(10%)
ScrollBar.thumbArc 0
ScrollBar.thumbDarkShadow #9e9e9e javax.swing.plaf.ColorUIResource [UI]
ScrollBar.thumbHighlight #ffffff javax.swing.plaf.ColorUIResource [UI]
ScrollBar.thumbInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
ScrollBar.thumbShadow #c4c4c4 javax.swing.plaf.ColorUIResource [UI]
ScrollBar.track #f5f5f5 javax.swing.plaf.ColorUIResource [UI]
ScrollBar.track #f5f5f5 com.formdev.flatlaf.util.DerivedColor [UI] lighten(1%)
ScrollBar.trackArc 0
ScrollBar.trackHighlight #9e9e9e javax.swing.plaf.ColorUIResource [UI]
ScrollBar.trackInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
@@ -785,7 +785,7 @@ ScrollBarUI com.formdev.flatlaf.ui.FlatScrollBarUI
#---- ScrollPane ----
ScrollPane.background #f5f5f5 javax.swing.plaf.ColorUIResource [UI]
ScrollPane.background #f5f5f5 com.formdev.flatlaf.util.DerivedColor [UI] lighten(1%)
ScrollPane.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatBorder [UI]
ScrollPane.fillUpperCorner true
ScrollPane.font [active] $defaultFont [UI]
@@ -1222,7 +1222,7 @@ laf.scaleFactor [active] 1.0
menu #f2f2f2 javax.swing.plaf.ColorUIResource [UI]
menuText #000000 javax.swing.plaf.ColorUIResource [UI]
scrollbar #f5f5f5 javax.swing.plaf.ColorUIResource [UI]
scrollbar #f5f5f5 com.formdev.flatlaf.util.DerivedColor [UI] lighten(1%)
#---- swingx/TaskPane ----