> 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.

Johan Vos has updated the pull request incrementally with one additional commit 
since the last revision:

  reverse one more expected/actual set of args.

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

Changes:
  - all: https://git.openjdk.org/jfx/pull/808/files
  - new: https://git.openjdk.org/jfx/pull/808/files/ce9f83eb..b525b80b

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jfx&pr=808&range=03
 - incr: https://webrevs.openjdk.org/?repo=jfx&pr=808&range=02-03

  Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod
  Patch: https://git.openjdk.org/jfx/pull/808.diff
  Fetch: git fetch https://git.openjdk.org/jfx pull/808/head:pull/808

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

Reply via email to