Example #1
0
        protected override bool OnMotionNotifyEvent(Gdk.EventMotion evnt)
        {
            double dx = evnt.X;
            double dy = evnt.Y;

            if (MouseGrabNode != null)
            {
                if (MouseGrabNode.Draggable && evnt.State.HasFlag(Gdk.ModifierType.Button1Mask))
                {
                    if (!dragging && (Math.Abs(DragStart.X - dx) > 5 || Math.Abs(DragStart.Y - dy) > 5))
                    {
                        dragging = true;
                    }

                    if (dragging)
                    {
                        var point = engine.TransformPoint(MouseGrabNode.Parent, dx, dy);
                        MouseGrabNode.X = point.X - DragOffset.X;
                        MouseGrabNode.Y = point.Y - DragOffset.Y;
                        QueueDraw();
                    }
                }
                else
                {
                    var point = engine.TransformPoint(MouseGrabNode, evnt.X, evnt.Y);
                    MouseGrabNode.MouseMotion(point.X, point.Y, (ModifierType)evnt.State);
                }
            }
            else
            {
                HoveredNode = engine.InputNodeAt(root, evnt.X, evnt.Y);
                if (HoveredNode != null)
                {
                    var point = engine.TransformPoint(HoveredNode, evnt.X, evnt.Y);
                    HoveredNode.MouseMotion(point.X, point.Y, (ModifierType)evnt.State);
                }
            }

            return(base.OnMotionNotifyEvent(evnt));
        }