X-Git-Url: https://mograsim.net/gitweb/?a=blobdiff_plain;f=net.mograsim.logic.ui%2Fsrc%2Fnet%2Fmograsim%2Flogic%2Fui%2FLogicUICanvas.java;h=2465e4699e33f4d9949ac37cf3260c5f099fe3ca;hb=f14ea37d69488dd51518a36413af7176916b8bd7;hp=3a080973212ad59c3f4dcb56f73c8a1b9cd31828;hpb=07faf07e3acb8b2afdc2bf65a46bc868faaed0f8;p=Mograsim.git diff --git a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUICanvas.java b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUICanvas.java index 3a080973..2465e469 100644 --- a/net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUICanvas.java +++ b/net.mograsim.logic.ui/src/net/mograsim/logic/ui/LogicUICanvas.java @@ -1,19 +1,14 @@ package net.mograsim.logic.ui; -import java.util.function.Consumer; - import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; -import net.haspamelodica.swt.helper.gcs.GeneralGC; import net.haspamelodica.swt.helper.swtobjectwrappers.Point; import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle; import net.haspamelodica.swt.helper.zoomablecanvas.ZoomableCanvas; import net.mograsim.logic.ui.model.ViewModel; import net.mograsim.logic.ui.model.components.GUIComponent; -import net.mograsim.logic.ui.model.wires.GUIWire; -import net.mograsim.logic.ui.model.wires.Pin; /** * Simulation visualizer canvas. @@ -22,8 +17,6 @@ import net.mograsim.logic.ui.model.wires.Pin; */ public class LogicUICanvas extends ZoomableCanvas { - private static final boolean DRAW_PINS = false; - private final ViewModel model; public LogicUICanvas(Composite parent, int style, ViewModel model) @@ -32,72 +25,13 @@ public class LogicUICanvas extends ZoomableCanvas this.model = model; - Consumer redrawConsumer = o -> redrawThreadsafe(); - Consumer pinAddedListener = p -> - { - p.addPinMovedListener(redrawConsumer); - redrawThreadsafe(); - }; - Consumer pinRemovedListener = p -> - { - p.removePinMovedListener(redrawConsumer); - redrawThreadsafe(); - }; - Consumer componentAddedListener = c -> - { - c.addComponentLookChangedListener(redrawConsumer); - c.addComponentMovedListener(redrawConsumer); - c.addPinAddedListener(pinAddedListener); - c.addPinRemovedListener(pinRemovedListener); - redrawThreadsafe(); - }; - model.addComponentAddedListener(componentAddedListener); - model.getComponents().forEach(componentAddedListener); - model.addComponentRemovedListener(c -> - { - c.removeComponentLookChangedListener(redrawConsumer); - c.removeComponentMovedListener(redrawConsumer); - c.removePinAddedListener(pinAddedListener); - c.removePinRemovedListener(pinRemovedListener); - redrawThreadsafe(); - }); - Consumer wireAddedListener = w -> - { - w.addWireLookChangedListener(redrawConsumer); - redrawThreadsafe(); - }; - model.addWireAddedListener(wireAddedListener); - model.getWires().forEach(wireAddedListener); - model.addWireRemovedListener(w -> - { - w.removeWireLookChangedListener(redrawConsumer); - redrawThreadsafe(); - }); + LogicUIRenderer renderer = new LogicUIRenderer(model); + addZoomedRenderer(gc -> renderer.render(gc, new Rectangle(-offX / zoom, -offY / zoom, gW / zoom, gH / zoom))); + model.addRedrawListener(this::redrawThreadsafe); - addZoomedRenderer(gc -> - { - gc.setLineWidth(.5); - model.getWires().forEach(w -> w.render(gc)); - Rectangle visibleRegion = new Rectangle(offX, offY, gW / zoom, gH / zoom); - model.getComponents().forEach(c -> drawComponent(gc, c, visibleRegion)); - }); addListener(SWT.MouseDown, this::mouseDown); } - private void drawComponent(GeneralGC gc, GUIComponent component, Rectangle visibleRegion) - { - component.render(gc, visibleRegion); - if (DRAW_PINS) - { - gc.setBackground(getDisplay().getSystemColor(SWT.COLOR_DARK_CYAN)); - for (Pin p : component.getPins()) - { - Point pos = p.getPos(); - gc.fillOval(pos.x - 1, pos.y - 1, 2, 2); - } - } - } - private void mouseDown(Event e) { if (e.button == 1)