Rev 1408 | Details | Compare with Previous | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 1399 | chris | 1 | using System; |
| 2 | using System.Collections.Generic; |
||
| 3 | using System.Linq; |
||
| 4 | using System.Text; |
||
| 5 | using System.Threading.Tasks; |
||
| 6 | using System.Windows.Forms; |
||
| 7 | |||
| 1405 | chris | 8 | using ShapeEditor.file.shapes; |
| 9 | |||
| 1399 | chris | 10 | namespace ShapeEditor.interaction |
| 11 | { |
||
| 12 | public class SelectMode : InteractionMode |
||
| 13 | { |
||
| 1405 | chris | 14 | private bool mLeftButtonDown = false; |
| 1399 | chris | 15 | |
| 1404 | chris | 16 | private int mLastX = 0; |
| 17 | private int mLastY = 0; |
||
| 1399 | chris | 18 | |
| 1405 | chris | 19 | private BaseShapeElement mSelectedElement = null; |
| 1406 | chris | 20 | private bool mMoveEntireObject = false; |
| 1405 | chris | 21 | private int mSelectedHandle = -1; |
| 22 | |||
| 1399 | chris | 23 | public SelectMode(MainForm parent) |
| 1404 | chris | 24 | : base(parent, InteractionMode.SELECT) |
| 1399 | chris | 25 | { |
| 26 | } |
||
| 27 | |||
| 1420 | chris | 28 | public override void MouseMove(MouseEventArgs e, bool isMouseDown = false) |
| 1399 | chris | 29 | { |
| 1405 | chris | 30 | mSelectedElement = mParent.CurrentDoc.GetSelectedElement(); |
| 31 | |||
| 32 | if (mSelectedElement == null) |
||
| 33 | return; |
||
| 34 | |||
| 1408 | chris | 35 | float offsetX = mParent.CurrentDoc.Sprite.transform.x; |
| 36 | float offsetY = mParent.CurrentDoc.Sprite.transform.y; |
||
| 37 | |||
| 1405 | chris | 38 | if (e.Button == MouseButtons.Left) |
| 1404 | chris | 39 | { |
| 1405 | chris | 40 | if (!mLeftButtonDown) |
| 41 | { |
||
| 42 | // mouse down |
||
| 1406 | chris | 43 | if (mSelectedElement.FindHandleAt(e.X, e.Y) == -1) |
| 44 | { |
||
| 45 | // priority to current selection's handles |
||
| 46 | mSelectedElement = mParent.CurrentDoc.SelectAt(e.X, e.Y); |
||
| 47 | if (mSelectedElement == null) |
||
| 48 | return; |
||
| 49 | } |
||
| 50 | |||
| 1405 | chris | 51 | mLeftButtonDown = true; |
| 52 | mSelectedHandle = mSelectedElement.FindHandleAt(e.X, e.Y); |
||
| 53 | if (mSelectedHandle != -1) |
||
| 1406 | chris | 54 | { |
| 55 | mMoveEntireObject = false; |
||
| 1408 | chris | 56 | mParent.GlView.Cursor = mSelectedElement.GetCursor(mSelectedHandle); |
| 1406 | chris | 57 | } |
| 58 | else if (mSelectedElement.IsInside(e.X, e.Y)) |
||
| 59 | { |
||
| 60 | mMoveEntireObject = true; |
||
| 61 | mParent.GlView.Cursor = Cursors.SizeAll; |
||
| 62 | } |
||
| 1405 | chris | 63 | } |
| 64 | else |
||
| 65 | { |
||
| 66 | // mouse drag |
||
| 67 | int dx = e.X - mLastX; |
||
| 68 | int dy = e.Y - mLastY; |
||
| 69 | |||
| 70 | if (mSelectedHandle != -1) |
||
| 71 | { |
||
| 1408 | chris | 72 | mSelectedElement.DragHandle(mSelectedHandle, dx, dy); |
| 1405 | chris | 73 | } |
| 1406 | chris | 74 | else if (mMoveEntireObject) |
| 75 | { |
||
| 1408 | chris | 76 | mSelectedElement.DragMove(dx, dy); |
| 1406 | chris | 77 | } |
| 1405 | chris | 78 | } |
| 1404 | chris | 79 | } |
| 1405 | chris | 80 | else if (e.Button == MouseButtons.None) |
| 1404 | chris | 81 | { |
| 1408 | chris | 82 | int handle = mSelectedElement.FindHandleAt(e.X, e.Y); |
| 83 | if (handle != -1) |
||
| 1405 | chris | 84 | { |
| 1408 | chris | 85 | mParent.GlView.Cursor = mSelectedElement.GetCursor(handle); |
| 1405 | chris | 86 | } |
| 1406 | chris | 87 | else if (mSelectedElement.IsInside(e.X, e.Y)) |
| 88 | { |
||
| 1408 | chris | 89 | mParent.GlView.Cursor = Cursors.SizeAll; |
| 1406 | chris | 90 | } |
| 1405 | chris | 91 | else |
| 92 | { |
||
| 93 | mParent.GlView.Cursor = Cursors.Arrow; |
||
| 94 | } |
||
| 1404 | chris | 95 | } |
| 96 | |||
| 97 | mLastX = e.X; |
||
| 98 | mLastY = e.Y; |
||
| 1399 | chris | 99 | } |
| 100 | |||
| 101 | public override void MouseUp(MouseEventArgs e) |
||
| 102 | { |
||
| 1405 | chris | 103 | if (e.Button == MouseButtons.Left) |
| 104 | { |
||
| 105 | if (mSelectedElement != null) |
||
| 106 | { |
||
| 107 | mSelectedElement.FixCoordinates(); |
||
| 108 | } |
||
| 109 | |||
| 110 | mLeftButtonDown = false; |
||
| 111 | mSelectedHandle = -1; |
||
| 1406 | chris | 112 | mMoveEntireObject = false; |
| 1405 | chris | 113 | } |
| 114 | |||
| 115 | mSelectedHandle = -1; |
||
| 1399 | chris | 116 | } |
| 1400 | chris | 117 | |
| 118 | public override void Render() |
||
| 119 | { |
||
| 120 | } |
||
| 1399 | chris | 121 | } |
| 122 | } |