diff --git a/packaging/Linux/ATCS/ATCS.cmd b/packaging/Linux/ATCS/ATCS.cmd index 2981e51..1bfb88d 100644 --- a/packaging/Linux/ATCS/ATCS.cmd +++ b/packaging/Linux/ATCS/ATCS.cmd @@ -4,7 +4,7 @@ set "ATCS_DIR=%~dp0" set "MAX_MEM=512M" set "CP=%ATCS_DIR%lib\*" set "JAVA=javaw.exe" -set "JAVA_OPTS=" +set "JAVA_OPTS=-DFONT_SCALE=1.0" set "ENV_FILE=%ATCS_DIR%ATCS.env.bat" set "MAIN_CLASS=com.gpl.rpg.atcontentstudio.ATContentStudio" diff --git a/packaging/Linux/ATCS/ATCS.sh b/packaging/Linux/ATCS/ATCS.sh index 2d21f4d..3e158b1 100644 --- a/packaging/Linux/ATCS/ATCS.sh +++ b/packaging/Linux/ATCS/ATCS.sh @@ -3,7 +3,7 @@ ATCS_DIR=$(dirname $(readlink -f "$0" || greadlink -f "$0" || stat -f "$0")) MAX_MEM=512M CP=$(find ${ATCS_DIR}/lib/ -name '*.jar' | paste -sd: -) JAVA=java -JAVA_OPTS= +JAVA_OPTS=-DFONT_SCALE=1.0 ENV_FILE=${ATCS_DIR}/ATCS.env MAIN_CLASS=com.gpl.rpg.atcontentstudio.ATContentStudio diff --git a/packaging/Windows/ATCS.cmd b/packaging/Windows/ATCS.cmd index 2981e51..1bfb88d 100644 --- a/packaging/Windows/ATCS.cmd +++ b/packaging/Windows/ATCS.cmd @@ -4,7 +4,7 @@ set "ATCS_DIR=%~dp0" set "MAX_MEM=512M" set "CP=%ATCS_DIR%lib\*" set "JAVA=javaw.exe" -set "JAVA_OPTS=" +set "JAVA_OPTS=-DFONT_SCALE=1.0" set "ENV_FILE=%ATCS_DIR%ATCS.env.bat" set "MAIN_CLASS=com.gpl.rpg.atcontentstudio.ATContentStudio" diff --git a/src/com/gpl/rpg/atcontentstudio/ATContentStudio.java b/src/com/gpl/rpg/atcontentstudio/ATContentStudio.java index be1b359..3d7f868 100644 --- a/src/com/gpl/rpg/atcontentstudio/ATContentStudio.java +++ b/src/com/gpl/rpg/atcontentstudio/ATContentStudio.java @@ -14,18 +14,23 @@ import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URISyntaxException; import java.net.URL; +import java.util.Enumeration; +import java.util.HashMap; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JEditorPane; import javax.swing.JLabel; import javax.swing.JOptionPane; +import javax.swing.UIDefaults; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; +import javax.swing.plaf.FontUIResource; import com.gpl.rpg.atcontentstudio.model.Workspace; import com.gpl.rpg.atcontentstudio.ui.StudioFrame; @@ -42,6 +47,8 @@ public class ATContentStudio { public static final String CHECK_UPDATE_URL = "https://andorstrail.com/static/ATCS_latest"; public static final String DOWNLOAD_URL = "https://andorstrail.com/viewtopic.php?f=6&t=4806"; + + public static final String FONT_SCALE_ENV_VAR_NAME = "FONT_SCALE"; public static boolean STARTED = false; public static StudioFrame frame = null; @@ -69,6 +76,8 @@ public class ATContentStudio { } catch (UnsupportedLookAndFeelException e) { e.printStackTrace(); } + + scaleUIFont(); //Need to keep a strong reference to it, to avoid garbage collection that'll reset this setting. Logger l = Logger.getLogger(ExpressionParser.class.getName()); @@ -178,4 +187,38 @@ public class ATContentStudio { } } } + + public static void scaleUIFont() { + String fontScaling = System.getProperty(FONT_SCALE_ENV_VAR_NAME); + Float fontScale = null; + if (fontScaling != null) { + try { + fontScale = Float.parseFloat(fontScaling); + } catch (NumberFormatException e) { + System.err.println("Failed to parse font scaling parameter. Using default."); + e.printStackTrace(); + } + if (fontScale != null) { + System.out.println("Scaling fonts to "+fontScale); + UIDefaults defaults = UIManager.getLookAndFeelDefaults(); + Map newDefaults = new HashMap(); + for (Enumeration e = defaults.keys(); e.hasMoreElements();) { + Object key = e.nextElement(); + Object value = defaults.get(key); + if (value instanceof Font) { + Font font = (Font) value; + int newSize = (int)(font.getSize() * fontScale); + if (value instanceof FontUIResource) { + newDefaults.put(key, new FontUIResource(font.getName(), font.getStyle(), newSize)); + } else { + newDefaults.put(key, new Font(font.getName(), font.getStyle(), newSize)); + } + } + } + for (Object key : newDefaults.keySet()) { + defaults.put(key, newDefaults.get(key)); + } + } + } + } } diff --git a/src/com/gpl/rpg/atcontentstudio/ui/StudioFrame.java b/src/com/gpl/rpg/atcontentstudio/ui/StudioFrame.java index 02d2c70..f194085 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/StudioFrame.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/StudioFrame.java @@ -165,6 +165,7 @@ public class StudioFrame extends JFrame { public void actionPerformed(ActionEvent e) { try { UIManager.setLookAndFeel(i.getClassName()); + ATContentStudio.scaleUIFont(); SwingUtilities.updateComponentTreeUI(ATContentStudio.frame); ConfigCache.setFavoriteLaFClassName(i.getClassName()); } catch (ClassNotFoundException e1) {