1 package net.mograsim.logic.model.editor.ui;
3 import java.util.Collection;
5 import org.eclipse.swt.graphics.Color;
6 import org.eclipse.swt.widgets.Composite;
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;
15 //TODO: Remove Inheritance
16 public class EditorCanvas extends LogicUICanvas
18 private Collection<Handle> handles;
20 public EditorCanvas(Composite parent, int style, Editor editor)
22 super(parent, style, editor.toBeEdited.submodel);
24 handles = editor.handleManager.getHandles();
25 editor.handleManager.addHandleAddedListener(h ->
26 h.addRedrawListener(this::redrawThreadsafe));
27 //TODO: Is this even necessary? The Handle should be finalized by the gc
28 editor.handleManager.addHandleRemovedListener(h -> h.removeRedrawListener(this::redrawThreadsafe));
30 addZoomedRenderer(gc ->
32 Rectangle visibleRegion = new Rectangle(-offX / zoom, -offY / zoom, gW / zoom, gH / zoom);
33 Color background = Preferences.current().getColor("net.mograsim.logic.ui.color.background");
34 if (background != null)
35 setBackground(background);// this.setBackground, not gc.setBackground to have the background fill the
38 TranslatedGC tgc = new TranslatedGC(gc, 0.0d, 0.0d, 1 / editor.toBeEdited.getSubmodelScale(), false);
39 editor.toBeEdited.outlineRenderer.render(tgc, new Rectangle(-offX / zoom, -offY / zoom, gW / zoom, gH / zoom));
41 handles.forEach(h -> h.render(gc, visibleRegion));