RFR: 8311895: CSS Transitions [v16]
drmarmac
duke at openjdk.org
Fri May 24 10:18:12 UTC 2024
On Thu, 2 May 2024 08:40:28 GMT, Michael Strauß <mstrauss at openjdk.org> wrote:
>> Implementation of [CSS Transitions](https://gist.github.com/mstr2/c72f8c9faa87de14926978f517a6018a).
>>
>> ### Future enhancements
>> CSS transitions requires all participating objects to implement the `Interpolatable` interface. For example, targeting `-fx-background-color` only works if all background-related objects are interpolatable: `Color`, `BackgroundFill`, and `Background`.
>>
>> In a follow-up PR, the following types will implement the `Interpolatable` interface:
>> `LinearGradient`, `RadialGradient`, `Stop`, `Background`, `BackgroundFill`, `BackgroundImage`, `BackgroundPosition`, `BackgroundSize`, `BackgroundStroke`, `BorderWidths`, `CornerRadii`, `Insets`.
>>
>> ### Limitations
>> This implementation supports both shorthand and longhand notations for the `transition` property. However, due to limitations of JavaFX CSS, mixing both notations doesn't work:
>>
>> .button {
>> transition: -fx-background-color 1s;
>> transition-easing-function: linear;
>> }
>>
>> This issue should be addressed in a follow-up enhancement.
>
> Michael Strauß has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 53 commits:
>
> - Merge branch 'master' into feature/css-transitions
> - update 'since' tags
> - Fix javadoc error
> - Change javadoc comment
> - Merge branch 'master' into feature/css-transitions
> - Discard redundant transitions in StyleableProperty impls
> - Changes per review
> - Merge branch 'master' into feature/css-transitions
> - Merge branch 'master' into feature/css-transitions
> - Add TransitionMediator
> - ... and 43 more: https://git.openjdk.org/jfx/compare/aa9907a5...6614abb9
I did some testing of this PR and started looking into the implementation (see code comments).
- Fade in / fade out with delay and various easing functions via the opacity property works as expected, , scaleX/scaleY also look good
- Attempting to do background-color transitions doesn't work, I presume because it's not yet `Interpolatable` in this PR. Do we need to emit a warning in such a case? Right now the `transition` CSS code just seems to be ignored.
- Same with the current limitation of not being able to mix shorthand and longhand notations, do we need a warning if it is attempted?
- Generally this looks like a high quality PR, filling a long-standing gap. Currently available alternative solutions (e.g. using code-driven animations) are quite cumbersome and not easy to get right.
modules/javafx.graphics/src/main/java/javafx/animation/Interpolator.java line 291:
> 289: * All rise points are within the open interval (0..1).
> 290: */
> 291: BOTH,
Looks like the docs for BOTH and NONE are swapped? (this would also affect the CSR)
modules/javafx.graphics/src/main/java/javafx/scene/Node.java line 9081:
> 9079: TransitionDefinition transition = get(i);
> 9080:
> 9081: boolean selected = "all".equals(transition.propertyName())
Is "all" the same as `TransitionDefinitionCssMetaData.PROPERTY_ALL`, so the magic string can be avoided?
modules/javafx.graphics/src/test/java/test/javafx/scene/Node_transition_Test.java line 162:
> 160: List<TransitionDefinition> transitions = NodeShim.getTransitionDefinitions(node);
> 161: assertEquals(3, transitions.size());
> 162: assertTransitionEquals("-fx-background-color", Duration.seconds(1), Duration.seconds(0.5), CSS_EASE, transitions.get(0));
`node` is a `Rectangle`, which doesn't have a `background`property. Doesn't hurt this specific test, but maybe it's better to use an existing property.
-------------
PR Review: https://git.openjdk.org/jfx/pull/870#pullrequestreview-2076453636
PR Review Comment: https://git.openjdk.org/jfx/pull/870#discussion_r1613220507
PR Review Comment: https://git.openjdk.org/jfx/pull/870#discussion_r1613227193
PR Review Comment: https://git.openjdk.org/jfx/pull/870#discussion_r1613233729
More information about the openjfx-dev
mailing list