1 package net.mograsim.logic.model;
3 import static net.mograsim.logic.model.preferences.RenderPreferences.DEFAULT_LINE_WIDTH;
5 import org.eclipse.swt.SWT;
7 import net.haspamelodica.swt.helper.gcs.GeneralGC;
8 import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
9 import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
10 import net.mograsim.logic.model.model.LogicModel;
11 import net.mograsim.logic.model.model.components.ModelComponent;
12 import net.mograsim.logic.model.model.wires.Pin;
13 import net.mograsim.logic.model.preferences.RenderPreferences;
15 public class LogicUIRenderer
17 private static final boolean DRAW_PINS = false;
19 private final LogicModel model;
21 public LogicUIRenderer(LogicModel model)
26 public void render(GeneralGC gc, RenderPreferences renderPrefs, Rectangle visibleRegion)
28 gc.setAntialias(SWT.ON);
29 gc.setClipping(visibleRegion);
30 gc.setLineWidth(renderPrefs.getDouble(DEFAULT_LINE_WIDTH));
31 model.getWiresByName().values().forEach(w ->
33 Rectangle bounds = w.getBounds();
34 double lw = gc.getLineWidth();
35 if (visibleRegion.intersects(bounds.x - lw, bounds.y - lw, bounds.width + lw + lw, bounds.height + lw + lw))
36 w.render(gc, renderPrefs);
38 model.getComponentsByName().values().forEach(c -> renderComponent(gc, renderPrefs, c, visibleRegion));
41 private static void renderComponent(GeneralGC gc, RenderPreferences renderPrefs, ModelComponent component, Rectangle visibleRegion)
43 Rectangle bounds = component.getBounds();
44 double lw = gc.getLineWidth();
45 if (visibleRegion.intersects(bounds.x - lw, bounds.y - lw, bounds.width + lw + lw, bounds.height + lw + lw))
47 component.render(gc, renderPrefs, visibleRegion);
50 gc.setBackground(gc.getDevice().getSystemColor(SWT.COLOR_DARK_CYAN));
51 for (Pin p : component.getPins().values())
53 Point pos = p.getPos();
54 gc.fillOval(pos.x - 1, pos.y - 1, 2, 2);