[Review Request] Support fixed cell heights in JavaFX UI controls

Neil Galarneau neil at galarneaus.net
Mon May 20 12:52:56 PDT 2013


Sorry for the mangled message.
The mangled end of my message was:
If you make the layout machinery available
padding:0px;color:rgb(51,51,51);line-height:19px;">
I assume doing this kind of layout requires coordination between
TableView's and TableRow's Skins.
Thank you for your consideration,
Neil 

----- Original Message -----
From: Neil Galarneau 
To:
Cc:
Sent:Mon, 20 May 2013 14:46:58 -0500
Subject:Re: [Review Request] Support fixed cell heights in JavaFX UI
controls

 Increasing the scalability of these controls would be excellent!

 Your proposal is for an alternative layout policy that is simple and
 would be very scalable.

 I also need a scalable TableView/TreeTableView, but I need more
 flexiblity in my layout policy. For example, it would be useful to
me
 to have a layout policy where most Cells are the same height ">From:
jonathan.giles at oracle.com [1]
 To:"Richard Bair" 
 Cc:"openjfx-dev at openjdk.java.net [2]" 
 Sent:Tue, 21 May 2013 07:18:53 +1200
 Subject:Re: [Review Request] Support fixed cell heights in JavaFX UI
 controls

 On 21/05/2013 3:45 a.m., Richard Bair wrote:
 >> In our ongoing effort to make JavaFX fast, especially on
 constrained systems such as the Raspberry Pi, I'd like to propose
the
 addition of API to the ListView, TreeView, TreeTableView and
TableView
 controls that allows for developers to specify a fixed row height
for
 all rows. Should a developer set this, they would be explicitly
 telling JavaFX that their cells will not dynamically resize.
 > Actually, it is more than this, isn't it? Beyond not dynamically
 resizing, it also means that the height of each row will not be
 determined by the CSS properties (padding, etc) specified on the
 cells, or the cell's preferred size, or the cell's content. So when
a
 developer sets the fixed row height, they would either do so via CSS
 (so they can use 'em' calculations to make the row height based on
the
 font) or they would have to determine the number for themselves in
 some other manner (including just making it up!). Is that right?
 Yes, this is right. In all my testing I've simply specified the
 fixed 
 height as 24 (which is approximately the size of cells by default).
 >
 >> In return for giving up this functionality, JavaFX can do two
 things that massively helps performance:
 >>
 >> 1) The virtualisation code can short-circuit all height
 measurements (and many resizing operations). This saves JavaFX from
 having to perform massive amounts of string measurement, which is a
 big bottleneck.
 >>
 >> 2) The TableView and TreeTableView controls can virtualise in the
 horizontal direction. In other words, for all columns that are not
 visible (as the width of all columns exceeds the width of the
 TableView itself), the cells contained within obstructed columns
will
 be removed from the scenegraph (and added back in as necessary as
the
 user scrolls horizontally). This saves JavaFX from having to perform
 CSS / layout on all of these cells. The reason why this is enabled
 only with fixed cell height is because we can not know whether cells
 outside the visible area have an impact on the row height.
 >>
 >> In our tests enabling a fixed row height has massive gains in
 runtime and startup performance. It won't be useful to everyone, but
I
 would imagine that it would be applicable for most people However,
 because enabling this by default would potentially break a lot of
 people, this functionality will _not_ be enabled by default.
 >>
 >> I'm slightly conscious of the fact that using the term 'fixed
 cell _height_' is confusing in the case of a ListView which is laid
 out horizontally. Therefore, my suggested API would be either a
 fixedCellHeight double property or a fixedCellLength double property
 (where length is the term used internally to differentiate from the
 cell breadth). From an ease-of-understanding point of view I much
 prefer fixedCellHeight however - most people won't be using
horizontal
 ListViews, so it is unlikely to be confusing. My preferred approach
 would be to have the property default to Region.USE_COMPUTED_SIZE
[3] [1]
 to indicate that fixed cell height should not be used. To enable the
 functionality, a positive value can be set. I'm not wed to using
Region.USE_COMPUTED_SIZE [4] [2], so if that feels confusing we could
just
 state a negative value will disable the value.
 > Probably I would go with the negative value since
Region.USE_COMPUTED_SIZE [5] [3] (although conveniently named) would
be
 used out of context (where the context is with min/pref/max
 widths/heights).
 >
 > fixedCellSize as suggested by Philipp seems nice.
 As I noted with Jasper, it seems like fixedCellSize is the current 
 leader, so I'll be going with that in my proposal. I'll also not use

Region.USE_COMPUTED_SIZE [6] [4] for the reasons you state - I also
felt
 a 
 little unhappy with it so I'm happy to just go without.

 If there is no further discussion I'll update the jira issue today
 with 
 the details and will update with the api-review label to get the +1
 from 
 you asap.

 -- Jonathan

 Links:
 ------
 [1] http://sitemail.hostway.com/http: [7]
 [2] http://sitemail.hostway.com/http: [8]
 [3] http://sitemail.hostway.com/http: [9]
 [4] http://sitemail.hostway.com/http: [10]



Links:
------
[1] mailto:jonathan.giles at oracle.com
[2] mailto:openjfx-dev at openjdk.java.net
[3] http://sitemail.hostway.com/http:
[4] http://sitemail.hostway.com/http:
[5] http://sitemail.hostway.com/http:
[6] http://sitemail.hostway.com/http:
[7] http://sitemail.hostway.com/http:
[8] http://sitemail.hostway.com/http:
[9] http://sitemail.hostway.com/http:
[10] http://sitemail.hostway.com/http:



More information about the openjfx-dev mailing list