RFR: 8336097: UserAgent Styles using lookups are promoted to Author level if look-up is defined in Author stylesheet [v2]
John Hendrikx
jhendrikx at openjdk.org
Mon Jul 15 13:00:00 UTC 2024
On Mon, 15 Jul 2024 12:10:27 GMT, John Hendrikx <jhendrikx at openjdk.org> wrote:
>> This change removes the origin determination from `resolveLookups`. Instead, the origin from the style is used.
>>
>> Although a comment in the code alluded that this may cause problem with `INLINE` styles, this is not the case. Whenever a `Node` is associated with a `CssStyleHelper`, a suitable shared cache is determined for its use. This already takes into account the presence of an inline style, and only nodes with the same inline style can share such a cache. See `Cache#getStyleMap` and specifically this fragment where an additional selector is added for the inline style:
>>
>> if (hasInlineStyle) {
>> Selector selector = cacheContainer.getInlineStyleSelector(inlineStyle);
>> if (selector != null) selectors.add(selector);
>> }
>
> John Hendrikx has updated the pull request incrementally with one additional commit since the last revision:
>
> Add test case
As a side note, there is a bug in the loop detection code in `resolveLookups`. A `Set` is used to track what `ParsedValue`s have been visited before, but in a few places this set is cleared. If this happens in a recursive call, and the caller has to do another lookup replacement, it has lost what `ParsedValue`s it visited before.
I'll file another issue for that as I already have a test case that results in a `StackOverflowError`:
@Test
public void infiniteLoop() throws IOException {
Stylesheet stylesheet = new CssParser().parse("userAgentStylSheet", """
.root {
-fx-base-fill: ladder(-fx-base, white 49%, black 50%);
-fx-base: ladder(-fx-base-fill, white 49%, black 50%);
}
.pane {
-fx-background-color: -fx-base;
}
""");
StyleManager.getInstance().setDefaultUserAgentStylesheet(stylesheet);
Pane a = new Pane();
a.getStyleClass().add("pane");
root.getChildren().addAll(a);
stage.show();
Toolkit.getToolkit().firePulse();
}
-------------
PR Comment: https://git.openjdk.org/jfx/pull/1503#issuecomment-2228444299
More information about the openjfx-dev
mailing list