From d98508ff35f9e80ca9b05452ab03ba3deb83f22d Mon Sep 17 00:00:00 2001 From: Anton Tarasov Date: Thu, 8 Dec 2016 17:02:33 +0300 Subject: [PATCH] IDEA-164566 [address pre-b606 macOS JBSDK; fix a typo] --- .../util/src/com/intellij/util/ui/JBUI.java | 3 +++ .../util/src/com/intellij/util/ui/UIUtil.java | 23 +++++++++++++++---- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/platform/util/src/com/intellij/util/ui/JBUI.java b/platform/util/src/com/intellij/util/ui/JBUI.java index ae6f758a7a27..b125ed655e17 100644 --- a/platform/util/src/com/intellij/util/ui/JBUI.java +++ b/platform/util/src/com/intellij/util/ui/JBUI.java @@ -224,6 +224,9 @@ public class JBUI { */ public static float sysScale(GraphicsDevice gd) { if (UIUtil.isJDKManagedHiDPI() && gd != null) { + if (SystemInfo.isMac && UIUtil.isJDKManagedHiDPI_earlierVersion()) { + return UIUtil.DetectRetinaKit.isOracleMacRetinaDevice(gd) ? 2f : 1f; + } return (float)gd.getDefaultConfiguration().getDefaultTransform().getScaleX(); } return sysScale(); diff --git a/platform/util/src/com/intellij/util/ui/UIUtil.java b/platform/util/src/com/intellij/util/ui/UIUtil.java index 6730a4d6e94c..086255686f96 100644 --- a/platform/util/src/com/intellij/util/ui/UIUtil.java +++ b/platform/util/src/com/intellij/util/ui/UIUtil.java @@ -356,6 +356,7 @@ public class UIUtil { } private static Boolean jdkManagedHiDPI; + private static boolean jdkManagedHiDPI_earlierVersion; /** * Returns whether the JDK-managed HiDPI mode is enabled. @@ -365,21 +366,33 @@ public class UIUtil { if (jdkManagedHiDPI != null) { return jdkManagedHiDPI; } - if (SystemInfo.isMac) { - return jdkManagedHiDPI = (SystemInfo.isAppleJvm ? false : true); - } jdkManagedHiDPI = false; + jdkManagedHiDPI_earlierVersion = true; try { GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); if (ge instanceof SunGraphicsEnvironment) { Method m = ReflectionUtil.getDeclaredMethod(SunGraphicsEnvironment.class, "isUIScaleOn"); jdkManagedHiDPI = (Boolean)m.invoke(ge); + jdkManagedHiDPI_earlierVersion = false; } } catch (Throwable ignore) { } + if (SystemInfo.isMac) { + return jdkManagedHiDPI = (SystemInfo.isAppleJvm ? false : true); + } return jdkManagedHiDPI; } + /** + * Indicates earlier JBSDK version, not containing HiDPI changes. + * On macOS that JBSDK supports jdkManagedHiDPI, but it's not capable to provide device scale + * via GraphicsDevice transform matrix (the scale should be retrieved via DetectRetinaKit). + */ + static boolean isJDKManagedHiDPI_earlierVersion() { + isJDKManagedHiDPI(); + return jdkManagedHiDPI_earlierVersion; + } + /** * Utility class for retina routine */ @@ -1799,8 +1812,8 @@ public class UIUtil { } g.setColor(SystemInfo.isMac && isUnderIntelliJLaF() ? Gray.xC9 : Gray.x00.withAlpha(toolWindow ? 90 : 50)); if (drawTopLine) g.drawLine(x, 0, width, 0); - if (drawBottomLine) g.drawLine(x, (int)(height - (isJDKManagedHiDPIScreen() ? 1 : JBUI.sysScale())), - width, height - (isJDKManagedHiDPIScreen() ? 1 : 2)); + if (drawBottomLine) g.drawLine(x, height - (isJDKManagedHiDPIScreen((Graphics2D)g) ? 1 : 2), + width, height - (isJDKManagedHiDPIScreen((Graphics2D)g) ? 1 : 2)); if (SystemInfo.isMac && isUnderIntelliJLaF()) { g.setColor(Gray.xC9);