<Swing Dev> RFR: 8256713: SwingSet2 : Slider leaves tracks in uiScale=2
Prasanta Sadhukhan
psadhukhan at openjdk.java.net
Mon Nov 23 09:21:00 UTC 2020
On Sun, 22 Nov 2020 08:59:48 GMT, Sergey Bylokhov <serb at openjdk.org> wrote:
> The problem became visible, when we draw a border across the component using drawLine, and expected that fillRect will clear a border of the component. This is incorrect because in the case of the scaled graphics(retina) some part of the line can be placed outside of the bounds of the rectangle. See additional information here:
> https://bugs.openjdk.java.net/browse/JDK-8011764
>
> This bug has occurred when the old default metal theme is used(DefaultMetalTheme) or thems based on it(Custom themes in the SwingSet2).
>
> The fix applies the clip before the rendering so the paint method will not touch pixels outside the component.
>
> As a fix, we could try to draw the lines using subpixel coordinates, but that code is expected to work using Graphics object(unlike current default metal theme: Ocean) which uses the only int as a coordinate, not a Graphics2D
>
> To make rendering a little bit better I tried antialiasing but it does not produce a better result, so did not use it in the fix.
src/java.desktop/share/classes/javax/swing/plaf/basic/BasicSliderUI.java line 1618:
> 1616: }
> 1617: }
> 1618: g.setClip(clip);
Since it is normally seen in Metal L&F, shouldn't we do the clip setting in MetalSliderUI.paintThumb() instead?
If we are doing it in BasicSliderUI, can you please explain why are we not seeing it in other L&Fs like nimbus or motif?
-------------
PR: https://git.openjdk.java.net/jdk/pull/1373
More information about the swing-dev
mailing list