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

Reply via email to