On Mon, 4 Jul 2022 13:52:40 GMT, Johan Vos <j...@openjdk.org> wrote:

> In order to fix the issues reported in JDK-8089589, the VirtualFlow now uses 
> the real sizes of the elements that are displayed. This allows for a more 
> natural way of scrolling through lists that contain items of very different 
> sizes.
> The algorithm that is used, does not calculate the size of each individual 
> cell upfront, as that would be a major performance overhead (especially for 
> large lists). Instead, we estimate the total size and the size of the 
> individual cells based on the real measured size of a (growing) number of 
> cells. 
> 
> There are a number of key variables that depend on this estimated size:
> * position
> * aboluteOffset
> * currentIndex
> 
> As a consequence, when the estimated size is changing, the absoluteOffset may 
> change which may lead to a new currentIndex. If this happens during a layout 
> phase, or a "complex" operation (e.g. scroll to an item and select it), this 
> may lead to visually unexpected artifacts. While the rendering becomes more 
> "correct" when the estimated size is improving, it is more important that we 
> do not create visual confusion. 
> 
> The difficulty is that there are a large number of ways to manipulate the 
> VirtualFlow, and different entry points may have different expectations about 
> which variables should be kept constant (or only changed gradually).
> 
> In this PR, we focus on consistency in the scrollTo method, where we want to 
> keep the top-cell constant. In case the estimated size is improved during the 
> scrollTo execution, or the next layoutChildren invocation, this implies 
> keeping the result of computeCurrentIndex() constant so that after scrolling 
> to a cell and selecting it, the selected cell is indeed the one that is 
> scrolled to.
> 
> This PR contains a number of tests for this scrollTo behaviour, that should 
> also be considered as regression test in case we want to add more invariants 
> later.

This pull request has now been integrated.

Changeset: b8302f64
Author:    Johan Vos <j...@openjdk.org>
URL:       
https://git.openjdk.org/jfx/commit/b8302f64f49e746a8645020cb778a4f3e4f4b893
Stats:     372 lines in 4 files changed: 332 ins; 19 del; 21 mod

8277785: ListView scrollTo jumps to wrong location when CellHeight is changed

Reviewed-by: kcr, fkirmaier, aghaisas

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

PR: https://git.openjdk.org/jfx/pull/808

Reply via email to