void OnDragged(int x, int y)
{
if (!ViewObjects)
{
OnClicked(x, y);
}
else
{
if (!draggingObject)
{
return;
}
ObjectData data = objectEditor.SelectedObjectData;
if (data != null && data.HasXY())
{
int newX, newY;
if (gdkState.HasFlag(Gdk.ModifierType.ControlMask) || data.HasShortenedXY())
{
newX = x - XOffset;
newY = y - XOffset;
}
else
{
// Move objects in increments of 8 pixels
int unit = 8;
int unitLog = (int)Math.Log(unit, 2);
int dataX = data.GetX() + unit / 2;
int dataY = data.GetY() + unit / 2;
int alignX = (dataX) % unit;
int alignY = (dataY) % unit;
newX = (x - XOffset - alignX) >> unitLog;
newY = (y - YOffset - alignY) >> unitLog;
newX = newX * unit + alignX + unit / 2;
newY = newY * unit + alignY + unit / 2;
}
if (newX >= 0 && newX < 256 && newY >= 0 && newY < 256)
{
data.SetX((byte)newX);
data.SetY((byte)newY);
}
QueueDraw();
}
}
}