1 package net.mograsim.logic.model.editor.states;
3 import org.eclipse.swt.SWT;
4 import org.eclipse.swt.widgets.Display;
6 import net.haspamelodica.swt.helper.swtobjectwrappers.Point;
7 import net.haspamelodica.swt.helper.swtobjectwrappers.Rectangle;
8 import net.haspamelodica.swt.helper.zoomablecanvas.ZoomableCanvas.ZoomedRenderer;
9 import net.mograsim.logic.model.editor.Editor;
10 import net.mograsim.logic.model.editor.Selection;
11 import net.mograsim.logic.model.editor.handles.Handle;
13 public class BoxSelectionState extends EditorState
16 private double mX, mY;
18 private final ZoomedRenderer boxRenderer = gc ->
23 gc.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_DARK_YELLOW));
24 gc.drawRectangle(origin.x, origin.y, mX - origin.x, mY - origin.y);
28 public BoxSelectionState(Editor editor, StateManager manager)
30 super(editor, manager);
36 editor.gui.logicCanvas.addZoomedRenderer(boxRenderer);
37 editor.gui.logicCanvas.redrawThreadsafe();
43 editor.gui.logicCanvas.removeZoomedRenderer(boxRenderer);
44 editor.gui.logicCanvas.redrawThreadsafe();
48 public void boxSelect()
50 manager.setState(new SelectionState(editor, manager));
54 public void clicked(Point clicked, int stateMask)
58 origin = new Point(clicked.x, clicked.y);
63 Selection s = editor.getSelection();
65 boolean leftToRight = mX > origin.x, topToBottom = mY > origin.y;
66 double x = leftToRight ? origin.x : mX, y = topToBottom ? origin.y : mY,
67 width = leftToRight ? mX - origin.x : origin.x - mX,
68 height = topToBottom ? mY - origin.y : origin.y - mY;
70 Rectangle selected = new Rectangle(x, y, width, height);
71 for (Handle h : editor.handleManager.getHandles())
73 Rectangle hBounds = h.getBounds();
74 if (selected.contains(hBounds.x, hBounds.y)
75 && selected.contains(hBounds.x + hBounds.width, hBounds.y + hBounds.height))
80 manager.setState(new SelectionState(editor, manager));
85 public void mouseMoved(double x, double y)
89 editor.gui.logicCanvas.redrawThreadsafe();