diff --git a/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuItemLayoutHelper.java b/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuItemLayoutHelper.java index 6b890c786fd..4ca139a709d 100644 --- a/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuItemLayoutHelper.java +++ b/jdk/src/share/classes/javax/swing/plaf/synth/SynthMenuItemLayoutHelper.java @@ -136,7 +136,7 @@ class SynthMenuItemLayoutHelper extends MenuItemLayoutHelper { // accRect if (!getAccText().equals("")) { - getAccSize().setWidth(accGu.computeStringWidth(getAccContext(), + getAccSize().setWidth(accGu.computeStringWidth(getAccContext(), getAccFontMetrics().getFont(), getAccFontMetrics(), getAccText())); getAccSize().setHeight(getAccFontMetrics().getHeight()); @@ -195,6 +195,7 @@ class SynthMenuItemLayoutHelper extends MenuItemLayoutHelper { getHorizontalAlignment(), getVerticalAlignment(), getHorizontalTextPosition(), getVerticalTextPosition(), getViewRect(), iconRect, textRect, getGap()); + textRect.width += getLeftTextExtraWidth() + getRightTextExtraWidth(); Rectangle labelRect = iconRect.union(textRect); getLabelSize().setHeight(labelRect.height); getLabelSize().setWidth(labelRect.width); diff --git a/jdk/src/share/classes/sun/swing/MenuItemLayoutHelper.java b/jdk/src/share/classes/sun/swing/MenuItemLayoutHelper.java index b1313e43125..109d0c4022c 100644 --- a/jdk/src/share/classes/sun/swing/MenuItemLayoutHelper.java +++ b/jdk/src/share/classes/sun/swing/MenuItemLayoutHelper.java @@ -83,6 +83,9 @@ public class MenuItemLayoutHelper { private int afterCheckIconGap; private int minTextOffset; + private int leftTextExtraWidth; + private int rightTextExtraWidth; + private Rectangle viewRect; private RectSize iconSize; @@ -143,6 +146,7 @@ public class MenuItemLayoutHelper { this.checkSize = new RectSize(); this.arrowSize = new RectSize(); this.labelSize = new RectSize(); + calcExtraWidths(); calcWidthsAndHeights(); setOriginalWidths(); calcMaxWidths(); @@ -151,6 +155,29 @@ public class MenuItemLayoutHelper { calcMaxTextOffset(viewRect); } + private void calcExtraWidths() { + leftTextExtraWidth = getLeftExtraWidth(text); + rightTextExtraWidth = getRightExtraWidth(text); + } + + private int getLeftExtraWidth(String str) { + int lsb = SwingUtilities2.getLeftSideBearing(mi, fm, str); + if (lsb < 0) { + return -lsb; + } else { + return 0; + } + } + + private int getRightExtraWidth(String str) { + int rsb = SwingUtilities2.getRightSideBearing(mi, fm, str); + if (rsb > 0) { + return rsb; + } else { + return 0; + } + } + private void setOriginalWidths() { iconSize.origWidth = iconSize.width; textSize.origWidth = textSize.width; @@ -286,6 +313,7 @@ public class MenuItemLayoutHelper { verticalAlignment, horizontalAlignment, verticalTextPosition, horizontalTextPosition, viewRect, iconRect, textRect, gap); + textRect.width += leftTextExtraWidth + rightTextExtraWidth; Rectangle labelRect = iconRect.union(textRect); labelSize.height = labelRect.height; labelSize.width = labelRect.width; @@ -727,7 +755,7 @@ public class MenuItemLayoutHelper { } } - /** + /** * Sets Y coordinates of text and icon * taking into account the vertical alignment */ @@ -1089,6 +1117,14 @@ public class MenuItemLayoutHelper { this.labelSize = labelSize; } + public int getLeftTextExtraWidth() { + return leftTextExtraWidth; + } + + public int getRightTextExtraWidth() { + return rightTextExtraWidth; + } + /** * Returns false if the component is a JMenu and it is a top * level menu (on the menubar).