Restructured the Preferences system
[Mograsim.git] / plugins / net.mograsim.logic.model / src / net / mograsim / logic / model / LogicUIRenderer.java
1 package net.mograsim.logic.model;
2
3 import static net.mograsim.logic.model.preferences.RenderPreferences.DEFAULT_LINE_WIDTH;
4
5 import org.eclipse.swt.SWT;
6
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;
14
15 public class LogicUIRenderer
16 {
17         private static final boolean DRAW_PINS = false;
18
19         private final LogicModel model;
20
21         public LogicUIRenderer(LogicModel model)
22         {
23                 this.model = model;
24         }
25
26         public void render(GeneralGC gc, RenderPreferences renderPrefs, Rectangle visibleRegion)
27         {
28                 gc.setAntialias(SWT.ON);
29                 gc.setClipping(visibleRegion);
30                 gc.setLineWidth(renderPrefs.getDouble(DEFAULT_LINE_WIDTH));
31                 model.getWiresByName().values().forEach(w ->
32                 {
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);
37                 });
38                 model.getComponentsByName().values().forEach(c -> renderComponent(gc, renderPrefs, c, visibleRegion));
39         }
40
41         private static void renderComponent(GeneralGC gc, RenderPreferences renderPrefs, ModelComponent component, Rectangle visibleRegion)
42         {
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))
46                 {
47                         component.render(gc, renderPrefs, visibleRegion);
48                         if (DRAW_PINS)
49                         {
50                                 gc.setBackground(gc.getDevice().getSystemColor(SWT.COLOR_DARK_CYAN));
51                                 for (Pin p : component.getPins().values())
52                                 {
53                                         Point pos = p.getPos();
54                                         gc.fillOval(pos.x - 1, pos.y - 1, 2, 2);
55                                 }
56                         }
57                 }
58         }
59
60 }