RFR: JDK-8218745: TableView: visual glitch at borders on horizontal scrolling
Marius Hanl
mhanl at openjdk.org
Sat Mar 9 20:44:57 UTC 2024
On Wed, 10 Jan 2024 19:21:16 GMT, Marius Hanl <mhanl at openjdk.org> wrote:
> This PR fixes the border glitch/gap as explained in both linked tickets.
>
> I noted that the `ScrollPane` control does not suffer from this problem, although the code is mostly the same as in `VirtualFlow`. The `ScrollPane` snaps the content correctly, no matter which scale. I carefully checked the code and it seems that the container structure in `ScrollPane` was explicitly written to handle this perfectly. There was definitely some thought on that.
>
> So to finally fix this issue, I rewrote the `VirtualFlow` container/scrolling code to be **exactly** the same as in `ScrollPane`(Skin).
> And this also fixes the issue, while behaving the same as before.
>
> In the future it may makes sense to try to somewhat unify the code from `ScrollPane` and `VirtualFlow`. I already have some ideas.
>
> Unfortunately though, one more container is introduced to `VirtualFlow`, so the css needs to be changed since it is very strictly written in the first place:
> Before: `.list-view:focused > .virtual-flow > .clipped-container > .sheet > .list-cell`
> After: `.list-view:focused > .virtual-flow > .viewport > .clipped-container > .sheet > .list-cell`
>
> To better understand this, the container structure (tree) is shown below:
>
> - ScrollPane
> - viewRect -> `setClip` -> clipRect (viewContent size)
> - viewContent -> `setLayoutX`
> - Content
> - vsb
> - hsb
> - corner
>
> ---
> - VirtualFlow
> - viewRect **(->NEW IN THIS PR<-)** -> `setClip` -> clipRect (clippedContainer size)
> - clippedContainer/clipView -> `setLayoutX` (when scrolling)
> - sheet
> - Cell
> - vsb
> - hsb
> - corner
Note that I found out something interesting which can MAY help us here to solve the problem in another way.
What I found out:
If I set the the opacity of the clip rect to something under 1, this bug disappears.

So something in the low level clip rendering is different when an opacity is set. Will investigate if there could be another solution.
-------------
PR Comment: https://git.openjdk.org/jfx/pull/1330#issuecomment-1986971595
More information about the openjfx-dev
mailing list