private void SurfaceMouseMove(object sender, MouseEventArgs e) { bool clickable = selectedElements.ClickableAt(e.X, e.Y); if (DrawingMode == DrawingModes.None && !clickable) { Cursor = Cursors.Default; } else if ((!mouseDown && clickable) || (mouseDown && mouseDownElement != null)) { Cursor = Cursors.SizeAll; } else { Cursor = Cursors.Cross; } if (mouseDown) { if (mouseDownElement != null) // an element is currently dragged { selectedElements.HideGrippers(); if (mouseDownElement.Selected) // dragged element has been selected before -> move all { selectedElements.MoveBy(e.X - mX, e.Y - mY); } else // dragged element is not among selected elements -> just move dragged one { mouseDownElement.MoveBy(e.X - mX, e.Y - mY); } mX = e.X; mY = e.Y; Invalidate(); } else if (drawingElement != null) // an element is currently drawn { drawingElement.Width = e.X - drawingElement.Left; drawingElement.Height = e.Y - drawingElement.Top; Invalidate(); } } }