From 04b01512c124c76f3b3d99ba07ef30ea6a90b52f Mon Sep 17 00:00:00 2001 From: 2xsaiko Date: Fri, 24 Apr 2020 18:39:57 +0200 Subject: Add a configurable scale factor (#230) * Add swing-dpi dependency * Implement scale factor * Improve custom scale dialog, fix crash * Remove use of $ in identifiers * Use custom functional interface for scale listeners * Bump version Co-authored-by: modmuss50 --- src/main/java/cuchaz/enigma/gui/Gui.java | 48 +++++++++++++++++--------------- 1 file changed, 26 insertions(+), 22 deletions(-) (limited to 'src/main/java/cuchaz/enigma/gui/Gui.java') diff --git a/src/main/java/cuchaz/enigma/gui/Gui.java b/src/main/java/cuchaz/enigma/gui/Gui.java index ee8fbdf..8f0d6fa 100644 --- a/src/main/java/cuchaz/enigma/gui/Gui.java +++ b/src/main/java/cuchaz/enigma/gui/Gui.java @@ -11,6 +11,18 @@ package cuchaz.enigma.gui; +import java.awt.*; +import java.awt.event.*; +import java.nio.file.Path; +import java.util.List; +import java.util.*; +import java.util.function.Function; + +import javax.swing.*; +import javax.swing.text.BadLocationException; +import javax.swing.text.Highlighter; +import javax.swing.tree.*; + import com.google.common.base.Strings; import com.google.common.collect.Lists; import cuchaz.enigma.Constants; @@ -37,20 +49,10 @@ import cuchaz.enigma.throwables.IllegalNameException; import cuchaz.enigma.translation.mapping.*; import cuchaz.enigma.translation.representation.entry.*; import cuchaz.enigma.utils.I18n; +import cuchaz.enigma.gui.util.ScaleUtil; import cuchaz.enigma.utils.Utils; import de.sciss.syntaxpane.DefaultSyntaxKit; -import javax.swing.*; -import javax.swing.text.BadLocationException; -import javax.swing.text.Highlighter; -import javax.swing.tree.*; -import java.awt.*; -import java.awt.event.*; -import java.nio.file.Path; -import java.util.List; -import java.util.*; -import java.util.function.Function; - public class Gui { public final PopupMenuBar popupMenu; @@ -119,6 +121,8 @@ public class Gui { this.controller = new GuiController(this, profile); + Themes.updateTheme(this); + // init file choosers this.jarFileChooser = new FileDialog(getFrame(), I18n.translate("menu.file.jar.open"), FileDialog.LOAD); @@ -135,14 +139,13 @@ public class Gui { splitClasses.setResizeWeight(0.3); this.classesPanel = new JPanel(); this.classesPanel.setLayout(new BorderLayout()); - this.classesPanel.setPreferredSize(new Dimension(250, 0)); + this.classesPanel.setPreferredSize(ScaleUtil.getDimension(250, 0)); // init info panel infoPanel = new PanelIdentifier(this); infoPanel.clearReference(); // init editor - Themes.updateTheme(this); selectionHighlightPainter = new SelectionHighlightPainter(); this.editor = new PanelEditor(this); JScrollPane sourceScroller = new JScrollPane(this.editor); @@ -257,8 +260,8 @@ public class Gui { } } }); - tokens.setPreferredSize(new Dimension(0, 200)); - tokens.setMinimumSize(new Dimension(0, 200)); + tokens.setPreferredSize(ScaleUtil.getDimension(0, 200)); + tokens.setMinimumSize(ScaleUtil.getDimension(0, 200)); JSplitPane callPanel = new JSplitPane( JSplitPane.VERTICAL_SPLIT, true, @@ -274,7 +277,7 @@ public class Gui { centerPanel.add(infoPanel, BorderLayout.NORTH); centerPanel.add(sourceScroller, BorderLayout.CENTER); tabs = new JTabbedPane(); - tabs.setPreferredSize(new Dimension(250, 0)); + tabs.setPreferredSize(ScaleUtil.getDimension(250, 0)); tabs.addTab(I18n.translate("info_panel.tree.inheritance"), inheritancePanel); tabs.addTab(I18n.translate("info_panel.tree.implementations"), implementationsPanel); tabs.addTab(I18n.translate("info_panel.tree.calls"), callPanel); @@ -301,10 +304,11 @@ public class Gui { // show the frame pane.doLayout(); - this.frame.setSize(1024, 576); - this.frame.setMinimumSize(new Dimension(640, 480)); + this.frame.setSize(ScaleUtil.getDimension(1024, 576)); + this.frame.setMinimumSize(ScaleUtil.getDimension(640, 480)); this.frame.setVisible(true); this.frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); + this.frame.setLocationRelativeTo(null); } public JFrame getFrame() { @@ -492,7 +496,7 @@ public class Gui { panel.setLayout(new FlowLayout(FlowLayout.LEFT, 6, 0)); JLabel label = new JLabel(name + ":", JLabel.RIGHT); - label.setPreferredSize(new Dimension(100, label.getPreferredSize().height)); + label.setPreferredSize(ScaleUtil.getDimension(100, ScaleUtil.invert(label.getPreferredSize().height))); panel.add(label); panel.add(Utils.unboldLabel(new JLabel(value, JLabel.LEFT))); @@ -506,11 +510,11 @@ public class Gui { JPanel panel = new JPanel(); panel.setLayout(new FlowLayout(FlowLayout.LEFT, 6, 0)); JLabel label = new JLabel(name + ":", JLabel.RIGHT); - label.setPreferredSize(new Dimension(100, label.getPreferredSize().height)); + label.setPreferredSize(ScaleUtil.getDimension(100, ScaleUtil.invert(label.getPreferredSize().height))); panel.add(label); JComboBox combo = new JComboBox<>(AccessModifier.values()); ((JLabel) combo.getRenderer()).setHorizontalAlignment(JLabel.LEFT); - combo.setPreferredSize(new Dimension(100, label.getPreferredSize().height)); + combo.setPreferredSize(ScaleUtil.getDimension(100, ScaleUtil.invert(label.getPreferredSize().height))); EntryMapping mapping = controller.project.getMapper().getDeobfMapping(entry); if (mapping != null) { @@ -628,7 +632,7 @@ public class Gui { EntryReference, Entry> translatedReference = controller.project.getMapper().deobfuscate(cursorReference); renameTextField.setText(translatedReference.getNameableName()); - renameTextField.setPreferredSize(new Dimension(360, renameTextField.getPreferredSize().height)); + renameTextField.setPreferredSize(ScaleUtil.getDimension(360, ScaleUtil.invert(renameTextField.getPreferredSize().height))); renameTextField.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent event) { -- cgit v1.2.3