RFR: 8332895: Support interpolation for backgrounds and borders [v18]

John Hendrikx jhendrikx at openjdk.org
Fri Aug 9 11:24:39 UTC 2024


On Thu, 8 Aug 2024 15:45:37 GMT, Andy Goryachev <angorya at openjdk.org> wrote:

>> Returning `null` seems fine from the perspective of `StyleConverter`, but it makes the calling code very awkward. Remember, we ended up here because we needed a way to detect whether an object would support component-wise transitions. If we can't detect that without invoking `convertBack`, we would need to either:
>> 1. Speculatively decompose the value without knowing whether there even are any transitions defined on the node. This is bad because most of the time, there will be no transitions; we will end up deconstructing many objects for no reason.
>> 2. _Assume_ that an object is component-transitionable, look up all potential transitions, and decompose the value; then, if we were wrong with out assumption, go back to the start and try again with another code path (`Interpolatable` or no transition).
>> 
>> Instead, what I've implemented now is a new interface `StyleConverter.WithReconstructionSupport`, which contains both methods:
>> 
>> public interface WithReconstructionSupport<T> {
>>     T convert(Map<CssMetaData<? extends Styleable, ?>, Object> values);
>>     Map<CssMetaData<? extends Styleable, ?>, Object> convertBack(T value);
>> }
>> 
>> 
>> This allows us to use object deconstruction and reconstruction with a single interface reference, and also allows us to detect such support very easily.
>
> +1 for `StyleConverter.WithReconstructionSupport`
> 
> maybe use a shorter name, like
> 
> `StyleConverter.WithReconstruction`

Clear, thanks MIchael.  I would suggest `Reconstructable` as the name, which seems more inline with interface naming (especially `Interpolatable`). Reads nice also:

    if (converter instanceof Reconstructable r) { ... }

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

PR Review Comment: https://git.openjdk.org/jfx/pull/1522#discussion_r1711286120


More information about the openjfx-dev mailing list