private Point GetDragLocation(long dragPoint) { int x = (int)dragPoint; int y = (int)(dragPoint >> 32); var screenPt = new PixelPoint(x, y); return(_target.PointToClient(screenPt)); }
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); } } }
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)); }