On Mon, 23 Nov 2020 09:18:35 GMT, Prasanta Sadhukhan <psadhuk...@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? The bug in the motif was fixed by the JDK-8032219, the code in the BasicSliderUI is never used by the Metal L&F, I tested that code by the commented out the overridden code in the MetalSliderUI. ------------- PR: https://git.openjdk.java.net/jdk/pull/1373