From 23d21425001f8a848346c270ed10eb07897f0984 Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Mon, 2 Sep 2019 21:17:43 +0200 Subject: [PATCH] Slight rendering improvement --- .../mograsim/logic/model/LogicUIRenderer.java | 3 ++- .../submodels/SubmodelComponent.java | 5 +++- .../net/mograsim/plugin/ThemePreferences.java | 14 ++++++++++ .../preferences/DefaultPreferences.java | 26 ++++++++++++++++--- .../net/mograsim/preferences/Preferences.java | 10 ++++--- 5 files changed, 50 insertions(+), 8 deletions(-) diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUIRenderer.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUIRenderer.java index f88cc5df..8a2ef4e3 100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUIRenderer.java +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/LogicUIRenderer.java @@ -8,6 +8,7 @@ import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; import net.mograsim.logic.model.model.ViewModel; import net.mograsim.logic.model.model.components.GUIComponent; import net.mograsim.logic.model.model.wires.Pin; +import net.mograsim.preferences.Preferences; public class LogicUIRenderer { @@ -24,7 +25,7 @@ public class LogicUIRenderer { gc.setAntialias(SWT.ON); gc.setClipping(visibleRegion); - gc.setLineWidth(.5); + gc.setLineWidth(Preferences.current().getDouble("net.mograsim.logic.model.linewidth")); model.getWiresByName().values().forEach(w -> { Rectangle bounds = w.getBounds(); diff --git a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SubmodelComponent.java b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SubmodelComponent.java index bcf85aee..51195681 100644 --- a/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SubmodelComponent.java +++ b/net.mograsim.logic.model/src/net/mograsim/logic/model/model/components/submodels/SubmodelComponent.java @@ -23,6 +23,7 @@ import net.mograsim.logic.model.serializing.SubmodelComponentParams; import net.mograsim.logic.model.serializing.SubmodelComponentSerializer; import net.mograsim.logic.model.snippets.Renderer; import net.mograsim.logic.model.util.JsonHandler; +import net.mograsim.preferences.Preferences; /** * A {@link GUIComponent} consisting of another model. A SubmodelComponent can have so-called "interface pins" connecting the @@ -365,7 +366,7 @@ public abstract class SubmodelComponent extends GUIComponent public void render(GeneralGC gc, Rectangle visibleRegion) { GCConfig conf = new GCConfig(gc); - TranslatedGC tgc = new TranslatedGC(gc, getPosX(), getPosY(), submodelScale, true); + GeneralGC tgc = new TranslatedGC(gc, getPosX(), getPosY(), submodelScale, true); conf.reset(tgc); double visibleRegionFillRatio = Math.max(getWidth() / visibleRegion.width, getHeight() / visibleRegion.height); double alphaFactor = map(visibleRegionFillRatio, maxVisibleRegionFillRatioForAlpha0, minVisibleRegionFillRatioForAlpha1, 0, 1); @@ -385,6 +386,8 @@ public abstract class SubmodelComponent extends GUIComponent renderSymbol(gc, visibleRegion); } conf.reset(gc); + // reset line width explicitly to avoid rounding errors causing weird glitches + gc.setLineWidth(Preferences.current().getDouble("net.mograsim.logic.model.linewidth")); // draw the outline after all other operations to make interface pins look better renderOutline(gc, visibleRegion); } diff --git a/net.mograsim.plugin.core/src/net/mograsim/plugin/ThemePreferences.java b/net.mograsim.plugin.core/src/net/mograsim/plugin/ThemePreferences.java index b4bc0aca..6ea0028e 100644 --- a/net.mograsim.plugin.core/src/net/mograsim/plugin/ThemePreferences.java +++ b/net.mograsim.plugin.core/src/net/mograsim/plugin/ThemePreferences.java @@ -9,8 +9,10 @@ import org.eclipse.ui.statushandlers.StatusManager; import org.eclipse.ui.themes.ITheme; import net.mograsim.preferences.ColorDefinition; +import net.mograsim.preferences.DefaultPreferences; import net.mograsim.preferences.Preferences; +// TODO proper getInt/getDouble implementation, maybe via own preferences page? public class ThemePreferences extends Preferences { private final ITheme theme; @@ -20,6 +22,18 @@ public class ThemePreferences extends Preferences this.theme = theme; } + @Override + public int getInt(String name) + { + return new DefaultPreferences().getInt(name); + } + + @Override + public double getDouble(String name) + { + return new DefaultPreferences().getDouble(name); + } + @Override public ColorDefinition getColorDefinition(String name) { diff --git a/net.mograsim.preferences/src/net/mograsim/preferences/DefaultPreferences.java b/net.mograsim.preferences/src/net/mograsim/preferences/DefaultPreferences.java index 446569fd..8083680e 100644 --- a/net.mograsim.preferences/src/net/mograsim/preferences/DefaultPreferences.java +++ b/net.mograsim.preferences/src/net/mograsim/preferences/DefaultPreferences.java @@ -4,6 +4,28 @@ import net.mograsim.preferences.ColorDefinition.BuiltInColor; public class DefaultPreferences extends Preferences { + @Override + public int getInt(String name) + { + switch (name) + { + default: + throw new IllegalArgumentException("Unknown int preference name: " + name); + } + } + + @Override + public double getDouble(String name) + { + switch (name) + { + case "net.mograsim.logic.model.linewidth": + return 0.5; + default: + throw new IllegalArgumentException("Unknown double preference name: " + name); + } + } + @Override public ColorDefinition getColorDefinition(String name) { @@ -26,9 +48,7 @@ public class DefaultPreferences extends Preferences case "net.mograsim.logic.model.color.text": return new ColorDefinition(BuiltInColor.COLOR_BLACK); default: - // TODO proper logging here... - System.err.println("Unknown color name: " + name); - return null; + throw new IllegalArgumentException("Unknown color preference name: " + name); } } } \ No newline at end of file diff --git a/net.mograsim.preferences/src/net/mograsim/preferences/Preferences.java b/net.mograsim.preferences/src/net/mograsim/preferences/Preferences.java index 59774906..dba296e3 100644 --- a/net.mograsim.preferences/src/net/mograsim/preferences/Preferences.java +++ b/net.mograsim.preferences/src/net/mograsim/preferences/Preferences.java @@ -1,5 +1,7 @@ package net.mograsim.preferences; +import java.util.Objects; + import org.eclipse.swt.graphics.Color; public abstract class Preferences @@ -8,9 +10,7 @@ public abstract class Preferences public static void setPreferences(Preferences preferences) { - if (preferences == null) - throw new NullPointerException(); - currentPreferences = preferences; + currentPreferences = Objects.requireNonNull(preferences); } public static Preferences current() @@ -20,6 +20,10 @@ public abstract class Preferences return currentPreferences; } + public abstract int getInt(String name); + + public abstract double getDouble(String name); + public abstract ColorDefinition getColorDefinition(String name); public Color getColor(String name) -- 2.17.1