JAL-3609 HiDPI scale setting done via system prop in getdown or halview.bin.Launcher
authorBen Soares <bsoares@dundee.ac.uk>
Fri, 15 May 2020 20:04:39 +0000 (21:04 +0100)
committerBen Soares <bsoares@dundee.ac.uk>
Fri, 15 May 2020 20:04:39 +0000 (21:04 +0100)
17 files changed:
getdown/lib/FJVL_VERSION
getdown/lib/JVL_VERSION
getdown/lib/getdown-core.jar
getdown/lib/getdown-launcher-local.jar
getdown/lib/getdown-launcher.jar
getdown/src/getdown/ant/pom.xml
getdown/src/getdown/core/pom.xml
getdown/src/getdown/core/src/main/java/com/threerings/getdown/data/Application.java
getdown/src/getdown/core/src/main/java/jalview/bin/HiDPISetting.java [new file with mode: 0644]
getdown/src/getdown/launcher/pom.xml
getdown/src/getdown/mvn_cmd
getdown/src/getdown/pom.xml
j11lib/getdown-core.jar
j8lib/getdown-core.jar
src/jalview/bin/HiDPISetting.java [new file with mode: 0644]
src/jalview/bin/Jalview.java
src/jalview/bin/Launcher.java

index e7a1de7..afcaa01 100644 (file)
@@ -1 +1 @@
-1.8.3-1.2.4_FJVL
+1.8.3-1.2.5_FJVL
index 756f4bd..61aa33c 100644 (file)
@@ -1 +1 @@
-1.8.3-1.2.4_JVL
+1.8.3-1.2.5_JVL
index 9c0f96e..b7239d9 100644 (file)
Binary files a/getdown/lib/getdown-core.jar and b/getdown/lib/getdown-core.jar differ
index cfa96f3..3c3c602 100644 (file)
Binary files a/getdown/lib/getdown-launcher-local.jar and b/getdown/lib/getdown-launcher-local.jar differ
index 2f8baa7..836e745 100644 (file)
Binary files a/getdown/lib/getdown-launcher.jar and b/getdown/lib/getdown-launcher.jar differ
index 8dcef42..9af441d 100644 (file)
@@ -4,7 +4,7 @@
   <parent>
     <groupId>com.threerings.getdown</groupId>
     <artifactId>getdown</artifactId>
-    <version>1.8.3-1.2.4_FJVL</version>
+    <version>1.8.3-1.2.5_FJVL</version>
   </parent>
 
   <artifactId>getdown-ant</artifactId>
index 2d0e89a..1563c23 100644 (file)
@@ -4,7 +4,7 @@
   <parent>
     <groupId>com.threerings.getdown</groupId>
     <artifactId>getdown</artifactId>
-    <version>1.8.3-1.2.4_FJVL</version>
+    <version>1.8.3-1.2.5_FJVL</version>
   </parent>
 
   <artifactId>getdown-core</artifactId>
index fd53c79..b11a380 100644 (file)
@@ -27,6 +27,7 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.zip.GZIPInputStream;
 
+import jalview.bin.HiDPISetting;
 import jalview.bin.MemorySetting;
 //import com.install4j.api.launcher.Variables;
 
@@ -1071,6 +1072,13 @@ public class Application
         args.add("-Dinstaller_template_version=" + System.getProperty("installer_template_version"));
         args.add("-Dlauncher_version=" + Build.version());
 
+        // set HiDPI property if wanted
+        String scalePropertyArg = HiDPISetting.getScalePropertyArg();
+        if (scalePropertyArg != null)
+        {
+          args.add(scalePropertyArg);
+        }
+
         // set the native library path if we have native resources
         // @TODO optional getdown.txt parameter to set addCurrentLibraryPath to true or false?
         ClassPath javaLibPath = PathBuilder.buildLibsPath(this, true);
diff --git a/getdown/src/getdown/core/src/main/java/jalview/bin/HiDPISetting.java b/getdown/src/getdown/core/src/main/java/jalview/bin/HiDPISetting.java
new file mode 100644 (file)
index 0000000..5e20d76
--- /dev/null
@@ -0,0 +1,48 @@
+package jalview.bin;
+
+import java.awt.Toolkit;
+
+public class HiDPISetting
+{
+  public static final int dpi;
+
+  public static final int scale;
+
+  private static final int hidpi = 110;
+
+  private static final String scaleProperty = "sun.java2d.uiScale";
+
+  private static final boolean isAMac = System.getProperty("os.name")
+          .indexOf("Mac") > -1;
+
+  private static final boolean isLinux = System.getProperty("os.name")
+          .toLowerCase().indexOf("linux") > -1;
+
+  private static final boolean isWindows = System.getProperty("os.name")
+          .toLowerCase().indexOf("windows") > -1;
+
+  static
+  {
+    dpi = Toolkit.getDefaultToolkit().getScreenResolution();
+    scale = dpi / hidpi + 1;
+    if (scale > 1 && isLinux)
+    {
+      System.out.println("DPI detected as " + dpi
+              + ". Scaling factor set to " + scale + ".");
+    }
+  }
+
+  public static String getScalePropertyArg()
+  {
+    // HiDPI setting. Just looking at Linux to start with. Test with Windows.
+    if (!isLinux)
+    {
+      return null;
+    }
+    if (scale > 1)
+    {
+      return "-D" + scaleProperty + "=" + scale;
+    }
+    return null;
+  }
+}
index ad87541..e8eb824 100644 (file)
@@ -4,7 +4,7 @@
   <parent>
     <groupId>com.threerings.getdown</groupId>
     <artifactId>getdown</artifactId>
