RFR: 8302173: Button border overlaps with button icon on macOS system LaF

Harshitha Onkar honkar at openjdk.org
Tue Feb 14 02:31:52 UTC 2023


On Sat, 11 Feb 2023 00:23:05 GMT, Damon Nguyen <dnguyen at openjdk.org> wrote:

> Previous fix to HTML in AquaButtonUI fixed spacing issue for HTML images in a JButton in Aqua L&F. The new issue comes from having text inside the HTML as the button's text. If an icon is used, this icon exceeds the bounds of the button and overlaps the border.
> 
> Added additional logic to check if HTML contains an img. If so, apply the previous fix. Otherwise, the original implementation for Aqua's JButton HTML layout works correctly, so use this behavior.
> 
> Added a test based on the provided test in the bug report. Automated the test using a BufferedImage and changed the icon color to RED. Tested with multiple runs on Aqua L&F, and the test passes with the update where it fails without the update.

Changes requested by honkar (Committer).

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

> 76: import com.apple.laf.AquaUtils.RecyclableSingleton;
> 77: import com.apple.laf.AquaUtils.RecyclableSingletonFromDefaultConstructor;
> 78: import sun.swing.SwingUtilities2;

Copyright year needs to be updated for AquaButtonUI.

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

> 341:         final String text;
> 342:         final View v = (View)c.getClientProperty(BasicHTML.propertyKey);
> 343:         if (v != null && ((AbstractButton) c).getText().contains("<img ")) {

You might want to test a combination of HTML image + icon added to JButton, to make sure the fix works correctly under different combinations.

Suggestion: Does having `((AbstractButton) c).getIcon() == null` make it more robust than checking for html tag patterns ?

test/jdk/javax/swing/JButton/HtmlButtonWithTextAndIcon.java line 50:

> 48: import static java.awt.image.BufferedImage.TYPE_INT_ARGB;
> 49: 
> 50: public class HtmlButtonWithTextAndIcon {

Would it be a good idea to combine `HtmlButtonWithTextAndIcon`  & `HtmlButtonImageTest` into one comprehensive test, since they are similar? This would also make sure that all the cases related to JButton's HTML ImageView are available at one place.

test/jdk/javax/swing/JButton/HtmlButtonWithTextAndIcon.java line 57:

> 55:     private static final int BUTTON_WIDTH = 59;
> 56:     private static final int BUTTON_HEIGHT = 28;
> 57:     private static final int ICON_WIDTH = 16;

To make testing easier with different icon & button sizes, it is better to have button width and height as a factor of icon size (1.5 times or greater) as mentioned here [JDK-8015854](https://bugs.openjdk.org/browse/JDK-8015854).

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

PR: https://git.openjdk.org/jdk/pull/12520



More information about the client-libs-dev mailing list