RFR: JDK-8218745: TableView: visual glitch at borders on horizontal scrolling

Andy Goryachev angorya at openjdk.org
Thu Jan 11 00:00:32 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

The scrolling works correctly with the fix (tested TableView on macOS (scale=1 and 2) and win11 (scale=200%, 225%).  I'll continue testing tomorrow.

It might be a dumb question: would it be possible to avoid creating an intermediate container and keep the existing .css files?

-------------

PR Comment: https://git.openjdk.org/jfx/pull/1330#issuecomment-1885946034


More information about the openjfx-dev mailing list