-    <version>1.8.3-1.2.4_FJVL</version>
+    <version>1.8.3-1.2.5_FJVL</version>
   </parent>
 
   <artifactId>getdown-launcher</artifactId>
index 3f9b4a2..d10f7a8 100755 (executable)
@@ -3,7 +3,7 @@
 if [ x$JVLVERSION != x ]; then
   export VERSION=$JVLVERSION
 else
-  export VERSION=1.8.3-1.2.4_JVL
+  export VERSION=1.8.3-1.2.5_JVL
 fi
 
 if [ x${VERSION%_JVL} = x$VERSION ]; then
index 2ca4aa1..1109505 100644 (file)
@@ -10,7 +10,7 @@
   <groupId>com.threerings.getdown</groupId>
   <artifactId>getdown</artifactId>
   <packaging>pom</packaging>
-  <version>1.8.3-1.2.4_FJVL</version>
+  <version>1.8.3-1.2.5_FJVL</version>
 
   <name>getdown</name>
   <description>An application installer and updater.</description>
index 9c0f96e..b7239d9 100644 (file)
Binary files a/j11lib/getdown-core.jar and b/j11lib/getdown-core.jar differ
index 9c0f96e..b7239d9 100644 (file)
Binary files a/j8lib/getdown-core.jar and b/j8lib/getdown-core.jar differ
diff --git a/src/jalview/bin/HiDPISetting.java b/src/jalview/bin/HiDPISetting.java
new file mode 100644 (file)
index 0000000..5e20d76
--- /dev/null
@@ -0,0 +1,48 @@
+package jalview.bin;
+
+import java.awt.Toolkit;
+
+public class HiDPISetting
+{
+  public static final int dpi;
+
+  public static final int scale;
+
+  private static final int hidpi = 110;
+
+  private static final String scaleProperty = "sun.java2d.uiScale";
+
+  private static final boolean isAMac = System.getProperty("os.name")
+          .indexOf("Mac") > -1;
+
+  private static final boolean isLinux = System.getProperty("os.name")
+          .toLowerCase().indexOf("linux") > -1;
+
+  private static final boolean isWindows = System.getProperty("os.name")
+          .toLowerCase().indexOf("windows") > -1;
+
+  static
+  {
+    dpi = Toolkit.getDefaultToolkit().getScreenResolution();
+    scale = dpi / hidpi + 1;
+    if (scale > 1 && isLinux)
+    {
+      System.out.println("DPI detected as " + dpi
+              + ". Scaling factor set to " + scale + ".");
+    }
+  }
+
+  public static String getScalePropertyArg()
+  {
+    // HiDPI setting. Just looking at Linux to start with. Test with Windows.
+    if (!isLinux)
+    {
+      return null;
+    }
+    if (scale > 1)
+    {
+      return "-D" + scaleProperty + "=" + scale;
+    }
+    return null;
+  }
+}
index 8c9d391..a571ce9 100755 (executable)
  */
 package jalview.bin;
 
-import jalview.ext.so.SequenceOntology;
-import jalview.gui.AlignFrame;
-import jalview.gui.Desktop;
-import jalview.gui.PromptUserConfig;
-import jalview.io.AppletFormatAdapter;
-import jalview.io.BioJsHTMLOutput;
-import jalview.io.DataSourceType;
-import jalview.io.FileFormat;
-import jalview.io.FileFormatException;
-import jalview.io.FileFormatI;
-import jalview.io.FileLoader;
-import jalview.io.HtmlSvgOutput;
-import jalview.io.IdentifyFile;
-import jalview.io.NewickFile;
-import jalview.io.gff.SequenceOntologyFactory;
-import jalview.schemes.ColourSchemeI;
-import jalview.schemes.ColourSchemeProperty;
-import jalview.util.MessageManager;
-import jalview.util.Platform;
-import jalview.ws.jws2.Jws2Discoverer;
-
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileOutputStream;
@@ -68,6 +47,26 @@ import com.threerings.getdown.util.LaunchUtil;
 
 import groovy.lang.Binding;
 import groovy.util.GroovyScriptEngine;
