The final restructured version for automatic build using maven tycho
[Mograsim.git] / plugins / net.mograsim.logic.model / src / net / mograsim / logic / model / LogicUIRenderer.java
1 package net.mograsim.logic.model;
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.model.model.LogicModel;
9 import net.mograsim.logic.model.model.components.ModelComponent;
10 import net.mograsim.logic.model.model.wires.Pin;
11 import net.mograsim.preferences.Preferences;
12
13 public class LogicUIRenderer
14 {
15         private static final boolean DRAW_PINS = false;
16
17         private final LogicModel model;
18
19         public LogicUIRenderer(LogicModel model)
20         {
21                 this.model = model;
22         }
23
24         public void render(GeneralGC gc, Rectangle visibleRegion)
25         {
26                 gc.setAntialias(SWT.ON);
27                 gc.setClipping(visibleRegion);
28                 gc.setLineWidth(Preferences.current().getDouble("net.mograsim.logic.model.linewidth.default"));
29                 model.getWiresByName().values().forEach(w ->
30                 {
31                         Rectangle bounds = w.getBounds();
32                         double lw = gc.getLineWidth();
33                         if (visibleRegion.intersects(bounds.x - lw, bounds.y - lw, bounds.width + lw + lw, bounds.height + lw + lw))
34                                 w.render(gc);
35                 });
36                 model.getComponentsByName().values().forEach(c -> renderComponent(gc, c, visibleRegion));
37         }
38
39         private static void renderComponent(GeneralGC gc, ModelComponent component, Rectangle visibleRegion)
40         {
41                 Rectangle bounds = component.getBounds();
42                 double lw = gc.getLineWidth();
43                 if (visibleRegion.intersects(bounds.x - lw, bounds.y - lw, bounds.width + lw + lw, bounds.height + lw + lw))
44                 {
45                         component.render(gc, visibleRegion);
46                         if (DRAW_PINS)
47                         {
48                                 gc.setBackground(gc.getDevice().getSystemColor(SWT.COLOR_DARK_CYAN));
49                                 for (Pin p : component.getPins().values())
50                                 {
51                                         Point pos = p.getPos();
52                                         gc.fillOval(pos.x - 1, pos.y - 1, 2, 2);
53                                 }
54                         }
55                 }
56         }
57
58 }