public void MouseMove(Point p) { var extents = GetExtents(lineStart, p); if (lineEnd != Point.Empty) { var oldExtents = GetExtents(lineStart, lineEnd); extents = Rectangle.Union(oldExtents, extents); } lineEnd = p; validConnection = false; var obj = view.HitTest(p); if (obj is Pin) { validConnection = (obj as Pin).Flow == Flow.InFlow ^ pin.Flow == Flow.InFlow; } diagram.Invalidate(extents); }
protected override void OnMouseDown(MouseEventArgs e) { var mouse = MouseZoom(e.Location); var obj = view.HitTest(mouse); if (obj is Shape) { if (ModifierKeys == Keys.Control) { Debug.WriteLine("toggling object"); View.Selection.Toggle(obj); Invalidate(); } else if (ModifierKeys == Keys.None) { View.Selection.Select(obj); if (!ReadOnly) { StartShapeDrag((Shape)obj, mouse); } Invalidate(); } } else if (obj is Pin && !ReadOnly && ModifierKeys == Keys.None) { rubberBand = new RubberBand(this, view, obj as Pin); } else if (obj is Segment && !ReadOnly) { var connector = (obj as Segment).Connector; if (ModifierKeys == Keys.Control) { View.Selection.Toggle(connector); Invalidate(); } else if (ModifierKeys == Keys.None) { View.Selection.Select(connector); StartSegmentDrag(mouse, (obj as Segment)); Invalidate(); } } else { // User clicked on background if (ModifierKeys == Keys.Control) { selectionFrame = new SelectionFrame(PointToScreen(e.Location), BackColor); } else if (ModifierKeys == Keys.None) { if (View.Selection.Count != 0) { Invalidate(); View.Selection.Clear(); } panning = true; panClick = mouse; minLeft = Math.Min(0, Parent.Width - Width); minTop = Math.Min(0, Parent.Height - Height); } } }