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
private final List<String> outputPinNames;
private final List<String> outputPinNamesUnmodifiable;
+ private Renderer symbolRenderer;
+
public SimpleRectangularSubmodelComponent(ViewModelModifiable model, int logicWidth, String label)
{
super(model);
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)
@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
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<S>
{
// public static members
- public static final CodeSnippetSupplier<RendererProvider> symbolRendererProviderSupplier;
- public static final CodeSnippetSupplier<RendererProvider> outlineRendererProviderSupplier;
+ public static final CodeSnippetSupplier<Renderer> symbolRendererProviderSupplier;
+ public static final CodeSnippetSupplier<Renderer> 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<String, String> standardSnippetIDClassNames = new HashMap<>();
- private final Map<String, S> snippetProvidersForClassNames = new HashMap<>();
- private final S defaultSnippetProvider;
+ private final Map<String, SnippetSupplier<?, S>> snippetProvidersForClassNames = new HashMap<>();
+ private final SnippetSupplier<?, S> defaultSnippetProvider;
- private CodeSnippetSupplier(S defaultSnippetProvider)
+ private CodeSnippetSupplier(SnippetSupplier<?, S> defaultSnippetProvider)
{
this.defaultSnippetProvider = defaultSnippetProvider;
}
standardSnippetIDClassNames.put(standardSnippetID, associatedSnippetClassName);
}
- public void setSnippetProvider(String id, S snippetProvider)
+ public void setSnippetProvider(String id, SnippetSupplier<?, S> snippetProvider)
{
snippetProvidersForClassNames.put(id, snippetProvider);
}
// TODO report errors
- public S getSnippetProvider(String id)
+ public SnippetSupplier<?, S> getSnippetProvider(String id)
{
if (id != null)
{
if (snippetProviderClassName != null)
{
tryLoadSnippetClass(snippetProviderClassName);
- S snippetProvider = snippetProvidersForClassNames.get(snippetProviderClassName);
+ SnippetSupplier<?, S> snippetProvider = snippetProvidersForClassNames.get(snippetProviderClassName);
if (snippetProvider != null)
return snippetProvider;
}
public interface Renderer
{
- public void render(GeneralGC t, Rectangle u);
+ public void render(GeneralGC gc, Rectangle visibleRegion);
}
\ No newline at end of file
+++ /dev/null
-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
--- /dev/null
+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<P, S>
+{
+ public Class<P> 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 <P, S> SnippetSupplier<P, S> create(Class<P> paramClass, BiFunction<SubmodelComponent, P, S> supplier)
+ {
+ return new SnippetSupplier<>()
+ {
+ @Override
+ public Class<P> getParamClass()
+ {
+ return paramClass;
+ }
+
+ @Override
+ public S create(SubmodelComponent component, P params)
+ {
+ return supplier.apply(component, params);
+ }
+ };
+ }
+}
\ No newline at end of file
--- /dev/null
+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
+++ /dev/null
-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
--- /dev/null
+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 (<code>"text"</code>) with a given font height (<code>"height"</code>) 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
+++ /dev/null
-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 (<code>"text"</code>) with a given font height (<code>"height"</code>) in the center of the component.<br>
- * Parameter format:
- *
- * <pre>
- * {
- * "text": [String]
- * "height": [int]
- * }
- * </pre>
- *
- * @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
--- /dev/null
+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 = "<Symbol\nunknown>";
+
+ 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
+++ /dev/null
-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 = "<Symbol\nunknown>";
-
- @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
--- /dev/null
+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 (<code>"centerText"</code>) with a given font height (<code>"centerTextHeight"</code>) in the center of the component and
+ * draws a label for each pin with a given font height (<code>"pinLabelHeight"</code>). The labels of pins to the left of a given x
+ * coordinate (<code>"horizontalComponentCenter"</code>) are drawn to the right of the respective pin; labels of pins to the right are drawn
+ * left. A margin (<code>"pinLabelMargin"</code>) 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<String, Pin> 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
+++ /dev/null
-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 (<code>"centerText"</code>) with a given font height (<code>"centerTextHeight"</code>) in the center of the component and
- * draws a label for each pin with a given font height (<code>"pinLabelHeight"</code>). The labels of pins to the left of a given x
- * coordinate (<code>"horizontalComponentCenter"</code>) are drawn to the right of the respective pin; labels of pins to the right are drawn
- * left. A margin (<code>"pinLabelMargin"</code>) is applied for pin label drawing.<br>
- * Parameter format:
- *
- * <pre>
- * {
- * "centerText": [String]
- * "centerTextHeight": [double]
- * "horizontalComponentCenter": [double]
- * "pinLabelHeight": [double]
- * "pinLabelMargin": [double]
- * }
- * </pre>
- *
- * @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<String, Pin> 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
{
"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