RFR: 7124282: [macosx] Can't see table cell highlighter when the highlight border is the same color as the cell. [v11]

Prasanta Sadhukhan psadhukhan at openjdk.java.net
Tue Apr 26 06:01:06 UTC 2022


On Tue, 12 Apr 2022 00:22:31 GMT, Harshitha Onkar <duke at openjdk.java.net> wrote:

>> Previously while tabbing through the JTable cell, the cell highlighter/focus ring was not visible against the selection background. 
>> 
>> Changes are made to Aqua LAF to derive a lighter focus ring color by changing saturation and setting brightness component to 100% of original focus ring color so that it is visible while tabbing through `JTable` cells. A new method is added for this purpose which takes in `focusRingColor`, does adjustment to saturation and brightness and returns a new focus ring color. There are edge cases where the HSB transformation does not yield the right focus ring color, for these cases a default color is returned.
>> 
>> **Edge Cases**
>> ![image](https://user-images.githubusercontent.com/95945681/161360456-3929acf1-282b-4c2b-95d1-1d5707c1e238.png)
>> 
>> The edge case condition consists of two parts –
>> To handle white/black colors - (hsbValues[0] == 0 && hsbValues[1] == 0) - representing hue and saturation of zero obtained for black, white or exactly grey (red=green=color) conditions
>> To handle grayish colors - hsbValues[1] <= satGrayScale where satGrayScale <= 0.10 . For any given hue and brightness, a saturation of less than or equal to 10% represents grayish tint colors.
>> (The second case was added to accommodate grayish focus ring color returned by system when Accent color = Graphite.  The returned color is not exactly gray but grayish (r=135, g=135, b=140)). 
>> To accommodate a more generic case of grayish colors, the satGrayScale has a threshold or buffer of 0.10 or 10%. 
>> 
>> Used the following resources to test out different grayish colors and optimal saturation offsets used in  `deriveLighterFocusRing()`.
>> 
>> - [RapidTables](https://www.rapidtables.com/convert/color/rgb-to-hsl.html) 
>> - [Colorizer](http://colorizer.org/).
>> - [Chart Link](https://codepen.io/HunorMarton/details/eWvewo)
>> 
>> A test case is added to compare the RGB difference between the original focus ring color & selection background and the new focus ring color & selection background.
>> 
>> PS: The native L&F (Mac OS) and Swing L&F for JTable cell tabbing differs (on native tables the cell background turns white on focus with a cell focus ring). Since the background for Swing tables can be set by users and also overridden by subclassing `DefaultTableCellRenderer`, and to adhere to current implementation of Swing, the white cell background changes are not incorporated. Only the Focus Ring/ Cell Highlighter is made more prominent.
>
> Harshitha Onkar has updated the pull request incrementally with one additional commit since the last revision:
> 
>   added new color to CSystemColors.m - CELL_HIGHLIGHT_COLOR

src/java.desktop/macosx/classes/com/apple/laf/AquaLookAndFeel.java line 392:

> 390: 
> 391:         // for table cell highlighter
> 392:         final Color cellFocusRing = AquaImageFactory.getCellHighlightColorUIResource();

overall looks ok. I believe you have tested well in BigSur and Monterey also..
Minor nit, this cellFocusRing should be "cellFocusRingColor" like other color variables.

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

PR: https://git.openjdk.java.net/jdk/pull/7768



More information about the client-libs-dev mailing list