JAL-3609 JAL-3775 Refactoring a bit of jalview.bin.HiDPISetting so screen display...
authorBen Soares <b.soares@dundee.ac.uk>
Tue, 1 Dec 2020 14:34:06 +0000 (14:34 +0000)
committerBen Soares <b.soares@dundee.ac.uk>
Tue, 1 Dec 2020 14:34:06 +0000 (14:34 +0000)
src/jalview/bin/HiDPISetting.java
src/jalview/bin/ScreenInfo.java [new file with mode: 0644]

index 497900f..d6d440a 100644 (file)
@@ -1,7 +1,6 @@
 package jalview.bin;
 
 import java.awt.HeadlessException;
-import java.awt.Toolkit;
 
 public class HiDPISetting
 {
@@ -11,7 +10,7 @@ public class HiDPISetting
 
   private static final int bigScreenThreshold = 1400;
 
-  private static final String scalePropertyName = "sun.java2d.uiScale";
+  public static final String scalePropertyName = "sun.java2d.uiScale";
 
   private static final boolean isLinux;
 
@@ -39,6 +38,8 @@ public class HiDPISetting
 
   private static boolean allowScalePropertyArg = false;
 
+  private static ScreenInfo screenInfo = new ScreenInfo();
+
   static
   {
     String system = System.getProperty("os.name") == null ? null
@@ -113,9 +114,10 @@ public class HiDPISetting
     // and screen resolution (more trustworthy)
 
     // get screen dpi
+    screenInfo = getScreenInfo();
     try
     {
-      dpi = Toolkit.getDefaultToolkit().getScreenResolution();
+      dpi = screenInfo.getScreenResolution();
     } catch (HeadlessException e)
     {
       System.err.println("Cannot get screen resolution: " + e.getMessage());
@@ -124,8 +126,8 @@ public class HiDPISetting
     // try and get screen size height and width
     try
     {
-      int height = Toolkit.getDefaultToolkit().getScreenSize().height;
-      int width = Toolkit.getDefaultToolkit().getScreenSize().width;
+      int height = screenInfo.getScreenHeight();
+      int width = screenInfo.getScreenWidth();
       // using mindimension in case of portrait screens
       mindimension = Math.min(height, width);
     } catch (HeadlessException e)
@@ -170,11 +172,41 @@ public class HiDPISetting
     doneInit = true;
   }
 
+  public static String getScalePropertyArg(int s)
+  {
+    return "-D" + scalePropertyName + "=" + String.valueOf(s);
+  }
+
   public static String getScalePropertyArg()
   {
     init();
     // HiDPI setting. Just looking at Linux to start with. Test with Windows.
-    return allowScalePropertyArg ? "-D" + scalePropertyName + "=" + scale
-            : null;
+    return allowScalePropertyArg ? getScalePropertyArg(scale) : null;
+  }
+
+  public static void clear()
+  {
+    setHiDPI = false;
+    setHiDPIScale = 0;
+    dpi = 0;
+    mindimension = 0;
+    width = 0;
+    scale = 0;
+    doneInit = false;
+    allowScalePropertyArg = false;
+  }
+
+  public static void setScreenInfo(ScreenInfo si)
+  {
+    screenInfo = si;
+  }
+
+  public static ScreenInfo getScreenInfo()
+  {
+    if (screenInfo == null)
+    {
+      screenInfo = new ScreenInfo();
+    }
+    return screenInfo;
   }
 }
diff --git a/src/jalview/bin/ScreenInfo.java b/src/jalview/bin/ScreenInfo.java
new file mode 100644 (file)
index 0000000..899bf94
--- /dev/null
@@ -0,0 +1,21 @@
+package jalview.bin;
+
+import java.awt.Toolkit;
+
+public class ScreenInfo
+{
+  public int getScreenResolution()
+  {
+    return Toolkit.getDefaultToolkit().getScreenResolution();
+  }
+
+  public int getScreenHeight()
+  {
+    return (int) Toolkit.getDefaultToolkit().getScreenSize().getHeight();
+  }
+
+  public int getScreenWidth()
+  {
+    return (int) Toolkit.getDefaultToolkit().getScreenSize().getWidth();
+  }
+}