On Sat, 22 Nov 2025 10:06:56 GMT, Michael Strauß <[email protected]> wrote:

>> Implementation of the 
>> [linear](https://www.w3.org/TR/css-easing-2/#the-linear-easing-function) 
>> easing function, which is now widely supported by all browsers, but still 
>> missing in JavaFX.
>> 
>> It allows developers to approximate arbitrary easing functions with linear 
>> segments:
>> 
>> 
>> linear(
>>     /* Start to 1st bounce */
>>     0, 0.063, 0.25, 0.563, 1 36.4%,
>>     /* 1st to 2nd bounce */
>>     0.812, 0.75, 0.813, 1 72.7%,
>>     /* 2nd to 3rd bounce */
>>     0.953, 0.938, 0.953, 1 90.9%,
>>     /* 3rd bounce to end */
>>     0.984, 1 100% 100%
>>   )
>> 
>> 
>> <img 
>> src="https://github.com/user-attachments/assets/73aac0d4-0185-47c5-8791-bdb247eb69c8";
>>  width="400"/>
>
> Michael Strauß has updated the pull request incrementally with two additional 
> commits since the last revision:
> 
>  - numeric overflow to infinity
>  - refactor tests

Looks good, left a couple of suggestions.

Used .button selector with transition in the monkey tester, with hilarious 
results.

modules/javafx.graphics/src/main/java/com/sun/scenario/animation/LinearInterpolator.java
 line 202:

> 200:         }
> 201: 
> 202:         // Linearly interpolate (or extrapolate) along the segment (ax, 
> ay) -> (bx, by).

Alternative proposal: instead of introducing infinities, we probably should 
just arrive at the end-of-segment value when the ax ~= bx, something like this:


        // Linearly interpolate (or extrapolate) along the segment (ax, ay) -> 
(bx, by).
        if (isNear(ax, bx)) {
            // Degenerate segment; just treat as a step.
            return ay;
        }


where isNear is Math.abs(ax - bx) < SMALL_CONSTANT
(can be inline), unless the value of SMALL_CONSTANT depends on the interval.

what do you think?

modules/javafx.graphics/src/main/java/javafx/animation/Interpolator.java line 
111:

> 109:      * @since 26
> 110:      */
> 111:     public static Interpolator LINEAR(Point2D... controlPoints) {

as you pointed out earlier, it's probably better to name this method ofLinear() 
since it is not a final constant.

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

PR Review: https://git.openjdk.org/jfx/pull/1977#pullrequestreview-3502390939
PR Review Comment: https://git.openjdk.org/jfx/pull/1977#discussion_r2557849902
PR Review Comment: https://git.openjdk.org/jfx/pull/1977#discussion_r2557853499

Reply via email to