diff --git a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionMenuItem.java b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionMenuItem.java index 134fdc21ee07..d3fb034d8f16 100644 --- a/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionMenuItem.java +++ b/platform/platform-impl/src/com/intellij/openapi/actionSystem/impl/ActionMenuItem.java @@ -247,6 +247,17 @@ public class ActionMenuItem extends JBCheckBoxMenuItem { } } + @Override + public void setIcon(Icon icon) { + if (SystemInfo.isMacSystemMenu && ActionPlaces.MAIN_MENU.equals(myPlace)) { + if (icon instanceof IconLoader.LazyIcon) { + // [tav] JDK can't paint correctly our HiDPI icons at the system menu bar + icon = ((IconLoader.LazyIcon)icon).inNormalScale(false); + } + } + super.setIcon(icon); + } + public boolean isToggleable() { return myToggleable; } diff --git a/platform/util/src/com/intellij/openapi/util/IconLoader.java b/platform/util/src/com/intellij/openapi/util/IconLoader.java index 9b057c4b6e7f..7f12fd1424c9 100644 --- a/platform/util/src/com/intellij/openapi/util/IconLoader.java +++ b/platform/util/src/com/intellij/openapi/util/IconLoader.java @@ -573,6 +573,19 @@ public final class IconLoader { } protected abstract Icon compute(); + + public Icon inNormalScale(boolean isRetina) { + Icon icon = getOrComputeIcon(); + if (icon != null) { + if (icon instanceof CachedImageIcon) { + Image img = ((CachedImageIcon)icon).myScaledIconsCache.getOrigImage(isRetina); + if (img != null) { + icon = new ImageIcon(img); + } + } + } + return icon; + } } private static class LabelHolder {