Пример #1
0
        private Point GetDragLocation(long dragPoint)
        {
            int x = (int)dragPoint;
            int y = (int)(dragPoint >> 32);

            var screenPt = new PixelPoint(x, y);

            return(_target.PointToClient(screenPt));
        }
Пример #2
0
        public void SceneInvalidated(IInputRoot root, Rect rect)
        {
            var clientPoint = root.PointToClient(Position);

            if (rect.Contains(clientPoint))
            {
                if (_pointer.Captured == null)
                {
                    SetPointerOver(this, 0 /* TODO: proper timestamp */, root, clientPoint, InputModifiers.None);
                }
                else
                {
                    SetPointerOver(this, 0 /* TODO: proper timestamp */, root, _pointer.Captured, InputModifiers.None);
                }
            }
        }
Пример #3
0
        private void ProcessMouseEvents(RawPointerEventArgs e)
        {
            if (!_initialInputModifiers.HasValue)
            {
                _initialInputModifiers = e.InputModifiers & MOUSE_INPUTMODIFIERS;
            }


            void CheckDraggingAccepted(RawInputModifiers changedMouseButton)
            {
                if (_initialInputModifiers.Value.HasFlag(changedMouseButton))
                {
                    var result = RaiseEventAndUpdateCursor(RawDragEventType.Drop, e.Root, e.Position, e.InputModifiers);
                    UpdateCursor(null, DragDropEffects.None);
                    _result.OnNext(result);
                }
                else
                {
                    CancelDragging();
                }
                e.Handled = true;
            }

            switch (e.Type)
            {
            case RawPointerEventType.LeftButtonDown:
            case RawPointerEventType.RightButtonDown:
            case RawPointerEventType.MiddleButtonDown:
            case RawPointerEventType.NonClientLeftButtonDown:
                CancelDragging();
                e.Handled = true;
                return;

            case RawPointerEventType.LeaveWindow:
                RaiseEventAndUpdateCursor(RawDragEventType.DragLeave, e.Root, e.Position, e.InputModifiers); break;

            case RawPointerEventType.LeftButtonUp:
                CheckDraggingAccepted(RawInputModifiers.LeftMouseButton); break;

            case RawPointerEventType.MiddleButtonUp:
                CheckDraggingAccepted(RawInputModifiers.MiddleMouseButton); break;

            case RawPointerEventType.RightButtonUp:
                CheckDraggingAccepted(RawInputModifiers.RightMouseButton); break;

            case RawPointerEventType.Move:
                var mods = e.InputModifiers & MOUSE_INPUTMODIFIERS;
                if (_initialInputModifiers.Value != mods)
                {
                    CancelDragging();
                    e.Handled = true;
                    return;
                }

                if (e.Root != _lastRoot)
                {
                    if (_lastRoot != null)
                    {
                        RaiseEventAndUpdateCursor(RawDragEventType.DragLeave, _lastRoot, _lastRoot.PointToClient(e.Root.PointToScreen(e.Position)), e.InputModifiers);
                    }
                    RaiseEventAndUpdateCursor(RawDragEventType.DragEnter, e.Root, e.Position, e.InputModifiers);
                }
                else
                {
                    RaiseEventAndUpdateCursor(RawDragEventType.DragOver, e.Root, e.Position, e.InputModifiers);
                }
                break;
            }
        }
        private Point GetDragLocation(UnmanagedMethods.POINT dragPoint)
        {
            var screenPt = new PixelPoint(dragPoint.X, dragPoint.Y);

            return(_target.PointToClient(screenPt));
        }