Пример #1
0
        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);
        }
Пример #2
0
        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);
                }
            }
        }