aedaa481f4343b7831f07171c037ea7ef4e4eed1
[Mograsim.git] / net.mograsim.logic.model.editor / src / net / mograsim / logic / model / editor / ui / EditorCanvas.java
1 package net.mograsim.logic.model.editor.ui;
2
3 import java.util.Collection;
4
5 import org.eclipse.swt.graphics.Color;
6 import org.eclipse.swt.widgets.Composite;
7
8 import net.haspamelodica.swt.helper.gcs.TranslatedGC;
9 import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
10 import net.mograsim.logic.model.LogicUICanvas;
11 import net.mograsim.logic.model.editor.Editor;
12 import net.mograsim.logic.model.editor.handles.Handle;
13 import net.mograsim.preferences.Preferences;
14
15 //TODO: Remove Inheritance 
16 public class EditorCanvas extends LogicUICanvas
17 {
18         private Collection<Handle> handles;
19
20         public EditorCanvas(Composite parent, int style, Editor editor)
21         {
22                 super(parent, style, editor.toBeEdited.submodel);
23
24                 handles = editor.handleManager.getHandles();
25                 editor.handleManager.addHandleAddedListener(h ->
26                 {
27                         redrawThreadsafe();
28                         h.addRedrawListener(this::redrawThreadsafe);
29                 });
30                 // TODO: Is this even necessary? The Handle should be finalized by the gc
31                 editor.handleManager.addHandleRemovedListener(h ->
32                 {
33                         redrawThreadsafe();
34                         h.removeRedrawListener(this::redrawThreadsafe);
35                 });
36
37                 addZoomedRenderer(gc ->
38                 {
39                         Rectangle visibleRegion = new Rectangle(-offX / zoom, -offY / zoom, gW / zoom, gH / zoom);
40                         Color background = Preferences.current().getColor("net.mograsim.logic.model.color.background");
41                         if (background != null)
42                                 setBackground(background);// this.setBackground, not gc.setBackground to have the background fill the
43                                                                                         // canvas
44
45                         TranslatedGC tgc = new TranslatedGC(gc, 0.0d, 0.0d, 1 / editor.toBeEdited.getSubmodelScale(), false);
46                         editor.toBeEdited.getOutlineRenderer().render(tgc, new Rectangle(-offX / zoom, -offY / zoom, gW / zoom, gH / zoom));
47
48                         handles.forEach(h -> h.render(gc, visibleRegion));
49                 });
50         }
51 }