RFR: 8242523: Update the animation and clip envelope classes

Ambarish Rapte arapte at openjdk.java.net
Mon May 11 04:46:41 UTC 2020


On Fri, 24 Apr 2020 00:58:30 GMT, Nir Lisker <nlisker at openjdk.org> wrote:

> Mostly refactoring in preparation of the upcoming fixes. The changes might look like a lot, but it's mostly rearranging
> of methods. Summery of changes:
> ### Animation
> * Added `isNearZero` and `areNearEqual` methods that deal with `EPSILON` checks.
> * Added `isStopped`, `isRunning` and `isPaused` convenience methods.
> * Added `runHandler` method to deal with running the handler.
> * Moved methods to be grouped closer to where they are used rather than by visibility.
> * Removed the static import for `TickCalculation`.
> * Various small subjective readability changes.
> * Behavioral changes: switching `autoReverse` and `onFinished` properties from "Simple" to "Base" properties; and lazily
>   initializing the `cuePoints` map.
> 
> ### Clip Envelopes
> * Added `MultiLoopClipEnvelope` as an intermediate parent for infinite and finite clip envelopes.
> * Rearranged methods order to be consistent.
> * Replaced the `checkBounds` method with a new overload of `Utils.clamp`.
> * Renamed `pos` to `cyclePos`.
> * Extracted common methods: `changedDirection` and `ticksRateChange`
> * Added internal documentation.
> 
> Also corrected a typo in `TicksCalculation` and added an explanation for an animation test.

Overall looks good to me, Added few minor comments.

modules/javafx.graphics/src/main/java/com/sun/scenario/animation/shared/MultiLoopClipEnvelope.java line 48:

> 47:
> 48:     protected boolean autoReverse() {
> 49:         return autoReverse;

I would suggest the name to be `isAutoReverese`

modules/javafx.graphics/src/main/java/com/sun/scenario/animation/shared/ClipEnvelope.java line 46:

> 45:  */
> 46: public abstract class ClipEnvelope {
> 47:

I think the removal of line 46 was unintended change.

modules/javafx.graphics/src/main/java/javafx/animation/Animation.java line 142:

> 141:     }
> 142:
> 143:     /*

Both these methods seem like they belong to Utils.java. If moved to Utils.java then the all the calls
`(Math.abs(currentRate - rate) < EPSILON)` can be changed to use these methods from Utils.java. If we move these
methods then, Utils.java also needs to declare  `static final double EPSILON = 1e-12;`  and the EPSILON here can be
initialized as `private static final double EPSILON = Utils.EPSILON;`

modules/javafx.graphics/src/main/java/com/sun/scenario/animation/shared/MultiLoopClipEnvelope.java line 61:

> 60:
> 61:     protected boolean changedDirection(double newRate) {
> 62:         return newRate * rate < 0;

I would recommend to name as `isDirectionChanged`

modules/javafx.graphics/src/main/java/com/sun/scenario/animation/shared/SingleLoopClipEnvelope.java line 102:

> 101:             long ticksChange = Math.round(currentTick * currentRate);
> 102:             ticks = Utils.clamp(0, deltaTicks + ticksChange, cycleTicks);
> 103:             AnimationAccessor.getDefault().playTo(animation, ticks, cycleTicks);

This could remain unchanged. The `ticksChange` value is not really used elsewhere here.

modules/javafx.graphics/src/main/java/com/sun/scenario/animation/shared/MultiLoopClipEnvelope.java line 59:

> 58:         return Math.round((ticks - deltaTicks) * Math.abs(newRate / rate));
> 59:      }
> 60:

This is similar to `ClipEnvelope.ticksRateChange()` with a minor difference. Can this be removed from here and
`ClipEnvelope.ticksRateChange()` be reused ?

-------------

Changes requested by arapte (Reviewer).

PR: https://git.openjdk.java.net/jfx/pull/196


More information about the openjfx-dev mailing list