On Thu, 23 Sep 2021 19:01:52 GMT, Marius Hanl <mh...@openjdk.org> wrote:
> This PR fixes an issue which is probably in JavaFX since VirtualFlow exists. > While horizontal scrolling any VirtualFlow control the left blue border > sometimes disappear/gets smaller. (see also image below) > > This can be fixed by **snapping** the scroll bar value (similar like e.g. a > **ScrollPane** does). > The same needs to be done on the table header as otherwise the column lines > might be 1 px off to the cell lines. > As a side effect this also fixes that the column lines sometimes get's blurry > when horizontal scrolling (see second image). > > While testing with **-Dglass.win.uiScale** I found out that the problem is > not fixed for a scale like 1.25 or 1.5, while it is fixed for 1 or 2. The > border sometimes disappears only when the snapped value is a decimal number > (which obviously does not happen on a scale of 1 or 2), e.g. something like > 12.6 but it will never disappear when it's a normal number, so e.g. just 12. > > That's why something like **Math.round(..)** or just a **cast** to an **int** > instead of snapping fixes this problem for all scales. I also didn't notice > any side effect. But not sure if this the right fix then. > How does JavaFX render a **node** when e.g. the x is a decimal number? And > does a decimal number make sense (Why we e.g. don't round the value)? > > Another explanation could also be that there is an issue somewhere deep > inside the node layout/snapping/Clip/Group/pixel rendering and to simply > round/cast the value just fixes the symptom here. > > In any case I'm open for any feedback, help or explaination. > I'm also glad for anything which might help identify the root cause here, if > any. > > --- > 1. >  > --- > 2. >  Given that this doesn't fix the problem when Hi-DPI scaling is in effect, this will need a different solution. See the discussion in [this thread](https://mail.openjdk.java.net/pipermail/openjfx-dev/2021-October/032215.html) on the openjfx-dev mailing list for some considerations regarding Hi-DPI scaling. Since this PR isn't ready to be reviewed, I'm moving it to Draft. modules/javafx.controls/src/main/java/javafx/scene/control/skin/VirtualFlow.java line 3082: > 3080: double snappedClipX = snapPositionX(clipX); > 3081: setLayoutX(-snappedClipX); > 3082: clipRect.setLayoutX(snappedClipX); This is likely not the right place to snap the coordinates to a pixel boundary. This is usually done as part of layout. I'm also skeptical of the fact that you added it to `setClipX` but not `setClipY`. ------------- Changes requested by kcr (Lead). PR: https://git.openjdk.java.net/jfx/pull/630