1 package net.mograsim.logic.ui;
3 import org.eclipse.swt.SWT;
4 import org.eclipse.swt.widgets.Composite;
5 import org.eclipse.swt.widgets.Event;
7 import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
8 import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
9 import net.haspamelodica.swt.helper.zoomablecanvas.ZoomableCanvas;
10 import net.mograsim.logic.ui.model.ViewModel;
11 import net.mograsim.logic.ui.model.components.GUIComponent;
14 * Simulation visualizer canvas.
16 * @author Daniel Kirschten
18 public class LogicUICanvas extends ZoomableCanvas
20 private final ViewModel model;
22 public LogicUICanvas(Composite parent, int style, ViewModel model)
28 LogicUIRenderer renderer = new LogicUIRenderer(model);
29 addZoomedRenderer(gc -> renderer.render(gc, new Rectangle(offX, offY, gW / zoom, gH / zoom)));
30 model.addRedrawListener(this::redrawThreadsafe);
32 addListener(SWT.MouseDown, this::mouseDown);
35 private void mouseDown(Event e)
39 Point click = displayToWorldCoords(e.x, e.y);
40 for (GUIComponent component : model.getComponents())
41 if (component.getBounds().contains(click) && component.clicked(click.x, click.y))