diff --git a/src/main/java/de/neemann/digital/builder/tt2/StartATF1502Fitter.java b/src/main/java/de/neemann/digital/builder/tt2/StartATF1502Fitter.java index 542566870..fd529f97b 100644 --- a/src/main/java/de/neemann/digital/builder/tt2/StartATF1502Fitter.java +++ b/src/main/java/de/neemann/digital/builder/tt2/StartATF1502Fitter.java @@ -11,6 +11,8 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; +import static de.neemann.digital.gui.Settings.isLinux; + /** * Starts a fitter to create a JEDEC file. * Created by hneemann on 10.03.17. @@ -62,11 +64,6 @@ public class StartATF1502Fitter implements ExpressionToFileExporter.PostProcess } } - private boolean isLinux() { - String name = System.getProperty("os.name").toLowerCase(); - return name.contains("linux"); - } - @Override public String toString() { return Lang.get("msg_startExternalFitter"); diff --git a/src/main/java/de/neemann/digital/core/element/Keys.java b/src/main/java/de/neemann/digital/core/element/Keys.java index 44056f256..c7fcaae1d 100644 --- a/src/main/java/de/neemann/digital/core/element/Keys.java +++ b/src/main/java/de/neemann/digital/core/element/Keys.java @@ -361,4 +361,20 @@ public final class Keys { = new Key<>("inverterConfig", new InverterConfig()); + /** + * the screen resolution + */ + public static final Key SETTINGS_SCREEN_RESOLUTION = + new Key.KeyInteger("screenResolution", getDefaultScreenResolution()) + .setComboBoxValues(new Integer[]{95, 120, 150, 180, 200, 250, 300}) + .setMin(95) + .setMax(400); + + private static int getDefaultScreenResolution() { + try { + return Toolkit.getDefaultToolkit().getScreenResolution(); + } catch (HeadlessException e) { + return 95; + } + } } diff --git a/src/main/java/de/neemann/digital/gui/Main.java b/src/main/java/de/neemann/digital/gui/Main.java index 095552228..f06e77f27 100644 --- a/src/main/java/de/neemann/digital/gui/Main.java +++ b/src/main/java/de/neemann/digital/gui/Main.java @@ -560,7 +560,8 @@ public final class Main extends JFrame implements ClosingWindowListener.ConfirmS if (modified != null) { FormatToExpression.setDefaultFormat(modified.get(Keys.SETTINGS_EXPRESSION_FORMAT)); if (!Settings.getInstance().getAttributes().equalsKey(Keys.SETTINGS_LANGUAGE, modified) - || !Settings.getInstance().getAttributes().equalsKey(Keys.SETTINGS_IEEE_SHAPES, modified)) { + || !Settings.getInstance().getAttributes().equalsKey(Keys.SETTINGS_IEEE_SHAPES, modified) + || !Settings.getInstance().getAttributes().equalsKey(Keys.SETTINGS_SCREEN_RESOLUTION, modified)) { Lang.setLanguage(modified.get(Keys.SETTINGS_LANGUAGE)); JOptionPane.showMessageDialog(Main.this, Lang.get("msg_restartNeeded")); } diff --git a/src/main/java/de/neemann/digital/gui/Settings.java b/src/main/java/de/neemann/digital/gui/Settings.java index 887ffa669..f38ebacd6 100644 --- a/src/main/java/de/neemann/digital/gui/Settings.java +++ b/src/main/java/de/neemann/digital/gui/Settings.java @@ -34,6 +34,8 @@ public final class Settings implements AttributeListener { INT_LIST.add(Keys.SETTINGS_EXPRESSION_FORMAT); INT_LIST.add(Keys.SETTINGS_DEFAULT_TREESELECT); INT_LIST.add(Keys.SETTINGS_ATF1502_FITTER); + if (isLinux()) + INT_LIST.add(Keys.SETTINGS_SCREEN_RESOLUTION); } private static final class SettingsHolder { @@ -99,5 +101,14 @@ public final class Settings implements AttributeListener { e.printStackTrace(); } } + + /** + * @return true if running on a windows system + */ + public static boolean isLinux() { + String name = System.getProperty("os.name").toLowerCase(); + return name.contains("linux"); + } + } diff --git a/src/main/java/de/neemann/gui/Screen.java b/src/main/java/de/neemann/gui/Screen.java index 66c30e5a6..7442b825f 100644 --- a/src/main/java/de/neemann/gui/Screen.java +++ b/src/main/java/de/neemann/gui/Screen.java @@ -6,6 +6,9 @@ package de.neemann.gui; * Linux : getScreenResolution() = 95 */ +import de.neemann.digital.core.element.Keys; +import de.neemann.digital.gui.Settings; + import javax.swing.*; import java.awt.*; import java.awt.geom.AffineTransform; @@ -36,25 +39,22 @@ public final class Screen { Font font = new JLabel().getFont(); float scaling = 1; int size = 12; - try { - int s = Math.round(Toolkit.getDefaultToolkit().getScreenResolution() * 12 / 96f); - if (s > 12) { - scaling = s / 12f; - size = s; - font = font.deriveFont((float) s); - for (Object key : javax.swing.UIManager.getLookAndFeel().getDefaults().keySet()) { - if (key.toString().endsWith(".font")) - javax.swing.UIManager.put(key, font); - if (key.toString().endsWith(".icon") || key.toString().endsWith("Icon")) { - Icon icon = UIManager.getIcon(key); - if (icon != null) - javax.swing.UIManager.put(key, new ScaleIcon(icon, scaling)); - } + int screenResolution = Settings.getInstance().get(Keys.SETTINGS_SCREEN_RESOLUTION); + int s = Math.round(screenResolution * 12 / 96f); + if (s > 12) { + scaling = s / 12f; + size = s; + font = font.deriveFont((float) s); + for (Object key : javax.swing.UIManager.getLookAndFeel().getDefaults().keySet()) { + if (key.toString().endsWith(".font")) + javax.swing.UIManager.put(key, font); + if (key.toString().endsWith(".icon") || key.toString().endsWith("Icon")) { + Icon icon = UIManager.getIcon(key); + if (icon != null) + javax.swing.UIManager.put(key, new ScaleIcon(icon, scaling)); } - UIManager.put("ScrollBar.width", size * 17 / 12); } - } catch (HeadlessException e) { - // run with defaults if headless + UIManager.put("ScrollBar.width", size * 17 / 12); } this.scaling = scaling; this.size = size; diff --git a/src/main/resources/lang/lang_de.xml b/src/main/resources/lang/lang_de.xml index 17301ad59..18bf35efe 100644 --- a/src/main/resources/lang/lang_de.xml +++ b/src/main/resources/lang/lang_de.xml @@ -661,6 +661,9 @@ Sind evtl. die Namen der Variablen nicht eindeutig? Wenn gesetzt, wird die Baumansicht beim Start automatisch aktiviert. inverse Eingänge Es können die Eingänge ausgewählt werden, welche invertiert werden sollen. + Bildschirmauflösung [DPI] + Es kommt vor, dass das OS eine falsche Bildschirmauflösung liefert. + In diesem Fall kann hier ein eigener Wert gesetzt werden. Leitung eingefügt. Aus Zwischenablage eingefügt. diff --git a/src/main/resources/lang/lang_en.xml b/src/main/resources/lang/lang_en.xml index 17bd8700e..a80d38ef1 100644 --- a/src/main/resources/lang/lang_en.xml +++ b/src/main/resources/lang/lang_en.xml @@ -651,6 +651,9 @@ The names of the variables may not be unique. If set, the component tree view is enabled at startup. inverted Inputs You can select the inputs that are to be inverted. + Screen Resolution [DPI] + Sometimes the OS reports a wrong screen resolution. + In this case, a different value can be set here. Inserted wire. Insert from clipboard.