On Mon, 7 Sep 2026 13:10:54 GMT, Marius Hanl <[email protected]> wrote:

>> Another much better try to fix the issue.
>> I recommend to read: https://github.com/openjdk/jfx/pull/2201 first. All 
>> tests from there are included. 
>> I added some new ones that succeed before and after, a first step for more 
>> CSS tests as discussed in: 
>> https://github.com/openjdk/jfx/pull/2218#issuecomment-5094495306
>> 
>> My new idea is now the following constraint, which I think is also a much 
>> better approach:
>> - A `CssStyleHelper` always has a correct `firstStyleableAncestor`. We can 
>> at any time trust and rely on it.
>> - We will also reuse the existing loop for the `isUserSetFont` check to 
>> improve the performance a bit
>> 
>> Implementation:
>> - We now save a flag to exactly know in which CSS state the `Node` is.
>> - We will collect all `Node`s in the scene tree once and then reuse the list 
>> when we need to process a stale `styleHelper` from a parent.
>>   - This will make sure we do no process the parent again and again when we 
>> have some stale `styleHelper`s in the chain 
>> - Not every `Node` has a `styleHelper` - it is only created when needed, so 
>> we can not attach the flag in there.
>> 
>> This fixes the issue while a deep (optionally unstyled) scene graph has no 
>> performance penality.
>> The approach is similar than my previous PR, but more smart. And with the 
>> set constraint mentioned above.
>> 
>> ---
>> 
>> I do think we can improve the `CssStyleHelper` more. But for another day. 
>> Maybe at one point, with more tests and when all requirements are clear, we 
>> can find a way without `CssHelperState` and without creating an empty 
>> `CssStyleHelper` just to hold trigger states (because of that, we need to 
>> check `styleHelper.cacheContainer != null` a lot of times).
>> 
>> 
>> ---------
>> - [x] I confirm that I make this contribution in accordance with the 
>> [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai).
>
> Marius Hanl has updated the pull request with a new target base due to a 
> merge or a rebase. The pull request now contains four commits:
> 
>  - change the way we process a stale CssStyleHelper
>  - Merge branch 'master' of https://github.com/openjdk/jfx into 
> 8388277-REDO]-Looked-up-color-fails-for--fx-background-color-in-JavaFX-CSS-file
>  - Merge branch 'master' of https://github.com/openjdk/jfx into 
> 8388277-REDO]-Looked-up-color-fails-for--fx-background-color-in-JavaFX-CSS-file
>    
>    # Conflicts:
>    #  
> modules/javafx.graphics/src/test/java/test/javafx/scene/CssStyleHelperTest.java
>  - 8388277: [REDO] Looked-up color fails for -fx-background-color in JavaFX 
> CSS file

modules/javafx.graphics/src/main/java/javafx/scene/CssStyleHelper.java line 230:

> 228: 
> 229:     private static Styleable[] styleablePath(Styleable styleable) {
> 230:         Styleable[] path = new Styleable[8];

I wonder if a `List` makes more sense. So open for opinions, I used an array as 
we also do that with e.g. `triggerStates` and to squeeze out a bit of 
performance. But not sure if it is worth it.

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

PR Review Comment: https://git.openjdk.org/jfx/pull/2225#discussion_r3950071399

Reply via email to