Added DeserializedSubmodelComponent Editor project
[Mograsim.git] / net.mograsim.logic.ui / src / net / mograsim / logic / ui / LogicUIRenderer.java
1 package net.mograsim.logic.ui;
2
3 import org.eclipse.swt.SWT;
4
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;
11
12 public class LogicUIRenderer
13 {
14         private static final boolean DRAW_PINS = false;
15
16         private final ViewModel model;
17
18         public LogicUIRenderer(ViewModel model)
19         {
20                 this.model = model;
21         }
22
23         public void render(GeneralGC gc, Rectangle visibleRegion)
24         {
25                 gc.setAntialias(SWT.ON);
26                 gc.setClipping(visibleRegion);
27                 gc.setLineWidth(.5);
28                 model.getWires().forEach(w ->
29                 {
30                         Rectangle bounds = w.getBounds();
31                         double lw = gc.getLineWidth();
32                         if (visibleRegion.intersects(bounds.x - lw, bounds.y - lw, bounds.width + lw + lw, bounds.height + lw + lw))
33                                 w.render(gc);
34                 });
35                 model.getComponents().forEach(c -> renderComponent(gc, c, visibleRegion));
36         }
37
38         private static void renderComponent(GeneralGC gc, GUIComponent component, Rectangle visibleRegion)
39         {
40                 Rectangle bounds = component.getBounds();
41                 double lw = gc.getLineWidth();
42                 if (visibleRegion.intersects(bounds.x - lw, bounds.y - lw, bounds.width + lw + lw, bounds.height + lw + lw))
43                 {
44                         component.render(gc, visibleRegion);
45                         if (DRAW_PINS)
46                         {
47                                 gc.setBackground(gc.getDevice().getSystemColor(SWT.COLOR_DARK_CYAN));
48                                 for (Pin p : component.getPins().values())
49                                 {
50                                         Point pos = p.getPos();
51                                         gc.fillOval(pos.x - 1, pos.y - 1, 2, 2);
52                                 }
53                         }
54                 }
55         }
56
57 }