> This PR completes the CSS Transitions story (see #870) by adding
> interpolation support for backgrounds and borders, making them targetable by
> transitions.
>
> `Background` and `Border` objects are deeply immutable, but not
> interpolatable. Consider the following `Background`, which describes the
> background of a `Region`:
>
>
> Background {
> fills = [
> BackgroundFill {
> fill = Color.RED
> }
> ]
> }
>
>
> Since backgrounds are deeply immutable, changing the region's background to
> another color requires the construction of a new `Background`, containing a
> new `BackgroundFill`, containing the new `Color`.
>
> Animating the background color using a CSS transition therefore requires the
> entire Background object graph to be interpolatable in order to generate
> intermediate backgrounds.
>
> More specifically, the following types will now implement `Interpolatable`.
>
> - `Insets`
> - `Background`
> - `BackgroundFill`
> - `BackgroundImage`
> - `BackgroundPosition`
> - `BackgroundSize`
> - `Border`
> - `BorderImage`
> - `BorderStroke`
> - `BorderWidths`
> - `CornerRadii`
> - `Stop`
> - `Paint` and all of its subclasses
> - `Margins` (internal type)
> - `BorderImageSlices` (internal type)
>
> ## Interpolation of composite objects
>
> As of now, only `Color`, `Point2D`, and `Point3D` are interpolatable. Each of
> these classes is an aggregate of `double` values, which are combined using
> linear interpolation. However, many of the new interpolatable classes
> comprise of not only `double` values, but a whole range of other types. This
> requires us to more precisely define what we mean by "interpolation".
>
> Mirroring the CSS specification, the `Interpolatable` interface defines
> several types of component interpolation:
>
> | Interpolation type | Description |
> |---|---|
> | default | Component types that implement `Interpolatable` are interpolated
> by calling the `interpolate(Object, double)}` method. |
> | linear | Two components are combined by linear interpolation such that `t =
> 0` produces the start value, and `t = 1` produces the end value. This
> interpolation type is usually applicable for numeric components. |
> | discrete | If two components cannot be meaningfully combined, the
> intermediate component value is equal to the start value for `t < 0.5` and
> equal to the end value for `t >= 0.5`. |
> | pairwise | Two lists are combined by pairwise interpolation. If the start
> list has fewer elements than the target list, the missing elements are copied
> from the target list. If the start list has more elements than the ...
Michael Strauß has updated the pull request with a new target base due to a
merge or a rebase. The pull request now contains 63 commits:
- fix merge conflicts
- Merge branch 'master' into feature/interpolatable
# Conflicts:
#
modules/javafx.graphics/src/test/java/test/javafx/geometry/InsetsTest.java
#
modules/javafx.graphics/src/test/java/test/javafx/scene/layout/BackgroundFillTest.java
#
modules/javafx.graphics/src/test/java/test/javafx/scene/layout/BackgroundImageTest.java
#
modules/javafx.graphics/src/test/java/test/javafx/scene/layout/BackgroundPositionTest.java
#
modules/javafx.graphics/src/test/java/test/javafx/scene/layout/BackgroundSizeTest.java
#
modules/javafx.graphics/src/test/java/test/javafx/scene/layout/BackgroundTest.java
#
modules/javafx.graphics/src/test/java/test/javafx/scene/layout/BorderStrokeTest.java
#
modules/javafx.graphics/src/test/java/test/javafx/scene/layout/BorderTest.java
#
modules/javafx.graphics/src/test/java/test/javafx/scene/layout/BorderWidthsTest.java
#
modules/javafx.graphics/src/test/java/test/javafx/scene/paint/ColorTest.java
#
modules/javafx.graphics/src/test/java/test/javafx/scene/paint/ImagePatternTest.java
#
modules/javafx.graphics/src/test/java/test/javafx/scene/paint/LinearGradientTest.java
#
modules/javafx.graphics/src/test/java/test/javafx/scene/paint/RadialGradientTest.java
#
modules/javafx.graphics/src/test/java/test/javafx/scene/paint/StopListTest.java
#
modules/javafx.graphics/src/test/java/test/javafx/scene/paint/StopTest.java
- javadoc change
- javadoc change
- javadoc change
- small doc changes, copyright header
- fixed a bug when null values require discrete transitions
- javadoc changes
- added tests
- javadoc changes
- ... and 53 more: https://git.openjdk.org/jfx/compare/29004352...3027caa5
-------------
Changes: https://git.openjdk.org/jfx/pull/1522/files
Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=1522&range=39
Stats: 6710 lines in 77 files changed: 5843 ins; 371 del; 496 mod
Patch: https://git.openjdk.org/jfx/pull/1522.diff
Fetch: git fetch https://git.openjdk.org/jfx.git pull/1522/head:pull/1522
PR: https://git.openjdk.org/jfx/pull/1522