X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=plugins%2Fnet.mograsim.logic.model%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Fsnippets%2Fsymbolrenderers%2FCenteredTextSymbolRenderer.java;fp=plugins%2Fnet.mograsim.logic.model%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fmodel%2Fsnippets%2Fsymbolrenderers%2FCenteredTextSymbolRenderer.java;h=9a6599a659db930836b3dbc8e44aa996d7a1a3b2;hb=7d05144c25daa53e60fc9ed9fd503546a86567f8;hp=0000000000000000000000000000000000000000;hpb=8bed58cd47f4e53a0a83e066d38864aa6875502f;p=Mograsim.git diff --git a/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/symbolrenderers/CenteredTextSymbolRenderer.java b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/symbolrenderers/CenteredTextSymbolRenderer.java new file mode 100644 index 00000000..9a6599a6 --- /dev/null +++ b/plugins/net.mograsim.logic.model/src/net/mograsim/logic/model/snippets/symbolrenderers/CenteredTextSymbolRenderer.java @@ -0,0 +1,75 @@ +package net.mograsim.logic.model.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.model.model.components.ModelComponent; +import net.mograsim.logic.model.serializing.IdentifyParams; +import net.mograsim.logic.model.snippets.Renderer; +import net.mograsim.logic.model.snippets.SnippetDefinintion; +import net.mograsim.logic.model.snippets.SubmodelComponentSnippetSuppliers; +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 ModelComponent component; + private final String text; + private final double fontHeight; + + public CenteredTextSymbolRenderer(ModelComponent component, CenteredTextParams params) + { + this.component = component; + this.text = params.text; + this.fontHeight = params.fontHeight; + + } + + @Override + public void render(GeneralGC gc, Rectangle visibleRegion) + { + Font oldFont = gc.getFont(); + gc.setFont(new Font(oldFont.getName(), fontHeight, oldFont.getStyle())); + ColorDefinition fg = Preferences.current().getColorDefinition("net.mograsim.logic.model.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); + } + + @Override + public String getIDForSerializing(IdentifyParams idParams) + { + return "centeredText"; + } + + @Override + public CenteredTextParams getParamsForSerializing(IdentifyParams idParams) + { + CenteredTextParams params = new CenteredTextParams(); + params.text = text; + params.fontHeight = fontHeight; + return params; + } + + public static class CenteredTextParams + { + public String text; + public double fontHeight; + } + + static + { + SubmodelComponentSnippetSuppliers.symbolRendererSupplier.setSnippetSupplier(CenteredTextSymbolRenderer.class.getCanonicalName(), + SnippetDefinintion.create(CenteredTextParams.class, CenteredTextSymbolRenderer::new)); + } +} \ No newline at end of file