From 000a166244b3e55f2c3e093120be45f601c7fc07 Mon Sep 17 00:00:00 2001 From: Juuxel Date: Thu, 18 Mar 2021 21:41:02 +0200 Subject: Use FlatLaf's own DPI scaling instead of swing-dpi --- .../java/cuchaz/enigma/gui/config/LookAndFeel.java | 26 ++++++++++++++++------ .../java/cuchaz/enigma/gui/util/ScaleUtil.java | 6 ++++- 2 files changed, 24 insertions(+), 8 deletions(-) (limited to 'enigma-swing') diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/config/LookAndFeel.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/config/LookAndFeel.java index a9b94655..3560b3c1 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/config/LookAndFeel.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/config/LookAndFeel.java @@ -11,20 +11,32 @@ import javax.swing.plaf.metal.MetalLookAndFeel; import com.formdev.flatlaf.FlatDarculaLaf; import com.formdev.flatlaf.FlatLightLaf; import com.formdev.flatlaf.FlatSystemProperties; +import cuchaz.enigma.gui.util.ScaleUtil; public enum LookAndFeel { - DEFAULT, - DARCULA, - METAL, - SYSTEM, - NONE; + DEFAULT(false), + DARCULA(false), + METAL(true), + SYSTEM(true), + NONE(true); // the "JVM default" look and feel, get it at the beginning and store it so we can set it later private static final javax.swing.LookAndFeel NONE_LAF = UIManager.getLookAndFeel(); + private final boolean needsScaling; + + LookAndFeel(boolean needsScaling) { + this.needsScaling = needsScaling; + } + + public boolean needsScaling() { + // FlatLaf-based LaFs do their own scaling so we don't have to do it. + // Running swing-dpi for FlatLaf actually breaks fonts, so we let it scale the GUI. + return needsScaling; + } public void setGlobalLAF() { - // Disable FlatLaf's UI scaling, we do it on our own - System.setProperty(FlatSystemProperties.UI_SCALE_ENABLED, "false"); + // Configure FlatLaf's UI scale to be our scale factor. + System.setProperty(FlatSystemProperties.UI_SCALE, Float.toString(ScaleUtil.getScaleFactor())); try { switch (this) { diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/util/ScaleUtil.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/ScaleUtil.java index 47799fad..78de07dc 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/util/ScaleUtil.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/util/ScaleUtil.java @@ -95,7 +95,11 @@ public class ScaleUtil { public static void applyScaling() { float scale = getScaleFactor(); - UiDefaultsScaler.updateAndApplyGlobalScaling((int) (100 * scale), true); + + if (UiConfig.getLookAndFeel().needsScaling()) { + UiDefaultsScaler.updateAndApplyGlobalScaling((int) (100 * scale), true); + } + try { Field defaultFontField = DefaultSyntaxKit.class.getDeclaredField("DEFAULT_FONT"); defaultFontField.setAccessible(true); -- cgit v1.2.3