> 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 incrementally with one additional commit since the last revision: javadoc change ------------- Changes: - all: https://git.openjdk.org/jfx/pull/1522/files - new: https://git.openjdk.org/jfx/pull/1522/files/1227a79f..1c842ccc Webrevs: - full: https://webrevs.openjdk.org/?repo=jfx&pr=1522&range=38 - incr: https://webrevs.openjdk.org/?repo=jfx&pr=1522&range=37-38 Stats: 3 lines in 1 file changed: 2 ins; 0 del; 1 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