On Wed, 25 Aug 2021 04:11:55 GMT, Prasanta Sadhukhan <[email protected]>
wrote:
>> This is another attempt of fixing JDK-8249674 which created a regression
>> JDK-8266510 for which it was backed out.
>> This fix reinstates the UIResource properties for "Tree.leafIcon",
>> "Tree.closedIcon", "Tree.openIcon", "Tree.selectionForeground",
>> "Tree.textForeground", "Tree.selectionBackground", "Tree.textBackground",
>> "Tree.selectionBorderColor" for NimbusLookAndFeel.
>>
>> The regression which was "when a JTree node is selected, the text should be
>> painted using the selected text color (white), matching the color of the
>> expansion control. Instead, it is painted using the standard color (black)"
>> is also fixed by this fix, although I could not find any mention of this
>> behaviour in the spec that selected text color should match the expanded
>> icon color
>> but it's a long standing behaviour, so catered to it.
>> It was happening because SynthLabelUI#paint when it tries to paint
>> textForeground for cell label, it calls
>>
>> g.setColor(context.getStyle().getColor(context,
>> ColorType.TEXT_FOREGROUND));
>>
>>
>> which then calls SynthStyle#getColor where even though cell renderer
>> correctly gets the foreground color, it gets overridden by
>> getColorForState() because the color is a UIResource and there's no
>> corresponding color defined for that state for Tree.CellRenderer so it uses
>> default "black" color for "text" as defined in skin.laf
>>
>> else if (type == ColorType.TEXT_FOREGROUND) {
>> color = c.getForeground();
>> }
>> }
>>
>> if (color == null || color instanceof UIResource) {
>> // Then use what we've locally defined
>> color = getColorForState(context, type);
>> }
>>
>>
>> Proposed fix is to check if current foregroundColor for
>> DefaultTreeCellRenderer is UIResouce, then use that color itself.
>
> Prasanta Sadhukhan has updated the pull request incrementally with one
> additional commit since the last revision:
>
> Test update
It is reproducible but since is only color we tend to miss it since there is no
rule that it has to be of that color...As I told, I can create manual test if
that is what is needed..
-------------
PR: https://git.openjdk.java.net/jdk/pull/5178