From f594aef8abc8f444911333f6c32ef0fca18e18ba Mon Sep 17 00:00:00 2001 From: Daniel Kirschten Date: Thu, 4 Jul 2019 16:12:43 +0200 Subject: [PATCH] Made Renderers usable without JSON --- .../SimpleRectangularSubmodelComponent.java | 39 ++++----- .../ui/serializing/CodeSnippetSupplier.java | 27 +++--- .../ui/serializing/snippets/Renderer.java | 2 +- .../snippets/RendererProvider.java | 10 --- .../serializing/snippets/SnippetSupplier.java | 38 +++++++++ .../DefaultOutlineRenderer.java | 37 +++++++++ .../DefaultOutlineRendererProvider.java | 26 ------ .../CenteredTextSymbolRenderer.java | 58 +++++++++++++ .../CenteredTextSymbolRendererProvider.java | 57 ------------- .../DefaultSymbolRenderer.java | 42 ++++++++++ .../DefaultSymbolRendererProvider.java | 31 ------- .../SimpleRectangularLikeSymbolRenderer.java | 82 ++++++++++++++++++ ...RectangularLikeSymbolRendererProvider.java | 83 ------------------- .../serializing/standardSnippetIDMapping.json | 4 +- 14 files changed, 288 insertions(+), 248 deletions(-) delete mode 100644 net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/RendererProvider.java create mode 100644 net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/SnippetSupplier.java create mode 100644 net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/outlinerenderers/DefaultOutlineRenderer.java delete mode 100644 net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/outlinerenderers/DefaultOutlineRendererProvider.java create mode 100644 net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/CenteredTextSymbolRenderer.java delete mode 100644 net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/CenteredTextSymbolRendererProvider.java create mode 100644 net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/DefaultSymbolRenderer.java delete mode 100644 net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/DefaultSymbolRendererProvider.java create mode 100644 net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/SimpleRectangularLikeSymbolRenderer.java delete mode 100644 net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/SimpleRectangularLikeSymbolRendererProvider.java diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/submodels/SimpleRectangularSubmodelComponent.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/submodels/SimpleRectangularSubmodelComponent.java index 529767e7..d7ac643d 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/submodels/SimpleRectangularSubmodelComponent.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/model/components/submodels/SimpleRectangularSubmodelComponent.java @@ -12,14 +12,15 @@ import org.eclipse.swt.graphics.Color; import com.google.gson.JsonObject; import net.haspamelodica.swt.helper.gcs.GeneralGC; -import net.haspamelodica.swt.helper.swtobjectwrappers.Font; -import net.haspamelodica.swt.helper.swtobjectwrappers.Point; import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; import net.mograsim.logic.ui.model.ViewModelModifiable; import net.mograsim.logic.ui.model.components.GUIComponent; import net.mograsim.logic.ui.model.wires.MovablePin; import net.mograsim.logic.ui.model.wires.Pin; import net.mograsim.logic.ui.serializing.SubmodelComponentParams; +import net.mograsim.logic.ui.serializing.snippets.Renderer; +import net.mograsim.logic.ui.serializing.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer; +import net.mograsim.logic.ui.serializing.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer.SimpleRectangularLikeParams; import net.mograsim.preferences.Preferences; public class SimpleRectangularSubmodelComponent extends SubmodelComponent @@ -38,6 +39,8 @@ public class SimpleRectangularSubmodelComponent extends SubmodelComponent private final List outputPinNames; private final List outputPinNamesUnmodifiable; + private Renderer symbolRenderer; + public SimpleRectangularSubmodelComponent(ViewModelModifiable model, int logicWidth, String label) { super(model); @@ -47,6 +50,14 @@ public class SimpleRectangularSubmodelComponent extends SubmodelComponent this.inputPinNamesUnmodifiable = Collections.unmodifiableList(inputPinNames); this.outputPinNames = new ArrayList<>(); this.outputPinNamesUnmodifiable = Collections.unmodifiableList(outputPinNames); + + SimpleRectangularLikeParams rendererParams = new SimpleRectangularLikeParams(); + rendererParams.centerText = label; + rendererParams.centerTextHeight = labelFontHeight; + rendererParams.horizontalComponentCenter = getWidth() / 2; + rendererParams.pinLabelHeight = pinNameFontHeight; + rendererParams.pinLabelMargin = pinNameMargin; + symbolRenderer = new SimpleRectangularLikeSymbolRenderer(this, rendererParams); } protected void setInputPins(String... pinNames) @@ -98,29 +109,7 @@ public class SimpleRectangularSubmodelComponent extends SubmodelComponent @Override protected void renderSymbol(GeneralGC gc, Rectangle visibleRegion) { - // TODO code duplication: see SimpleRectagularLikeSymbolRendererProvider - Font oldFont = gc.getFont(); - gc.setFont(new Font(oldFont.getName(), labelFontHeight, oldFont.getStyle())); - Point textExtent = gc.textExtent(label); - Color textColor = Preferences.current().getColor("net.mograsim.logic.ui.color.text"); - if (textColor != null) - gc.setForeground(textColor); - gc.drawText(label, getPosX() + (getWidth() - textExtent.x) / 2, getPosY() + (getHeight() - textExtent.y) / 2, true); - gc.setFont(new Font(oldFont.getName(), pinNameFontHeight, oldFont.getStyle())); - for (int i = 0; i < inputPinNames.size(); i++) - { - String pinName = inputPinNames.get(i); - textExtent = gc.textExtent(pinName); - gc.drawText(pinName, getPosX() + pinNameMargin, getPosY() + i * pinDistance + (pinDistance - textExtent.y) / 2, true); - } - for (int i = 0; i < outputPinNames.size(); i++) - { - String pinName = outputPinNames.get(i); - textExtent = gc.textExtent(pinName); - gc.drawText(pinName, getPosX() + width - textExtent.x - pinNameMargin, - getPosY() + i * pinDistance + (pinDistance - textExtent.y) / 2, true); - } - gc.setFont(oldFont); + symbolRenderer.render(gc, visibleRegion); } @Override diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/CodeSnippetSupplier.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/CodeSnippetSupplier.java index 453e2ac3..d6bdbb45 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/CodeSnippetSupplier.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/CodeSnippetSupplier.java @@ -5,30 +5,31 @@ import java.io.InputStream; import java.util.HashMap; import java.util.Map; -import net.mograsim.logic.ui.serializing.snippets.RendererProvider; -import net.mograsim.logic.ui.serializing.snippets.outlinerenderers.DefaultOutlineRendererProvider; -import net.mograsim.logic.ui.serializing.snippets.symbolrenderers.DefaultSymbolRendererProvider; +import net.mograsim.logic.ui.serializing.snippets.Renderer; +import net.mograsim.logic.ui.serializing.snippets.SnippetSupplier; +import net.mograsim.logic.ui.serializing.snippets.outlinerenderers.DefaultOutlineRenderer; +import net.mograsim.logic.ui.serializing.snippets.symbolrenderers.DefaultSymbolRenderer; import net.mograsim.logic.ui.util.JsonHandler; public class CodeSnippetSupplier { // public static members - public static final CodeSnippetSupplier symbolRendererProviderSupplier; - public static final CodeSnippetSupplier outlineRendererProviderSupplier; + public static final CodeSnippetSupplier symbolRendererProviderSupplier; + public static final CodeSnippetSupplier outlineRendererProviderSupplier; static { - symbolRendererProviderSupplier = new CodeSnippetSupplier<>(new DefaultSymbolRendererProvider()); - outlineRendererProviderSupplier = new CodeSnippetSupplier<>(new DefaultOutlineRendererProvider()); + symbolRendererProviderSupplier = new CodeSnippetSupplier<>(SnippetSupplier.create(Void.class, DefaultSymbolRenderer::new)); + outlineRendererProviderSupplier = new CodeSnippetSupplier<>(SnippetSupplier.create(Void.class, DefaultOutlineRenderer::new)); } // per-instance members private final Map standardSnippetIDClassNames = new HashMap<>(); - private final Map snippetProvidersForClassNames = new HashMap<>(); - private final S defaultSnippetProvider; + private final Map> snippetProvidersForClassNames = new HashMap<>(); + private final SnippetSupplier defaultSnippetProvider; - private CodeSnippetSupplier(S defaultSnippetProvider) + private CodeSnippetSupplier(SnippetSupplier defaultSnippetProvider) { this.defaultSnippetProvider = defaultSnippetProvider; } @@ -38,13 +39,13 @@ public class CodeSnippetSupplier standardSnippetIDClassNames.put(standardSnippetID, associatedSnippetClassName); } - public void setSnippetProvider(String id, S snippetProvider) + public void setSnippetProvider(String id, SnippetSupplier snippetProvider) { snippetProvidersForClassNames.put(id, snippetProvider); } // TODO report errors - public S getSnippetProvider(String id) + public SnippetSupplier getSnippetProvider(String id) { if (id != null) { @@ -56,7 +57,7 @@ public class CodeSnippetSupplier if (snippetProviderClassName != null) { tryLoadSnippetClass(snippetProviderClassName); - S snippetProvider = snippetProvidersForClassNames.get(snippetProviderClassName); + SnippetSupplier snippetProvider = snippetProvidersForClassNames.get(snippetProviderClassName); if (snippetProvider != null) return snippetProvider; } diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/Renderer.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/Renderer.java index 82e24928..bc0f3939 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/Renderer.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/Renderer.java @@ -5,5 +5,5 @@ import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; public interface Renderer { - public void render(GeneralGC t, Rectangle u); + public void render(GeneralGC gc, Rectangle visibleRegion); } \ No newline at end of file diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/RendererProvider.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/RendererProvider.java deleted file mode 100644 index a178e710..00000000 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/RendererProvider.java +++ /dev/null @@ -1,10 +0,0 @@ -package net.mograsim.logic.ui.serializing.snippets; - -import com.google.gson.JsonElement; - -import net.mograsim.logic.ui.serializing.DeserializedSubmodelComponent; - -public interface RendererProvider -{ - public Renderer create(DeserializedSubmodelComponent component, JsonElement params); -} \ No newline at end of file diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/SnippetSupplier.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/SnippetSupplier.java new file mode 100644 index 00000000..3adb9e8d --- /dev/null +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/SnippetSupplier.java @@ -0,0 +1,38 @@ +package net.mograsim.logic.ui.serializing.snippets; + +import java.util.function.BiFunction; + +import com.google.gson.Gson; +import com.google.gson.JsonElement; + +import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent; + +public interface SnippetSupplier +{ + public Class

getParamClass(); + + public S create(SubmodelComponent component, P params); + + public default S create(SubmodelComponent component, JsonElement params) + { + return create(component, new Gson().fromJson(params, getParamClass())); + } + + public static SnippetSupplier create(Class

paramClass, BiFunction supplier) + { + return new SnippetSupplier<>() + { + @Override + public Class

getParamClass() + { + return paramClass; + } + + @Override + public S create(SubmodelComponent component, P params) + { + return supplier.apply(component, params); + } + }; + } +} \ No newline at end of file diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/outlinerenderers/DefaultOutlineRenderer.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/outlinerenderers/DefaultOutlineRenderer.java new file mode 100644 index 00000000..8fe41c65 --- /dev/null +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/outlinerenderers/DefaultOutlineRenderer.java @@ -0,0 +1,37 @@ +package net.mograsim.logic.ui.serializing.snippets.outlinerenderers; + +import net.haspamelodica.swt.helper.gcs.GeneralGC; +import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; +import net.mograsim.logic.ui.model.components.GUIComponent; +import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent; +import net.mograsim.logic.ui.serializing.CodeSnippetSupplier; +import net.mograsim.logic.ui.serializing.snippets.Renderer; +import net.mograsim.logic.ui.serializing.snippets.SnippetSupplier; +import net.mograsim.preferences.ColorDefinition; +import net.mograsim.preferences.ColorManager; +import net.mograsim.preferences.Preferences; + +public class DefaultOutlineRenderer implements Renderer +{ + private final GUIComponent component; + + public DefaultOutlineRenderer(SubmodelComponent component, @SuppressWarnings("unused") Void params) + { + this.component = component; + } + + @Override + public void render(GeneralGC gc, Rectangle visibleRegion) + { + ColorDefinition fg = Preferences.current().getColorDefinition("net.mograsim.logic.ui.color.foreground"); + if (fg != null) + gc.setForeground(ColorManager.current().toColor(fg)); + gc.drawRectangle(component.getBounds()); + } + + static + { + CodeSnippetSupplier.outlineRendererProviderSupplier.setSnippetProvider(DefaultOutlineRenderer.class.getCanonicalName(), + SnippetSupplier.create(Void.class, DefaultOutlineRenderer::new)); + } +} \ No newline at end of file diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/outlinerenderers/DefaultOutlineRendererProvider.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/outlinerenderers/DefaultOutlineRendererProvider.java deleted file mode 100644 index b236aa8c..00000000 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/outlinerenderers/DefaultOutlineRendererProvider.java +++ /dev/null @@ -1,26 +0,0 @@ -package net.mograsim.logic.ui.serializing.snippets.outlinerenderers; - -import com.google.gson.JsonElement; - -import net.mograsim.logic.ui.serializing.DeserializedSubmodelComponent; -import net.mograsim.logic.ui.serializing.snippets.Renderer; -import net.mograsim.logic.ui.serializing.snippets.RendererProvider; -import net.mograsim.preferences.ColorDefinition; -import net.mograsim.preferences.ColorManager; -import net.mograsim.preferences.Preferences; - -public class DefaultOutlineRendererProvider implements RendererProvider -{ - @Override - public Renderer create(DeserializedSubmodelComponent component, JsonElement params) - { - return (gc, visReg) -> - { - ColorDefinition fg = Preferences.current().getColorDefinition("net.mograsim.logic.ui.color.foreground"); - if (fg != null) - gc.setForeground(ColorManager.current().toColor(fg)); - gc.drawRectangle(component.getBounds()); - }; - - } -} \ No newline at end of file diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/CenteredTextSymbolRenderer.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/CenteredTextSymbolRenderer.java new file mode 100644 index 00000000..2309f148 --- /dev/null +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/CenteredTextSymbolRenderer.java @@ -0,0 +1,58 @@ +package net.mograsim.logic.ui.serializing.snippets.symbolrenderers; + +import net.haspamelodica.swt.helper.gcs.GeneralGC; +import net.haspamelodica.swt.helper.swtobjectwrappers.Font; +import net.haspamelodica.swt.helper.swtobjectwrappers.Point; +import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; +import net.mograsim.logic.ui.model.components.GUIComponent; +import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent; +import net.mograsim.logic.ui.serializing.CodeSnippetSupplier; +import net.mograsim.logic.ui.serializing.snippets.Renderer; +import net.mograsim.logic.ui.serializing.snippets.SnippetSupplier; +import net.mograsim.preferences.ColorDefinition; +import net.mograsim.preferences.ColorManager; +import net.mograsim.preferences.Preferences; + +/** + * Renders a text ("text") with a given font height ("height") in the center of the component. + * + * @author Daniel Kirschten + */ +public class CenteredTextSymbolRenderer implements Renderer +{ + private final GUIComponent component; + private final CenteredTextParams params; + + public CenteredTextSymbolRenderer(SubmodelComponent component, CenteredTextParams params) + { + this.component = component; + this.params = params; + + } + + @Override + public void render(GeneralGC gc, Rectangle visibleRegion) + { + Font oldFont = gc.getFont(); + gc.setFont(new Font(oldFont.getName(), params.fontHeight, oldFont.getStyle())); + ColorDefinition fg = Preferences.current().getColorDefinition("net.mograsim.logic.ui.color.text"); + if (fg != null) + gc.setForeground(ColorManager.current().toColor(fg)); + Point idSize = gc.textExtent(params.text); + Rectangle bounds = component.getBounds(); + gc.drawText(params.text, bounds.x + (bounds.width - idSize.x) / 2, bounds.y + (bounds.height - idSize.y) / 2, true); + gc.setFont(oldFont); + } + + public static class CenteredTextParams + { + public String text; + public double fontHeight; + } + + static + { + CodeSnippetSupplier.symbolRendererProviderSupplier.setSnippetProvider(CenteredTextSymbolRenderer.class.getCanonicalName(), + SnippetSupplier.create(CenteredTextParams.class, CenteredTextSymbolRenderer::new)); + } +} \ No newline at end of file diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/CenteredTextSymbolRendererProvider.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/CenteredTextSymbolRendererProvider.java deleted file mode 100644 index 98e6c439..00000000 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/CenteredTextSymbolRendererProvider.java +++ /dev/null @@ -1,57 +0,0 @@ -package net.mograsim.logic.ui.serializing.snippets.symbolrenderers; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; - -import net.haspamelodica.swt.helper.swtobjectwrappers.Font; -import net.haspamelodica.swt.helper.swtobjectwrappers.Point; -import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; -import net.mograsim.logic.ui.serializing.CodeSnippetSupplier; -import net.mograsim.logic.ui.serializing.DeserializedSubmodelComponent; -import net.mograsim.logic.ui.serializing.snippets.Renderer; -import net.mograsim.logic.ui.serializing.snippets.RendererProvider; -import net.mograsim.preferences.ColorDefinition; -import net.mograsim.preferences.ColorManager; -import net.mograsim.preferences.Preferences; - -/** - * Renders a text ("text") with a given font height ("height") in the center of the component.
- * Parameter format: - * - *

- * {
- *   "text": [String]
- *   "height": [int]
- * }
- * 
- * - * @author Daniel Kirschten - */ -public class CenteredTextSymbolRendererProvider implements RendererProvider -{ - @Override - public Renderer create(DeserializedSubmodelComponent component, JsonElement params) - { - JsonObject asJsonObject = params.getAsJsonObject(); - String text = asJsonObject.getAsJsonPrimitive("text").getAsString(); - int fontHeight = asJsonObject.getAsJsonPrimitive("height").getAsInt(); - return (gc, visReg) -> - { - Font oldFont = gc.getFont(); - gc.setFont(new Font(oldFont.getName(), fontHeight, oldFont.getStyle())); - ColorDefinition fg = Preferences.current().getColorDefinition("net.mograsim.logic.ui.color.text"); - if (fg != null) - gc.setForeground(ColorManager.current().toColor(fg)); - Point idSize = gc.textExtent(text); - Rectangle bounds = component.getBounds(); - gc.drawText(text, bounds.x + (bounds.width - idSize.x) / 2, bounds.y + (bounds.height - idSize.y) / 2, true); - gc.setFont(oldFont); - }; - } - - static - { - CodeSnippetSupplier.symbolRendererProviderSupplier.setSnippetProvider(CenteredTextSymbolRendererProvider.class.getCanonicalName(), - new CenteredTextSymbolRendererProvider()); - } -} \ No newline at end of file diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/DefaultSymbolRenderer.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/DefaultSymbolRenderer.java new file mode 100644 index 00000000..4600531f --- /dev/null +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/DefaultSymbolRenderer.java @@ -0,0 +1,42 @@ +package net.mograsim.logic.ui.serializing.snippets.symbolrenderers; + +import net.haspamelodica.swt.helper.gcs.GeneralGC; +import net.haspamelodica.swt.helper.swtobjectwrappers.Point; +import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; +import net.mograsim.logic.ui.model.components.GUIComponent; +import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent; +import net.mograsim.logic.ui.serializing.CodeSnippetSupplier; +import net.mograsim.logic.ui.serializing.snippets.Renderer; +import net.mograsim.logic.ui.serializing.snippets.SnippetSupplier; +import net.mograsim.preferences.ColorDefinition; +import net.mograsim.preferences.ColorManager; +import net.mograsim.preferences.Preferences; + +public class DefaultSymbolRenderer implements Renderer +{ + private static final String id = ""; + + private final GUIComponent component; + + public DefaultSymbolRenderer(SubmodelComponent component, @SuppressWarnings("unused") Void params) + { + this.component = component; + } + + @Override + public void render(GeneralGC gc, Rectangle visibleRegion) + { + ColorDefinition fg = Preferences.current().getColorDefinition("net.mograsim.logic.ui.color.text"); + if (fg != null) + gc.setForeground(ColorManager.current().toColor(fg)); + Point idSize = gc.textExtent(id); + Rectangle bounds = component.getBounds(); + gc.drawText(id, bounds.x + (bounds.width - idSize.x) / 2, bounds.y + (bounds.height - idSize.y) / 2, true); + } + + static + { + CodeSnippetSupplier.symbolRendererProviderSupplier.setSnippetProvider(DefaultSymbolRenderer.class.getCanonicalName(), + SnippetSupplier.create(Void.class, DefaultSymbolRenderer::new)); + } +} \ No newline at end of file diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/DefaultSymbolRendererProvider.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/DefaultSymbolRendererProvider.java deleted file mode 100644 index 4d445d67..00000000 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/DefaultSymbolRendererProvider.java +++ /dev/null @@ -1,31 +0,0 @@ -package net.mograsim.logic.ui.serializing.snippets.symbolrenderers; - -import com.google.gson.JsonElement; - -import net.haspamelodica.swt.helper.swtobjectwrappers.Point; -import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; -import net.mograsim.logic.ui.serializing.DeserializedSubmodelComponent; -import net.mograsim.logic.ui.serializing.snippets.Renderer; -import net.mograsim.logic.ui.serializing.snippets.RendererProvider; -import net.mograsim.preferences.ColorDefinition; -import net.mograsim.preferences.ColorManager; -import net.mograsim.preferences.Preferences; - -public class DefaultSymbolRendererProvider implements RendererProvider -{ - private static final String id = ""; - - @Override - public Renderer create(DeserializedSubmodelComponent component, JsonElement params) - { - return (gc, visReg) -> - { - ColorDefinition fg = Preferences.current().getColorDefinition("net.mograsim.logic.ui.color.text"); - if (fg != null) - gc.setForeground(ColorManager.current().toColor(fg)); - Point idSize = gc.textExtent(id); - Rectangle bounds = component.getBounds(); - gc.drawText(id, bounds.x + (bounds.width - idSize.x) / 2, bounds.y + (bounds.height - idSize.y) / 2, true); - }; - } -} \ No newline at end of file diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/SimpleRectangularLikeSymbolRenderer.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/SimpleRectangularLikeSymbolRenderer.java new file mode 100644 index 00000000..515c9c44 --- /dev/null +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/SimpleRectangularLikeSymbolRenderer.java @@ -0,0 +1,82 @@ +package net.mograsim.logic.ui.serializing.snippets.symbolrenderers; + +import java.util.Map.Entry; + +import org.eclipse.swt.graphics.Color; + +import net.haspamelodica.swt.helper.gcs.GeneralGC; +import net.haspamelodica.swt.helper.swtobjectwrappers.Font; +import net.haspamelodica.swt.helper.swtobjectwrappers.Point; +import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; +import net.mograsim.logic.ui.model.components.GUIComponent; +import net.mograsim.logic.ui.model.components.submodels.SubmodelComponent; +import net.mograsim.logic.ui.model.wires.Pin; +import net.mograsim.logic.ui.serializing.CodeSnippetSupplier; +import net.mograsim.logic.ui.serializing.snippets.Renderer; +import net.mograsim.logic.ui.serializing.snippets.SnippetSupplier; +import net.mograsim.preferences.Preferences; + +/** + * Renders a text ("centerText") with a given font height ("centerTextHeight") in the center of the component and + * draws a label for each pin with a given font height ("pinLabelHeight"). The labels of pins to the left of a given x + * coordinate ("horizontalComponentCenter") are drawn to the right of the respective pin; labels of pins to the right are drawn + * left. A margin ("pinLabelMargin") is applied for pin label drawing. + * + * @author Daniel Kirschten + */ +public class SimpleRectangularLikeSymbolRenderer implements Renderer +{ + private final GUIComponent component; + private final SimpleRectangularLikeParams params; + + public SimpleRectangularLikeSymbolRenderer(SubmodelComponent component, SimpleRectangularLikeParams params) + { + this.component = component; + this.params = params; + } + + @Override + public void render(GeneralGC gc, Rectangle visibleRegion) + { + double posX = component.getPosX(); + double posY = component.getPosY(); + double width = component.getWidth(); + double height = component.getHeight(); + + Font oldFont = gc.getFont(); + gc.setFont(new Font(oldFont.getName(), params.centerTextHeight, oldFont.getStyle())); + Point textExtent = gc.textExtent(params.centerText); + Color textColor = Preferences.current().getColor("net.mograsim.logic.ui.color.text"); + if (textColor != null) + gc.setForeground(textColor); + gc.drawText(params.centerText, posX + (width - textExtent.x) / 2, posY + (height - textExtent.y) / 2, true); + gc.setFont(new Font(oldFont.getName(), params.pinLabelHeight, oldFont.getStyle())); + for (Entry pinEntry : component.getPins().entrySet()) + { + String pinName = pinEntry.getKey(); + Pin pin = pinEntry.getValue(); + double pinX = pin.getRelX(); + double pinY = posY + pin.getRelY(); + textExtent = gc.textExtent(pinName); + gc.drawText(pinName, + posX + pinX + (pinX > params.horizontalComponentCenter ? -textExtent.x - params.pinLabelMargin : params.pinLabelMargin), + pinY - textExtent.y / 2, true); + } + gc.setFont(oldFont); + } + + public static class SimpleRectangularLikeParams + { + public String centerText; + public double centerTextHeight; + public double horizontalComponentCenter; + public double pinLabelHeight; + public double pinLabelMargin; + } + + static + { + CodeSnippetSupplier.symbolRendererProviderSupplier.setSnippetProvider(SimpleRectangularLikeSymbolRenderer.class.getCanonicalName(), + SnippetSupplier.create(SimpleRectangularLikeParams.class, SimpleRectangularLikeSymbolRenderer::new)); + } +} \ No newline at end of file diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/SimpleRectangularLikeSymbolRendererProvider.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/SimpleRectangularLikeSymbolRendererProvider.java deleted file mode 100644 index c7a8fa1e..00000000 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/SimpleRectangularLikeSymbolRendererProvider.java +++ /dev/null @@ -1,83 +0,0 @@ -package net.mograsim.logic.ui.serializing.snippets.symbolrenderers; - -import java.util.Map.Entry; - -import org.eclipse.swt.graphics.Color; - -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; - -import net.haspamelodica.swt.helper.swtobjectwrappers.Font; -import net.haspamelodica.swt.helper.swtobjectwrappers.Point; -import net.mograsim.logic.ui.model.wires.Pin; -import net.mograsim.logic.ui.serializing.CodeSnippetSupplier; -import net.mograsim.logic.ui.serializing.DeserializedSubmodelComponent; -import net.mograsim.logic.ui.serializing.snippets.Renderer; -import net.mograsim.logic.ui.serializing.snippets.RendererProvider; -import net.mograsim.preferences.Preferences; - -/** - * Renders a text ("centerText") with a given font height ("centerTextHeight") in the center of the component and - * draws a label for each pin with a given font height ("pinLabelHeight"). The labels of pins to the left of a given x - * coordinate ("horizontalComponentCenter") are drawn to the right of the respective pin; labels of pins to the right are drawn - * left. A margin ("pinLabelMargin") is applied for pin label drawing.
- * Parameter format: - * - *
- * {
- *   "centerText": [String]
- *   "centerTextHeight": [double]
- *   "horizontalComponentCenter": [double]
- *   "pinLabelHeight": [double]
- *   "pinLabelMargin": [double]
- * }
- * 
- * - * @author Daniel Kirschten - */ -public class SimpleRectangularLikeSymbolRendererProvider implements RendererProvider -{ - @Override - public Renderer create(DeserializedSubmodelComponent component, JsonElement params) - { - JsonObject asJsonObject = params.getAsJsonObject(); - String centerText = asJsonObject.getAsJsonPrimitive("centerText").getAsString(); - double centerTextHeight = asJsonObject.getAsJsonPrimitive("centerTextHeight").getAsDouble(); - double horizontalComponentCenter = asJsonObject.getAsJsonPrimitive("horizontalComponentCenter").getAsDouble(); - double pinLabelHeight = asJsonObject.getAsJsonPrimitive("pinLabelHeight").getAsDouble(); - double pinLabelMargin = asJsonObject.getAsJsonPrimitive("pinLabelMargin").getAsDouble(); - return (gc, visReg) -> - { - double posX = component.getPosX(); - double posY = component.getPosY(); - double width = component.getWidth(); - double height = component.getHeight(); - - Font oldFont = gc.getFont(); - gc.setFont(new Font(oldFont.getName(), centerTextHeight, oldFont.getStyle())); - Point textExtent = gc.textExtent(centerText); - Color textColor = Preferences.current().getColor("net.mograsim.logic.ui.color.text"); - if (textColor != null) - gc.setForeground(textColor); - gc.drawText(centerText, posX + (width - textExtent.x) / 2, posY + (height - textExtent.y) / 2, true); - gc.setFont(new Font(oldFont.getName(), pinLabelHeight, oldFont.getStyle())); - for (Entry pinEntry : component.getPins().entrySet()) - { - String pinName = pinEntry.getKey(); - Pin pin = pinEntry.getValue(); - double pinX = pin.getRelX(); - double pinY = posY + pin.getRelY(); - textExtent = gc.textExtent(pinName); - gc.drawText(pinName, posX + pinX + (pinX > horizontalComponentCenter ? -textExtent.x - pinLabelMargin : pinLabelMargin), - pinY - textExtent.y / 2, true); - } - gc.setFont(oldFont); - }; - } - - static - { - CodeSnippetSupplier.symbolRendererProviderSupplier.setSnippetProvider( - SimpleRectangularLikeSymbolRendererProvider.class.getCanonicalName(), new SimpleRectangularLikeSymbolRendererProvider()); - } -} \ No newline at end of file diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/standardSnippetIDMapping.json b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/standardSnippetIDMapping.json index 30976a09..7cdc9f32 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/standardSnippetIDMapping.json +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/standardSnippetIDMapping.json @@ -2,7 +2,7 @@ mograsim version: 0.1.3 { "standardOutlineRendererProviders": {}, "standardSymbolRendererProviders": { - "CenteredTextSymbolRenderer": "net.mograsim.logic.ui.serializing.snippets.symbolrenderers.CenteredTextSymbolRendererProvider", - "SimpleRectangularLikeSymbolRenderer": "net.mograsim.logic.ui.serializing.snippets.symbolrenderers.SimpleRectangularLikeSymbolRendererProvider" + "CenteredTextSymbolRenderer": "net.mograsim.logic.ui.serializing.snippets.symbolrenderers.CenteredTextSymbolRenderer", + "SimpleRectangularLikeSymbolRenderer": "net.mograsim.logic.ui.serializing.snippets.symbolrenderers.SimpleRectangularLikeSymbolRenderer" } } \ No newline at end of file -- 2.17.1