Artemis.ViewModels.Profiles.ProfileViewModel.HandleDragging C# (CSharp) Method

HandleDragging() private method

Handles dragging the given layer
private HandleDragging ( System.Windows.Input.MouseEventArgs e, double x, double y, LayerModel hoverLayer ) : void
e System.Windows.Input.MouseEventArgs
x double
y double
hoverLayer LayerModel
return void
        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);
            }
        }