On Fri, 25 Feb 2022 00:42:10 GMT, DamonGuy <d...@openjdk.java.net> wrote:

>> Html does not fit in JButton at certain sizes because default Insets cause 
>> html to be displayed off-center. 
>> 
>> Changes made to SwingUtilities.java layoutCompoundLabelImpl method to enable 
>> clipping if html does not fit, similar to regular text. AquaButtonUI.java 
>> now detects when html does not fit, and an implementation for alternate 
>> insets that are recursively tested for regular text inside 
>> layoutAndGetText() are now also being used for html content.
>> 
>> Created test (Bug8015854.java) with the same format as the test described on 
>> the issue. The button is of size 37x37 with an image of a red square sized 
>> 19x19. The test checks for red pixels on the edges of where the square image 
>> should be from the center of the button. The test fails with the non-changed 
>> jdk, but passes with the changes.
>
> DamonGuy has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Changed robot autodelay time and added wait after creating gui. Added try 
> finally block for frame disposal.

Changes requested by aivanov (Reviewer).

src/java.desktop/macosx/classes/com/apple/laf/AquaButtonUI.java line 313:

> 311:             // use zero insets for view since layout only handles text 
> calculations
> 312:             text = layoutAndGetText(g, b, aquaBorder, new
> 313:                     Insets(0,0,0,0), viewRect, iconRect, textRect);

Please do not break object instantiation: always keep `new` and class name on 
the same line.

test/jdk/javax/swing/JButton/HtmlButtonImageTest/HtmlButtonImageTest.java line 
67:

> 65:             } catch (ClassNotFoundException | InstantiationException | 
> IllegalAccessException e) {
> 66:                 throw new RuntimeException("Unsupported LookAndFeel: " + 
> e);
> 67:             }

You can let these exceptions propagate up and be thrown from `main` directly.

It was discussed in the comments that this bug is applicable to all 
Look-and-Feels. But the test is macOS- and Aqua-specific.

test/jdk/javax/swing/JButton/HtmlButtonImageTest/HtmlButtonImageTest.java line 
101:

> 99: 
> 100:     private static void createAndShowGUI()
> 101:     {

The opening brace should on the same line as the method declaration.

test/jdk/javax/swing/JButton/HtmlButtonImageTest/HtmlButtonImageTest.java line 
120:

> 118:     private static void setupCenterCoord() {
> 119:         // adjust coordinates to be the center of the button
> 120:         point = button.getLocationOnScreen();

`button` is a Swing component and must be accessed from EDT only.

test/jdk/javax/swing/JButton/HtmlButtonImageTest/HtmlButtonImageTest.java line 
127:

> 125:     private static boolean checkRedness(Color c) {
> 126:         // checks for redness since anti-aliasing causes edges to be not 
> exactly 255,0,0 rgb values
> 127:         if(c.getRed() > 250 && c.getBlue() < 10 && c.getGreen() < 10) {

The should be a space between `if` and the opening parenthesis.

test/jdk/javax/swing/JButton/HtmlButtonImageTest/HtmlButtonImageTest.java line 
141:

> 139:             System.out.println("-- Passed");
> 140:         }
> 141:     }

I suggest using variable arguments:
Suggestion:

    private static void testImageCentering(Color... colors) {
        // check if all colors at each edge of square are red
        for (Color c : colors) {
            if (!checkRedness(c)) {
                throw new RuntimeException("HTML image not centered in button");
            }
        }
       System.out.println("-- Passed");
    }

The call to this function remains the same. And you can easily add additional 
points to be checked if needed.

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

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

Reply via email to