X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.ui%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fui%2Fserializing%2Fsnippets%2Fsymbolrenderers%2FSimpleRectangularLikeSymbolRendererProvider.java;fp=net.mograsim.logic.ui%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fui%2Fserializing%2Fsnippets%2Fsymbolrenderers%2FSimpleRectangularLikeSymbolRendererProvider.java;h=a47c47fc79c7c28eae899ef89d0faac22bf3c7b4;hb=9ca90120a47e07c9182162351dc47aa89ae703be;hp=0000000000000000000000000000000000000000;hpb=5e2130295467f83016dd715c038b1f2145d567f1;p=Mograsim.git
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
new file mode 100644
index 00000000..a47c47fc
--- /dev/null
+++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/serializing/snippets/symbolrenderers/SimpleRectangularLikeSymbolRendererProvider.java
@@ -0,0 +1,83 @@
+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