On Wed, 30 Mar 2022 13:27:40 GMT, Johan Vos <j...@openjdk.org> wrote:
>> When the size of a ListCell is changed and a scrollTo method is invoked >> without having a layout calculation in between, the old (wrong) size is used >> to calculcate the total estimate. This happens e.g. when the size is changed >> in the `updateItem` method. >> This PR will immediately resize the cell and sets the new value in the cache >> containing the cellsizes. > > Johan Vos has updated the pull request incrementally with one additional > commit since the last revision: > > Don't shift cells if we are already showing the lowest index cell. I don't believe that it is possible to position the content and scrollbar **exactly**, if the VirtualFlow **estimates** the size of the cells. For that case we need an external cell size provider, that I, as an application developer, can provide to the e.g. ListView. I thought of something like this. The existing estimation logic can then be implemented as a default cell size provider. interface CellSizeProvider { /** * Returns the size of all cells. * IMPORTANT: Be carefully by implementing this method. It can drastically degrade the performance of a component. */ double getTotalSize(); /** * Returns the size of the cell for an item given by its index. * IMPORTANT: Be carefully by implementing this method. It can drastically degrade the performance of a component. */ double getCellSize(int); /** * The callback which is set by the VirtualFlow. It allows to calculate the cell size for an item given by its index. * IMPORTANT: This callback returns the exact value, but it may be slow. */ void setCellSizeCalculator(Function<Integer, Double> cellSizeCalculator); } ------------- PR: https://git.openjdk.java.net/jfx/pull/712