private void HandleDragging(MouseEventArgs e, double x, double y, LayerModel hoverLayer)
{
// Reset the dragging state on mouse release
if (e.LeftButton == MouseButtonState.Released ||
(_draggingLayer != null && SelectedLayer != _draggingLayer))
{
_draggingLayerOffset = null;
_draggingLayer = null;
return;
}
if (SelectedLayer == null || (SelectedLayer.LayerType != null && !SelectedLayer.LayerType.ShowInEdtor))
return;
// Setup the dragging state on mouse press
if (_draggingLayerOffset == null && hoverLayer != null && e.LeftButton == MouseButtonState.Pressed)
{
var layerRect = hoverLayer.Properties.GetRect(1);
_draggingLayerOffset = new Point(x - SelectedLayer.Properties.X, y - SelectedLayer.Properties.Y);
_draggingLayer = hoverLayer;
// Detect dragging if cursor is in the bottom right
_resizing = Math.Sqrt(Math.Pow(x - layerRect.BottomRight.X, 2) +
Math.Pow(y - layerRect.BottomRight.Y, 2)) < 0.6;
}
if (_draggingLayerOffset == null || _draggingLayer == null || (_draggingLayer != SelectedLayer))
return;
var draggingProps = _draggingLayer.Properties;
// If no setup or reset was done, handle the actual dragging action
if (_resizing)
{
draggingProps.Width = (int) Math.Round(x - draggingProps.X);
draggingProps.Height = (int) Math.Round(y - draggingProps.Y);
if (draggingProps.Width < 1)
draggingProps.Width = 1;
if (draggingProps.Height < 1)
draggingProps.Height = 1;
}
else
{
draggingProps.X = (int) Math.Round(x - _draggingLayerOffset.Value.X);
draggingProps.Y = (int) Math.Round(y - _draggingLayerOffset.Value.Y);
}
}