Event when CSS is applied
tomas.mikula at gmail.com
Tue Feb 17 18:05:35 UTC 2015
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.
On Tue, Feb 17, 2015 at 10:14 AM, Tom Eugelink <tbee at 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
>>> 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.
More information about the openjfx-dev