diff --git a/jadx-gui/build.gradle b/jadx-gui/build.gradle index c3ca4d6dd5826126b90901ec1f6b344cf1a1024b..6c8158f1e8c784af4a9b7f54ad241ae952c62ff3 100644 --- a/jadx-gui/build.gradle +++ b/jadx-gui/build.gradle @@ -40,7 +40,7 @@ jar { } startScripts { - defaultJvmOpts = ['-Xms128M', '-Xmx4g'] + defaultJvmOpts = ['-Xms128M', '-Xmx4g', '-Dawt.useSystemAAFontSettings=lcd', '-Dswing.aatext=true'] doLast { def str = windowsScript.text str = str.replaceAll('java.exe', 'javaw.exe') @@ -58,10 +58,12 @@ launch4j { outfile = "jadx-gui-${version}.exe" copyright = 'Skylot' windowTitle = 'jadx' + jvmOptions = ['-Dawt.useSystemAAFontSettings=lcd', '-Dswing.aatext=true'] jreRuntimeBits = "64" initialHeapPercent = 5 maxHeapSize = 4096 maxHeapPercent = 70 + } test { diff --git a/jadx-gui/src/main/java/jadx/gui/settings/JadxSettings.java b/jadx-gui/src/main/java/jadx/gui/settings/JadxSettings.java index 8711e1f6d097688c97262ca5fae265746a99ac4a..ac4ae93762ffb77e8a412e487a2ebc7daea2f0fe 100644 --- a/jadx-gui/src/main/java/jadx/gui/settings/JadxSettings.java +++ b/jadx-gui/src/main/java/jadx/gui/settings/JadxSettings.java @@ -16,6 +16,8 @@ import org.slf4j.LoggerFactory; import jadx.api.JadxArgs; import jadx.cli.JadxCLIArgs; +import static jadx.gui.utils.Utils.FONT_HACK; + public class JadxSettings extends JadxCLIArgs { private static final Logger LOG = LoggerFactory.getLogger(JadxSettings.class); @@ -23,7 +25,7 @@ public class JadxSettings extends JadxCLIArgs { private static final int RECENT_FILES_COUNT = 15; private static final int CURRENT_SETTINGS_VERSION = 1; - private static final Font DEFAULT_FONT = new RSyntaxTextArea().getFont(); + private static final Font DEFAULT_FONT = FONT_HACK != null ? FONT_HACK : new RSyntaxTextArea().getFont(); static final Set SKIP_FIELDS = new HashSet<>(Arrays.asList( "files", "input", "outputDir", "verbose", "printHelp" diff --git a/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsWindow.java b/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsWindow.java index 9c2ce32837949e2349e4bf92c77880b455beb4ef..398cfcfc2315ce63cd9fdec53b0317787ae5789e 100644 --- a/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsWindow.java +++ b/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsWindow.java @@ -19,6 +19,8 @@ import say.swing.JFontChooser; import jadx.gui.ui.MainWindow; import jadx.gui.utils.NLS; +import static jadx.gui.utils.Utils.FONT_HACK; + public class JadxSettingsWindow extends JDialog { private static final long serialVersionUID = -1804570470377354148L; @@ -37,6 +39,7 @@ public class JadxSettingsWindow extends JDialog { this.startSettings = JadxSettingsAdapter.makeString(settings); initUI(); + registerBundledFonts(); setTitle(NLS.str("preferences.title")); setSize(400, 550); @@ -46,6 +49,13 @@ public class JadxSettingsWindow extends JDialog { pack(); } + public static void registerBundledFonts() { + GraphicsEnvironment grEnv = GraphicsEnvironment.getLocalGraphicsEnvironment(); + if (FONT_HACK != null) { + grEnv.registerFont(FONT_HACK); + } + } + private void initUI() { JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS)); diff --git a/jadx-gui/src/main/java/jadx/gui/utils/Utils.java b/jadx-gui/src/main/java/jadx/gui/utils/Utils.java index c4e7c1569f1158a6a0007f525ed4e429a421e398..af12f8c543883613e3c0219c8dc0a5be581f4c03 100644 --- a/jadx-gui/src/main/java/jadx/gui/utils/Utils.java +++ b/jadx-gui/src/main/java/jadx/gui/utils/Utils.java @@ -1,18 +1,26 @@ package jadx.gui.utils; -import javax.swing.*; +import java.awt.*; +import java.io.InputStream; import java.net.URL; +import javax.swing.*; import jadx.core.dex.info.AccessInfo; import jadx.core.dex.instructions.args.ArgType; import jadx.core.utils.exceptions.JadxRuntimeException; +import org.jetbrains.annotations.Nullable; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class Utils { + private static final Logger LOG = LoggerFactory.getLogger(Utils.class); + + private static final ImageIcon ICON_STATIC = openIcon("static_co"); + private static final ImageIcon ICON_FINAL = openIcon("final_co"); + private static final ImageIcon ICON_ABSTRACT = openIcon("abstract_co"); + private static final ImageIcon ICON_NATIVE = openIcon("native_co"); - private static final ImageIcon ICON_STATIC = Utils.openIcon("static_co"); - private static final ImageIcon ICON_FINAL = Utils.openIcon("final_co"); - private static final ImageIcon ICON_ABSTRACT = Utils.openIcon("abstract_co"); - private static final ImageIcon ICON_NATIVE = Utils.openIcon("native_co"); + public static final Font FONT_HACK = openFontTTF("Hack-Regular"); private Utils() { } @@ -26,6 +34,18 @@ public class Utils { return new ImageIcon(resource); } + @Nullable + public static Font openFontTTF(String name) { + String fontPath = "/fonts/" + name + ".ttf"; + try (InputStream is = Utils.class.getResourceAsStream(fontPath)) { + Font font = Font.createFont(Font.TRUETYPE_FONT, is); + return font.deriveFont(12f); + } catch (Exception e) { + LOG.error("Failed load font by path: {}", fontPath, e); + return null; + } + } + public static void addKeyBinding(JComponent comp, KeyStroke key, String id, Action action) { comp.getInputMap().put(key, id); comp.getActionMap().put(id, action); diff --git a/jadx-gui/src/main/resources/fonts/Hack-Regular.ttf b/jadx-gui/src/main/resources/fonts/Hack-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..92a90cb06e0535afa79f6cba26ceece15a7f7959 Binary files /dev/null and b/jadx-gui/src/main/resources/fonts/Hack-Regular.ttf differ