1 package net.mograsim.logic.ui;
3 import org.eclipse.swt.SWT;
5 import net.haspamelodica.swt.helper.gcs.GeneralGC;
6 import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
7 import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
8 import net.mograsim.logic.ui.model.ViewModel;
9 import net.mograsim.logic.ui.model.components.GUIComponent;
10 import net.mograsim.logic.ui.model.wires.Pin;
12 public class LogicUIRenderer
14 private static final boolean DRAW_PINS = false;
16 private final ViewModel model;
18 public LogicUIRenderer(ViewModel model)
23 public void render(GeneralGC gc, Rectangle visibleRegion)
25 gc.setClipping(visibleRegion);
27 model.getWires().forEach(w ->
29 Rectangle bounds = w.getBounds();
30 double lw = gc.getLineWidth();
31 if (visibleRegion.intersects(bounds.x - lw, bounds.y - lw, bounds.width + lw + lw, bounds.height + lw + lw))
34 model.getComponents().forEach(c -> renderComponent(gc, c, visibleRegion));
37 private static void renderComponent(GeneralGC gc, GUIComponent component, Rectangle visibleRegion)
39 Rectangle bounds = component.getBounds();
40 double lw = gc.getLineWidth();
41 if (visibleRegion.intersects(bounds.x - lw, bounds.y - lw, bounds.width + lw + lw, bounds.height + lw + lw))
43 component.render(gc, visibleRegion);
46 gc.setBackground(gc.getDevice().getSystemColor(SWT.COLOR_DARK_CYAN));
47 for (Pin p : component.getPins())
49 Point pos = p.getPos();
50 gc.fillOval(pos.x - 1, pos.y - 1, 2, 2);