From 3bf473593f47a5613ee81f031aff96087fba7588 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Mon, 20 Jul 2015 21:06:56 +0200 Subject: [PATCH] make JBUI to support floating scale factor --- .../util/src/com/intellij/util/ui/JBUI.java | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/platform/util/src/com/intellij/util/ui/JBUI.java b/platform/util/src/com/intellij/util/ui/JBUI.java index c0aea56e2448..d2f1c4b6751b 100644 --- a/platform/util/src/com/intellij/util/ui/JBUI.java +++ b/platform/util/src/com/intellij/util/ui/JBUI.java @@ -29,6 +29,7 @@ import java.awt.*; */ public class JBUI { private static boolean IS_HIDPI = calculateHiDPI(); + private static float SCALE_FACTOR = calculateScaleFactor(); private static boolean calculateHiDPI() { if (SystemInfo.isMac) { @@ -50,6 +51,24 @@ public class JBUI { return false; } + private static float calculateScaleFactor() { + if (SystemInfo.isMac) { + return 1.0f; + } + + if (SystemProperties.has("hidpi") && !SystemProperties.is("hidpi")) { + return 1.0f; + } + + final int dpi = getSystemDPI(); + if (dpi <= 96) return 1.0f; + if (dpi <= 120) return 1.25f; + if (dpi <= 144) return 1.5f; + if (dpi <= 168) return 1.75f; + + return 2.0f; + } + private static int getSystemDPI() { try { return Toolkit.getDefaultToolkit().getScreenResolution(); @@ -59,7 +78,7 @@ public class JBUI { } public static int scale(int i) { - return isHiDPI() ? 2 * i : i; + return (int)(SCALE_FACTOR * i); } public static JBDimension size(int width, int height) { @@ -115,7 +134,7 @@ public class JBUI { } public static float scale(float f) { - return f * scale(1); + return f * SCALE_FACTOR; } public static JBInsets insets(Insets insets) { @@ -123,7 +142,7 @@ public class JBUI { } public static boolean isHiDPI() { - return IS_HIDPI; + return SCALE_FACTOR > 1.0f; } public static class Fonts {