The control is a codewise polish up one of Gerrit's gauges (with permission!) 
and pulled into JFXtras (with tests and all). For an idea on what we are 
talking about:
https://www.youtube.com/watch?v=RH5X1uBu1d8

The process of centering the Text in that circle is a bit more complex.
1. The value may vary between a min and max value.
2. I want the Text to automatically utilize the maximum available space, but 
not change size when a longer or shorter text is shown.

To do this I have two additional Text nodes that have the same styling as the 
Text node (so these are on the scene, but not visible, otherwise CSS is not 
applied). These two text nodes get the maximum and minimum possible value set. 
Then on these two some pythagoras is applied and in that way one can determine 
the scale factor so that the value will never be rendered outside of the 
circle. Then the actual to-be-rendered value can be placed into the Text node 
and positioned in the centre of the circle.

The problem is that a lot of these calculations depend on the CSS styling. What 
font is set? Bold or not? So I can only do these calculcation after the CSS has 
been applied. This unfortunately is not yet the case when the skin is 
instantiated. This means that if I do not used the layoutChildren, the initial 
presentation is totally off, untill the first min/max/value is set.

So I would like to know when the CSS is applied to do the initial calculations. 
After that only when CSS, min or max changes is a recalculation required.

Tom



On 17-2-2015 19:05, Tomas Mikula wrote:
Hi Tom,

suppose you have such an event and can tell whether CSS of your Text
has changed. But is changed CSS the only time you want to re-position
the Text? I guess you also need to re-position it when the size of the
parent changes. I imagine the logic for determining whether you need
to re-position the Text or not can get quite complicated.

Why is it a problem that you reposition the Text too often?

I imagine, and someone please correct me if I'm wrong, that when you
ask for text.prefWidth(-1), you get a cached prefWidth from the last
call, if no properties of Text have changed since the last call to
prefWidth. I also suppose, and again correct me if I'm wrong, that if
you resizeRelocate the Text to the exact same position and size as it
already has, it does not incur any additional operations down the road
compared to not calling resizeRelocate at all. So my conclusion is
that repositioning the Text to the same place is not more expensive
than checking whether the Text needs to be repositioned.

Regards,
Tomas

On Tue, Feb 17, 2015 at 10:14 AM, Tom Eugelink <t...@tbee.org> wrote:
Registering to fontProperty works, but potentially requires a lot of
listeners on every property that may affect the size, like effect, scale,
etc. So I'm leaving it in layoutChildren for now; better once to many than
not often enough.

Would adding such an event be a big change?




On 17-2-2015 14:50, David Grieve wrote:

On 2/17/15 8:02 AM, Tom Eugelink wrote:
I have a skin (of a control) that centers a Text node. This Text node can
be styled via CSS, so this styling is a factor when centering. because
larger font means wider text.

The centering works perfectly, the only problem is figuring out when to
center the node. At the moment I'm centering the node on every
layoutChildren call of the skin, but this is way to often, because after
applying the CSS chances are very low that the node will need to be
repositioned.

Basically I would like to be informed when the styling of a node has been
applied or changed. Is there some place that can provide this information?

Not in general, no. But you can add a listener to a property that is
styled by CSS and react to the change. You might add a listener to the Text
node's fontProperty, for example. Clearly this isn't an all-purpose
solution. Another approach is to hold onto the bounds (or maybe just the
pref width and height) of the child node. If the old bounds doesn't equal
the new bounds, then recenter.


Reply via email to