Rate of embedded animations
Kevin Rushforth
kevin.rushforth at oracle.com
Tue Jan 21 23:30:26 UTC 2020
This got buried in my inbox, and I missed seeing it.
I'll respond inline.
On 1/10/2020 6:45 PM, Nir Lisker wrote:
> I forgot to bring up https://bugs.openjdk.java.net/browse/JDK-8200206,
> which is also relevant to this discussion. The solution to that one is
> probably allowing only 1 parent, similar to the scenegraph policy.
> That will avoid parent animations fighting over the state of common
> children animations.
Good point. Regardless of which approach (1 or 2) we go with, I agree
that allowing only a single parent transition is best. I note that this
would be a semantic change, though, so even though we ought to decide
what we want the behavior to be, actually enforcing a single parent is
probably best left to JavaFX 15 (I note that
https://bugs.openjdk.java.net/browse/JDK-8200206 is targeted to 15).
> On Sat, Jan 11, 2020 at 3:08 AM Nir Lisker <nlisker at gmail.com
> <mailto:nlisker at gmail.com>> wrote:
>
> What happens if you set the rate of the parent transition and
> then set the rate of a child animation?
>
> What if you bind to the rate of a child animation?
>
>
> There is already some code that touches this in the Animation's
> rate property:
>
> public void invalidated() {
> final double newRate = getRate();
> if (isRunningEmbedded()) {
> if (isBound()) {
> unbind();
> }
> set(oldRate);
> throw new IllegalStateException("Cannot set rate of
> embedded animation while running.");
> }
>
> isRunningEmbedded checks for a parent animation that is not
> STOPPED. That means that the rate of a child animation can only
> change while the parent is stopped, but it is ignored (the child's
> ClipEnvelope's rate is updated to the parent's rate instead).
> Binding to the rate property is never an issue, but it does give
> meaningless results since the rate is ignored. Binding the rate
> property itself will cause it to be unbinded.
>
> If we go with option 1, which is almost the current situation,
> there is only some cleanup needed when it comes to the relation
> between the Animation's rate and its ClipEnvelope's rate.
>
This (option 1) seems easiest, but I can see am argument for either
approach.
Remind me again, which JBS bug you are planning to use to fix this issue?
> If we go with option 2, we can eliminate the duplication of rate
> in the Animation and the ClipEnvelope (though ClipEvenope to
> Animation is somewhat like a peer to a Node, which duplicates the
> values as well, so maybe we want that?). The children's rate will
> always be the parent's rate. In this case the above code should
> probably be modified to account for STOPPED parents as well. A
> bound rate property will be unbinded and setting it will be either
> ignored or throw an exception.
>
Yes, I would agree with this.
>
> I'll note that currentRate is eliminated from the ClipEnvelope in
> the fix I'm working on, but as it's read-only, it's a different story.
>
> As long as the implementation
> is consistent in ignoring the rate property from the child
> Animation,
> this seems like a fine solution and is consistent with other
> properties
> where one property overrides another without modifying it.
>
>
> Which other properties?
>
I meant outside animation. Node.opacity for example. You can set it to
any value and it is clamped on use. I realize that this is a different
situation.
> delay, autoReverse, and cycleCount all work separately on the
> parent and child. For example, if both parent and child have
> autoReverse = true and cycleCount = 2, the animation will play
> forwards, backwards, forwards, backwards, so both are taken into
> account.
>
OK.
-- Kevin
> On Wed, Jan 8, 2020 at 1:14 AM Kevin Rushforth
> <kevin.rushforth at oracle.com <mailto:kevin.rushforth at oracle.com>>
> wrote:
>
> A rate in a "parent" transition should probably override the
> rate in a
> child Animation. There are a couple ways to do it, and it
> sounds like it
> doesn't really implement it right.
>
> 1. The public rate property values of child Animations within
> a parent
> Transition are ignored, but not updated. As long as the
> implementation
> is consistent in ignoring the rate property from the child
> Animation,
> this seems like a fine solution and is consistent with other
> properties
> where one property overrides another without modifying it.
>
> 2. Setting a rate on the parent Transition actually modifies
> the child
> node. This can work, but has more issues. What happens if you
> set the
> rate of the parent tansition and then set the rate of a child
> animation?
> What if you bind to the rate of a child animation?
>
> -- Kevin
>
> On 1/1/2020 1:04 PM, Nir Lisker wrote:
> > Hi,
> >
> > As part of my work in the animations package I've come
> across an undefined
> > spec. Is the rate of an animation that is embedded in a
> Parallel/Sequential
> > transition inherited and overridden by its parent?
> >
> > If I have an animations with a rate of 1 and a parent with a
> rate of 2, and
> > I add the animation to the parent, does the rate property
> change from 1 to
> > 2 (generating a change/invalidation event etc.)? Then,
> should any
> > subsequent changes to the parent's rate trigger a change in
> the child's
> > rate?
> >
> > The implementation is a bit messy in this regard. The rate
> and currentRate
> > values exist in both Animation and its ClipEnvelope, which
> is the source
> > for a couple of bugs. For example, changing the rate of a
> > ParallelTransition changes the child's ClipEnvelope's rate
> and currentRate,
> > but only the animation's currentRate (and not rate). Is it
> supposed to be
> > this way?
> >
> > What is clear is that it's not possible to change the rate
> of the embedded
> > animation directly.
> >
> > The docs do not talk about the rate of an embedded animation
> (they do talk
> > about the node property though).
> >
> > - Nir
>
More information about the openjfx-dev
mailing list