From 8b8ed0b9ff0e67bead982c387c56449008dc3a99 Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Wed, 18 Nov 2020 18:26:30 +0100 Subject: [PATCH] Slider: - compute useful baseline for horizontal orientation so that the track is vertically centered - no baseline for vertical orientation --- .../com/formdev/flatlaf/ui/FlatSliderUI.java | 17 +++++++++++++++++ .../flatlaf/jideoss/ui/FlatRangeSliderUI.java | 17 +++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSliderUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSliderUI.java index 25901e4f..bc503667 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSliderUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSliderUI.java @@ -18,6 +18,7 @@ package com.formdev.flatlaf.ui; import java.awt.Color; import java.awt.Dimension; +import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; @@ -143,6 +144,22 @@ public class FlatSliderUI return new FlatTrackListener(); } + @Override + public int getBaseline( JComponent c, int width, int height ) { + if( c == null ) + throw new NullPointerException(); + if( width < 0 || height < 0 ) + throw new IllegalArgumentException(); + + // no baseline for vertical orientation + if( slider.getOrientation() == JSlider.VERTICAL ) + return -1; + + // compute a baseline so that the track is vertically centered + FontMetrics fm = slider.getFontMetrics( slider.getFont() ); + return trackRect.y + Math.round( (trackRect.height - fm.getHeight()) / 2f ) + fm.getAscent() - 1; + } + @Override public Dimension getPreferredHorizontalSize() { return UIScale.scale( super.getPreferredHorizontalSize() ); diff --git a/flatlaf-jide-oss/src/main/java/com/formdev/flatlaf/jideoss/ui/FlatRangeSliderUI.java b/flatlaf-jide-oss/src/main/java/com/formdev/flatlaf/jideoss/ui/FlatRangeSliderUI.java index 9bbd1c36..34c7a6d1 100644 --- a/flatlaf-jide-oss/src/main/java/com/formdev/flatlaf/jideoss/ui/FlatRangeSliderUI.java +++ b/flatlaf-jide-oss/src/main/java/com/formdev/flatlaf/jideoss/ui/FlatRangeSliderUI.java @@ -18,6 +18,7 @@ package com.formdev.flatlaf.jideoss.ui; import java.awt.Color; import java.awt.Dimension; +import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; @@ -141,6 +142,22 @@ public class FlatRangeSliderUI disabledThumbBorderColor = null; } + @Override + public int getBaseline( JComponent c, int width, int height ) { + if( c == null ) + throw new NullPointerException(); + if( width < 0 || height < 0 ) + throw new IllegalArgumentException(); + + // no baseline for vertical orientation + if( slider.getOrientation() == JSlider.VERTICAL ) + return -1; + + // compute a baseline so that the track is vertically centered + FontMetrics fm = slider.getFontMetrics( slider.getFont() ); + return trackRect.y + Math.round( (trackRect.height - fm.getHeight()) / 2f ) + fm.getAscent() - 1; + } + @Override public Dimension getPreferredHorizontalSize() { return UIScale.scale( super.getPreferredHorizontalSize() );