Restructured the Preferences system
[Mograsim.git] / plugins / 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.widgets.Composite;
6
7 import net.haspamelodica.swt.helper.gcs.TranslatedGC;
8 import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
9 import net.mograsim.logic.model.LogicUICanvas;
10 import net.mograsim.logic.model.editor.Editor;
11 import net.mograsim.logic.model.editor.handles.Handle;
12
13 //TODO: Remove Inheritance 
14 public class EditorCanvas extends LogicUICanvas
15 {
16         private Collection<Handle> handles;
17
18         public EditorCanvas(Composite parent, int style, Editor editor)
19         {
20                 super(parent, style, editor.toBeEdited.submodel, editor.renderPrefs);
21
22                 handles = editor.handleManager.getHandles();
23                 editor.handleManager.addHandleAddedListener(h ->
24                 {
25                         redrawThreadsafe();
26                         h.addRedrawListener(this::redrawThreadsafe);
27                 });
28                 // TODO: Is this even necessary? The Handle should be finalized by the gc
29                 editor.handleManager.addHandleRemovedListener(h ->
30                 {
31                         redrawThreadsafe();
32                         h.removeRedrawListener(this::redrawThreadsafe);
33                 });
34
35                 addZoomedRenderer(gc ->
36                 {
37                         Rectangle visibleRegion = new Rectangle(-offX / zoom, -offY / zoom, gW / zoom, gH / zoom);
38
39                         TranslatedGC tgc = new TranslatedGC(gc, 0.0d, 0.0d, 1 / editor.toBeEdited.getSubmodelScale(), false);
40                         editor.toBeEdited.getOutlineRenderer().render(tgc, renderPrefs,
41                                         new Rectangle(-offX / zoom, -offY / zoom, gW / zoom, gH / zoom));
42
43                         handles.forEach(h -> h.render(gc, visibleRegion));
44                 });
45         }
46 }