package com.jediterm.terminal.ui; import com.jediterm.terminal.Util; import java.awt.*; import java.lang.reflect.Field; /** * @author traff */ public class UIUtil { public static final String OS_NAME = System.getProperty("os.name"); public static final String OS_VERSION = System.getProperty("os.version").toLowerCase(); protected static final String _OS_NAME = OS_NAME.toLowerCase(); public static final boolean isWindows = _OS_NAME.startsWith("windows"); public static final boolean isOS2 = _OS_NAME.startsWith("os/2") || _OS_NAME.startsWith("os2"); public static final boolean isMac = _OS_NAME.startsWith("mac"); public static final boolean isLinux = _OS_NAME.startsWith("linux"); public static final boolean isUnix = !isWindows && !isOS2; private static final boolean IS_ORACLE_JVM = isOracleJvm(); public static final String JAVA_RUNTIME_VERSION = System.getProperty("java.runtime.version"); public static boolean isRetina() { if (isJavaVersionAtLeast("1.7.0_40") && IS_ORACLE_JVM) { GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment(); final GraphicsDevice device = env.getDefaultScreenDevice(); try { Field field = device.getClass().getDeclaredField("scale"); if (field != null) { field.setAccessible(true); Object scale = field.get(device); if (scale instanceof Integer && ((Integer)scale).intValue() == 2) { return true; } } } catch (Exception ignore) { } } final Float scaleFactor = (Float)Toolkit.getDefaultToolkit().getDesktopProperty("apple.awt.contentScaleFactor"); if (scaleFactor != null && scaleFactor.intValue() == 2) { return true; } return false; } private static boolean isOracleJvm() { final String vendor = getJavaVmVendor(); return vendor != null && Util.containsIgnoreCase(vendor, "Oracle"); } public static String getJavaVmVendor() { return System.getProperty("java.vm.vendor"); } public static boolean isJavaVersionAtLeast(String v) { return Util.compareVersionNumbers(JAVA_RUNTIME_VERSION, v) >= 0; } }