From a4246b6166b45ac79c87c42d2a56bc7f95205a62 Mon Sep 17 00:00:00 2001 From: Juuxel Date: Mon, 15 Mar 2021 13:36:34 +0200 Subject: Migrate to FlatLaf Fixes #355. - Replaces the Darcula look and feel with FlatLaf Darcula, which does not have the same rendering bugs with CJK characters (at least on Windows 10). - Replaces Metal with FlatLaf Light as the default look and feel. Metal is provided as a new, separate theme option. --- .../src/main/java/cuchaz/enigma/gui/config/LookAndFeel.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'enigma-swing/src/main/java') 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 1c70d439..d1d3e0df 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 @@ -8,16 +8,18 @@ import javax.swing.JPanel; import javax.swing.UIManager; import javax.swing.plaf.metal.MetalLookAndFeel; -import com.bulenkov.darcula.DarculaLaf; +import com.formdev.flatlaf.FlatDarculaLaf; +import com.formdev.flatlaf.FlatLightLaf; public enum LookAndFeel { DEFAULT("Default"), DARCULA("Darcula"), + METAL("Metal"), SYSTEM("System"), NONE("None (JVM default)"); // the "JVM default" look and feel, get it at the beginning and store it so we can set it later - private static javax.swing.LookAndFeel NONE_LAF = UIManager.getLookAndFeel(); + private static final javax.swing.LookAndFeel NONE_LAF = UIManager.getLookAndFeel(); private final String name; LookAndFeel(String name) { @@ -35,10 +37,13 @@ public enum LookAndFeel { UIManager.setLookAndFeel(NONE_LAF); break; case DEFAULT: + UIManager.setLookAndFeel(new FlatLightLaf()); + break; + case METAL: UIManager.setLookAndFeel(new MetalLookAndFeel()); break; case DARCULA: - UIManager.setLookAndFeel(new DarculaLaf()); + UIManager.setLookAndFeel(new FlatDarculaLaf()); break; case SYSTEM: UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); -- cgit v1.2.3 From 66eec3a00ef97b5a7c43d3b838b73237847a0071 Mon Sep 17 00:00:00 2001 From: Juuxel Date: Mon, 15 Mar 2021 17:55:54 +0200 Subject: Make the javadoc dialog use the editor font as it is an editor --- enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/JavadocDialog.java | 2 ++ 1 file changed, 2 insertions(+) (limited to 'enigma-swing/src/main/java') diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/JavadocDialog.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/JavadocDialog.java index a934d34c..3435012f 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/JavadocDialog.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/JavadocDialog.java @@ -25,6 +25,7 @@ import com.google.common.base.Strings; import cuchaz.enigma.analysis.EntryReference; import cuchaz.enigma.gui.GuiController; +import cuchaz.enigma.gui.config.UiConfig; import cuchaz.enigma.gui.elements.ValidatableTextArea; import cuchaz.enigma.gui.util.GuiUtil; import cuchaz.enigma.gui.util.ScaleUtil; @@ -78,6 +79,7 @@ public class JavadocDialog { } } }); + this.text.setFont(UiConfig.getEditorFont()); // buttons panel JPanel buttonsPanel = new JPanel(); -- cgit v1.2.3 From 2bee1fe38b37fa1812f4cbb7c2766a09f61dd486 Mon Sep 17 00:00:00 2001 From: Juuxel Date: Tue, 16 Mar 2021 21:20:35 +0200 Subject: Disable FlatLaf's custom HiDPI scaling --- enigma-swing/src/main/java/cuchaz/enigma/gui/config/LookAndFeel.java | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'enigma-swing/src/main/java') 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 d1d3e0df..47614676 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 @@ -10,6 +10,7 @@ import javax.swing.plaf.metal.MetalLookAndFeel; import com.formdev.flatlaf.FlatDarculaLaf; import com.formdev.flatlaf.FlatLightLaf; +import com.formdev.flatlaf.FlatSystemProperties; public enum LookAndFeel { DEFAULT("Default"), @@ -31,6 +32,9 @@ public enum LookAndFeel { } public void setGlobalLAF() { + // Disable FlatLaf's UI scaling, we do it on our own + System.setProperty(FlatSystemProperties.UI_SCALE_ENABLED, "false"); + try { switch (this) { case NONE: -- cgit v1.2.3 From c17543a73e8014ee25c7d29bd615aa854770aafe Mon Sep 17 00:00:00 2001 From: Juuxel Date: Tue, 16 Mar 2021 21:36:26 +0200 Subject: Remove unused LookAndFeel display name field and getter --- .../java/cuchaz/enigma/gui/config/LookAndFeel.java | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) (limited to 'enigma-swing/src/main/java') 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 47614676..a9b94655 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 @@ -13,23 +13,14 @@ import com.formdev.flatlaf.FlatLightLaf; import com.formdev.flatlaf.FlatSystemProperties; public enum LookAndFeel { - DEFAULT("Default"), - DARCULA("Darcula"), - METAL("Metal"), - SYSTEM("System"), - NONE("None (JVM default)"); + DEFAULT, + DARCULA, + METAL, + SYSTEM, + NONE; // 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 String name; - - LookAndFeel(String name) { - this.name = name; - } - - public String getName() { - return name; - } public void setGlobalLAF() { // Disable FlatLaf's UI scaling, we do it on our own -- cgit v1.2.3 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/src/main/java') 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 From 15ae5e21fcb395279587dd2a03d3b84ef308bd65 Mon Sep 17 00:00:00 2001 From: Juuxel Date: Thu, 18 Mar 2021 22:56:21 +0200 Subject: Don't use custom editor fonts when they aren't enabled --- .../src/main/java/cuchaz/enigma/gui/EnigmaSyntaxKit.java | 5 ++++- .../src/main/java/cuchaz/enigma/gui/config/UiConfig.java | 16 +++++++++++++++- .../java/cuchaz/enigma/gui/dialog/JavadocDialog.java | 2 +- 3 files changed, 20 insertions(+), 3 deletions(-) (limited to 'enigma-swing/src/main/java') diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/EnigmaSyntaxKit.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/EnigmaSyntaxKit.java index 27c866ca..b500e4ba 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/EnigmaSyntaxKit.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/EnigmaSyntaxKit.java @@ -7,6 +7,8 @@ import de.sciss.syntaxpane.util.Configuration; import cuchaz.enigma.gui.config.UiConfig; +import java.awt.Font; + public class EnigmaSyntaxKit extends JavaSyntaxKit { private static Configuration configuration = null; @@ -53,7 +55,8 @@ public class EnigmaSyntaxKit extends JavaSyntaxKit { configuration.put("Action.quick-find", "cuchaz.enigma.gui.QuickFindAction, menu F"); - configuration.put("DefaultFont", UiConfig.encodeFont(UiConfig.getEditorFont())); + Font editorFont = UiConfig.shouldUseCustomFonts() ? UiConfig.getEditorFont() : UiConfig.getFallbackEditorFont(); + configuration.put("DefaultFont", UiConfig.encodeFont(editorFont)); } /** diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/config/UiConfig.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/config/UiConfig.java index 828da116..bab50df1 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/config/UiConfig.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/config/UiConfig.java @@ -220,13 +220,27 @@ public final class UiConfig { } public static Font getEditorFont() { - return getFont("Editor").orElseGet(() -> ScaleUtil.scaleFont(Font.decode(Font.MONOSPACED))); + return getFont("Editor").orElseGet(UiConfig::getFallbackEditorFont); } public static void setEditorFont(Font font) { setFont("Editor", font); } + /** + * Gets the fallback editor font. + * It is used + * + * + * @return the fallback editor font + */ + public static Font getFallbackEditorFont() { + return ScaleUtil.scaleFont(Font.decode(Font.MONOSPACED)); + } + public static String encodeFont(Font font) { int style = font.getStyle(); String s = style == (Font.BOLD | Font.ITALIC) ? "bolditalic" : style == Font.ITALIC ? "italic" : style == Font.BOLD ? "bold" : "plain"; diff --git a/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/JavadocDialog.java b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/JavadocDialog.java index 3435012f..8a5a3766 100644 --- a/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/JavadocDialog.java +++ b/enigma-swing/src/main/java/cuchaz/enigma/gui/dialog/JavadocDialog.java @@ -79,7 +79,7 @@ public class JavadocDialog { } } }); - this.text.setFont(UiConfig.getEditorFont()); + this.text.setFont(UiConfig.shouldUseCustomFonts() ? UiConfig.getEditorFont() : UiConfig.getFallbackEditorFont()); // buttons panel JPanel buttonsPanel = new JPanel(); -- cgit v1.2.3 From dc76028dd88037dca492f879ab398c7f16a920b5 Mon Sep 17 00:00:00 2001 From: Juuxel Date: Thu, 18 Mar 2021 23:07:36 +0200 Subject: Switch to FlatDarkLaf instead of FlatDarculaLaf Same colours, but the focus borders are nicer. --- enigma-swing/src/main/java/cuchaz/enigma/gui/config/LookAndFeel.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'enigma-swing/src/main/java') 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 3560b3c1..e21ef52c 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 @@ -8,7 +8,7 @@ import javax.swing.JPanel; import javax.swing.UIManager; import javax.swing.plaf.metal.MetalLookAndFeel; -import com.formdev.flatlaf.FlatDarculaLaf; +import com.formdev.flatlaf.FlatDarkLaf; import com.formdev.flatlaf.FlatLightLaf; import com.formdev.flatlaf.FlatSystemProperties; import cuchaz.enigma.gui.util.ScaleUtil; @@ -50,7 +50,7 @@ public enum LookAndFeel { UIManager.setLookAndFeel(new MetalLookAndFeel()); break; case DARCULA: - UIManager.setLookAndFeel(new FlatDarculaLaf()); + UIManager.setLookAndFeel(new FlatDarkLaf()); break; case SYSTEM: UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); -- cgit v1.2.3