Rev 1408 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ShapeEditor.file.shapes;
namespace ShapeEditor.interaction
{
public class SelectMode : InteractionMode
{
private bool mLeftButtonDown = false;
private int mLastX = 0;
private int mLastY = 0;
private BaseShapeElement mSelectedElement = null;
private bool mMoveEntireObject = false;
private int mSelectedHandle = -1;
public SelectMode(MainForm parent)
: base(parent, InteractionMode.SELECT)
{
}
public override void MouseMove(MouseEventArgs e, bool isMouseDown = false)
{
mSelectedElement = mParent.CurrentDoc.GetSelectedElement();
if (mSelectedElement == null)
return;
float offsetX = mParent.CurrentDoc.Sprite.transform.x;
float offsetY = mParent.CurrentDoc.Sprite.transform.y;
if (e.Button == MouseButtons.Left)
{
if (!mLeftButtonDown)
{
// mouse down
if (mSelectedElement.FindHandleAt(e.X, e.Y) == -1)
{
// priority to current selection's handles
mSelectedElement = mParent.CurrentDoc.SelectAt(e.X, e.Y);
if (mSelectedElement == null)
return;
}
mLeftButtonDown = true;
mSelectedHandle = mSelectedElement.FindHandleAt(e.X, e.Y);
if (mSelectedHandle != -1)
{
mMoveEntireObject = false;
mParent.GlView.Cursor = mSelectedElement.GetCursor(mSelectedHandle);
}
else if (mSelectedElement.IsInside(e.X, e.Y))
{
mMoveEntireObject = true;
mParent.GlView.Cursor = Cursors.SizeAll;
}
}
else
{
// mouse drag
int dx = e.X - mLastX;
int dy = e.Y - mLastY;
if (mSelectedHandle != -1)
{
mSelectedElement.DragHandle(mSelectedHandle, dx, dy);
}
else if (mMoveEntireObject)
{
mSelectedElement.DragMove(dx, dy);
}
}
}
else if (e.Button == MouseButtons.None)
{
int handle = mSelectedElement.FindHandleAt(e.X, e.Y);
if (handle != -1)
{
mParent.GlView.Cursor = mSelectedElement.GetCursor(handle);
}
else if (mSelectedElement.IsInside(e.X, e.Y))
{
mParent.GlView.Cursor = Cursors.SizeAll;
}
else
{
mParent.GlView.Cursor = Cursors.Arrow;
}
}
mLastX = e.X;
mLastY = e.Y;
}
public override void MouseUp(MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
if (mSelectedElement != null)
{
mSelectedElement.FixCoordinates();
}
mLeftButtonDown = false;
mSelectedHandle = -1;
mMoveEntireObject = false;
}
mSelectedHandle = -1;
}
public override void Render()
{
}
}
}