+import jalview.ext.so.SequenceOntology;
+import jalview.gui.AlignFrame;
+import jalview.gui.Desktop;
+import jalview.gui.PromptUserConfig;
+import jalview.io.AppletFormatAdapter;
+import jalview.io.BioJsHTMLOutput;
+import jalview.io.DataSourceType;
+import jalview.io.FileFormat;
+import jalview.io.FileFormatException;
+import jalview.io.FileFormatI;
+import jalview.io.FileLoader;
+import jalview.io.HtmlSvgOutput;
+import jalview.io.IdentifyFile;
+import jalview.io.NewickFile;
+import jalview.io.gff.SequenceOntologyFactory;
+import jalview.schemes.ColourSchemeI;
+import jalview.schemes.ColourSchemeProperty;
+import jalview.util.MessageManager;
+import jalview.util.Platform;
+import jalview.ws.jws2.Jws2Discoverer;
 
 /**
  * Main class for Jalview Application <br>
@@ -183,7 +182,7 @@ public class Jalview
    * main class for Jalview application
    * 
    * @param args
-   *               open <em>filename</em>
+   *          open <em>filename</em>
    */
   public static void main(String[] args)
   {
@@ -198,22 +197,24 @@ public class Jalview
   {
     System.setSecurityManager(null);
     System.out
-            .println("Java version: "
-                    + System.getProperty("java.version"));
+            .println("Java version: " + System.getProperty("java.version"));
     System.out.println("Java Home: " + System.getProperty("java.home"));
     System.out.println(System.getProperty("os.arch") + " "
             + System.getProperty("os.name") + " "
             + System.getProperty("os.version"));
     String val = System.getProperty("sys.install4jVersion");
-    if (val != null) {
-    System.out.println("Install4j version: " + val);
+    if (val != null)
+    {
+      System.out.println("Install4j version: " + val);
     }
     val = System.getProperty("installer_template_version");
-    if (val != null) {
+    if (val != null)
+    {
       System.out.println("Install4j template version: " + val);
     }
     val = System.getProperty("launcher_version");
-    if (val != null) {
+    if (val != null)
+    {
       System.out.println("Launcher version: " + val);
     }
 
@@ -353,6 +354,7 @@ public class Jalview
 
     if (!headless)
     {
+
       desktop = new Desktop();
       desktop.setInBatchMode(true); // indicate we are starting up
 
@@ -836,10 +838,10 @@ public class Jalview
    * Locate the given string as a file and pass it to the groovy interpreter.
    * 
    * @param groovyscript
-   *                         the script to execute
+   *          the script to execute
    * @param jalviewContext
-   *                         the Jalview Desktop object passed in to the groovy
-   *                         binding as the 'Jalview' object.
+   *          the Jalview Desktop object passed in to the groovy binding as the
+   *          'Jalview' object.
    */
   private void executeGroovyScript(String groovyscript, AlignFrame af)
   {
@@ -968,8 +970,8 @@ public class Jalview
   }
 
   /**
-   * Quit method delegates to Desktop.quit - unless running in headless mode when
-   * it just ends the JVM
+   * Quit method delegates to Desktop.quit - unless running in headless mode
+   * when it just ends the JVM
    */
   public void quit()
   {
index fb1c5cd..5e6e48c 100644 (file)
@@ -49,8 +49,8 @@ public class Launcher
 
   /**
    * main method for jalview.bin.Launcher. This restarts the same JRE's JVM with
-   * the same arguments but with memory adjusted based on extracted -jvmmempc and
-   * -jvmmemmax application arguments. If on a Mac then extra dock:icon and
+   * the same arguments but with memory adjusted based on extracted -jvmmempc
+   * and -jvmmemmax application arguments. If on a Mac then extra dock:icon and
    * dock:name arguments are also set.
    * 
    * @param args
@@ -130,7 +130,7 @@ public class Launcher
     if (!memSet)
     {
       long maxMemLong = MemorySetting.getMemorySetting(jvmmemmax, jvmmempc);
-      
+
       if (maxMemLong > 0)
       {
         memSetting = "-Xmx" + Long.toString(maxMemLong);
@@ -153,6 +153,12 @@ public class Launcher
       }
     }
 
+    String scalePropertyArg = HiDPISetting.getScalePropertyArg();
+    if (scalePropertyArg != null)
+    {
+      command.add(scalePropertyArg);
+    }
+
     command.add(startClass);
     command.addAll(arguments);
 
@@ -176,7 +182,8 @@ public class Launcher
       if (e.getMessage().toLowerCase().contains("memory"))
       {
         System.out.println("Caught a memory exception: " + e.getMessage());
-        // Probably the "Cannot allocate memory" error, try without the memory setting
+        // Probably the "Cannot allocate memory" error, try without the memory
+        // setting
         ArrayList<String> commandNoMem = new ArrayList<>();
         for (int i = 0; i < command.size(); i++)
         {