From e8306a0a0b478c312702e7e6ccaceddf71279bc7 Mon Sep 17 00:00:00 2001 From: nik Date: Fri, 28 Sep 2018 19:51:22 +0300 Subject: [PATCH] ui: use old 128x128 png icon for application window on Linux if svg isn't specified for compatibility (IDEA-199662) --- .../application/ex/ApplicationInfoEx.java | 3 ++ .../application/impl/ApplicationInfoImpl.java | 8 ++++ .../src/com/intellij/ui/AppUIUtil.java | 38 +++++++++++++------ 3 files changed, 37 insertions(+), 12 deletions(-) diff --git a/platform/core-impl/src/com/intellij/openapi/application/ex/ApplicationInfoEx.java b/platform/core-impl/src/com/intellij/openapi/application/ex/ApplicationInfoEx.java index bc813e9824f2..605ad02274e8 100644 --- a/platform/core-impl/src/com/intellij/openapi/application/ex/ApplicationInfoEx.java +++ b/platform/core-impl/src/com/intellij/openapi/application/ex/ApplicationInfoEx.java @@ -45,6 +45,9 @@ public abstract class ApplicationInfoEx extends ApplicationInfo { public abstract String getSmallIconUrl(); + @Nullable + public abstract String getBigIconUrl(); + @Nullable public abstract String getApplicationSvgIconUrl(); diff --git a/platform/core-impl/src/com/intellij/openapi/application/impl/ApplicationInfoImpl.java b/platform/core-impl/src/com/intellij/openapi/application/impl/ApplicationInfoImpl.java index bd172000f3f9..03a674ab6d17 100644 --- a/platform/core-impl/src/com/intellij/openapi/application/impl/ApplicationInfoImpl.java +++ b/platform/core-impl/src/com/intellij/openapi/application/impl/ApplicationInfoImpl.java @@ -61,6 +61,7 @@ public class ApplicationInfoImpl extends ApplicationInfoEx { @SuppressWarnings("UseJBColor") private Color mySplashTextColor = new Color(0, 35, 135); // idea blue private String myIconUrl = "/icon.png"; private String mySmallIconUrl = "/icon_small.png"; + private String myBigIconUrl; private String mySvgIconUrl; private String mySvgEapIconUrl; private String myToolWindowIconUrl = "/toolwindows/toolWindowProject.png"; @@ -383,6 +384,12 @@ public class ApplicationInfoImpl extends ApplicationInfoEx { return mySmallIconUrl; } + @Override + @Nullable + public String getBigIconUrl() { + return myBigIconUrl; + } + @Override @Nullable public String getApplicationSvgIconUrl() { @@ -746,6 +753,7 @@ public class ApplicationInfoImpl extends ApplicationInfoEx { if (iconElement != null) { myIconUrl = iconElement.getAttributeValue(ATTRIBUTE_SIZE32); mySmallIconUrl = iconElement.getAttributeValue(ATTRIBUTE_SIZE16); + myBigIconUrl = iconElement.getAttributeValue(ATTRIBUTE_SIZE128, (String)null); final String toolWindowIcon = iconElement.getAttributeValue(ATTRIBUTE_SIZE12); if (toolWindowIcon != null) { myToolWindowIconUrl = toolWindowIcon; diff --git a/platform/platform-impl/src/com/intellij/ui/AppUIUtil.java b/platform/platform-impl/src/com/intellij/ui/AppUIUtil.java index 50059f5c30d4..9bf3e43ad7cf 100644 --- a/platform/platform-impl/src/com/intellij/ui/AppUIUtil.java +++ b/platform/platform-impl/src/com/intellij/ui/AppUIUtil.java @@ -80,18 +80,9 @@ public class AppUIUtil { List images = ContainerUtil.newArrayListWithCapacity(3); if (SystemInfo.isUnix) { - String svgIconUrl = appInfo.getApplicationSvgIconUrl(); - if (svgIconUrl != null) { - URL url = AppUIUtil.class.getResource(svgIconUrl); - try { - Image svgIcon = SVGLoader.load(url, AppUIUtil.class.getResourceAsStream(svgIconUrl), JBUI.pixScale(window) * 128, JBUI.pixScale(window) * 128); - if (svgIcon != null) { - images.add(svgIcon); - } - } - catch (IOException e) { - LOG.info("Cannot load svg application icon from " + svgIconUrl, e); - } + Image svgIcon = loadApplicationIcon(window, 128, appInfo.getBigIconUrl()); + if (svgIcon != null) { + images.add(svgIcon); } } @@ -116,6 +107,29 @@ public class AppUIUtil { } } + @Nullable + private static Image loadApplicationIcon(@NotNull Window window, int size, @Nullable String fallbackImageResourcePath) { + String svgIconUrl = ApplicationInfoImpl.getShadowInstance().getApplicationSvgIconUrl(); + if (svgIconUrl != null) { + URL url = AppUIUtil.class.getResource(svgIconUrl); + try { + return + SVGLoader.load(url, AppUIUtil.class.getResourceAsStream(svgIconUrl), JBUI.pixScale(window) * size, JBUI.pixScale(window) * size); + } + catch (IOException e) { + LOG.info("Cannot load svg application icon from " + svgIconUrl, e); + } + } + else if (fallbackImageResourcePath != null) { + Image image = ImageLoader.loadFromResource(fallbackImageResourcePath); + if (image instanceof JBHiDPIScaledImage) { + return ((JBHiDPIScaledImage)image).getDelegate(); + } + return image; + } + return null; + } + public static void invokeLaterIfProjectAlive(@NotNull Project project, @NotNull Runnable runnable) { Application application = ApplicationManager.getApplication(); if (application.isDispatchThread()) {