private bool ProcessKeyEvent(EventKey evnt) { _lastKeyEventTimestamp = evnt.Time; if (_imContext.FilterKeypress(evnt)) return true; var e = new RawKeyEventArgs( GtkKeyboardDevice.Instance, evnt.Time, evnt.Type == EventType.KeyPress ? RawKeyEventType.KeyDown : RawKeyEventType.KeyUp, GtkKeyboardDevice.ConvertKey(evnt.Key), GetModifierKeys(evnt.State)); Input(e); return true; }
public void Impl_Input_Should_Pass_Input_To_InputManager() { using (Locator.CurrentMutable.WithResolver()) { this.RegisterServices(); var impl = new Mock<ITopLevelImpl>(); impl.SetupAllProperties(); var target = new TestTopLevel(impl.Object); var input = new RawKeyEventArgs( new Mock<IKeyboardDevice>().Object, 0, RawKeyEventType.KeyDown, Key.A, "A"); impl.Object.Input(input); var inputManagerMock = Mock.Get(InputManager.Instance); inputManagerMock.Verify(x => x.Process(input)); } }
protected virtual IntPtr WndProc(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam) { bool unicode = UnmanagedMethods.IsWindowUnicode(hWnd); const double wheelDelta = 120.0; uint timestamp = unchecked((uint)UnmanagedMethods.GetMessageTime()); RawInputEventArgs e = null; WindowsMouseDevice.Instance.CurrentWindow = this; switch ((UnmanagedMethods.WindowsMessage)msg) { case UnmanagedMethods.WindowsMessage.WM_ACTIVATE: var wa = (UnmanagedMethods.WindowActivate)((int)wParam & 0xffff); switch (wa) { case UnmanagedMethods.WindowActivate.WA_ACTIVE: case UnmanagedMethods.WindowActivate.WA_CLICKACTIVE: if (Activated != null) { Activated(); } break; case UnmanagedMethods.WindowActivate.WA_INACTIVE: if (Deactivated != null) { Deactivated(); } break; } return IntPtr.Zero; case UnmanagedMethods.WindowsMessage.WM_DESTROY: if (Closed != null) { UnmanagedMethods.UnregisterClass(_className, Marshal.GetHINSTANCE(GetType().Module)); Closed(); } return IntPtr.Zero; case UnmanagedMethods.WindowsMessage.WM_KEYDOWN: case UnmanagedMethods.WindowsMessage.WM_SYSKEYDOWN: e = new RawKeyEventArgs( WindowsKeyboardDevice.Instance, timestamp, RawKeyEventType.KeyDown, KeyInterop.KeyFromVirtualKey((int)wParam), WindowsKeyboardDevice.Instance.Modifiers); break; case UnmanagedMethods.WindowsMessage.WM_KEYUP: case UnmanagedMethods.WindowsMessage.WM_SYSKEYUP: e = new RawKeyEventArgs( WindowsKeyboardDevice.Instance, timestamp, RawKeyEventType.KeyUp, KeyInterop.KeyFromVirtualKey((int)wParam), WindowsKeyboardDevice.Instance.Modifiers); break; case UnmanagedMethods.WindowsMessage.WM_CHAR: // Ignore control chars if (wParam.ToInt32() >= 32) { e = new RawTextInputEventArgs(WindowsKeyboardDevice.Instance, timestamp, new string((char)wParam.ToInt32(), 1)); } break; case UnmanagedMethods.WindowsMessage.WM_NCLBUTTONDOWN: case UnmanagedMethods.WindowsMessage.WM_NCRBUTTONDOWN: case UnmanagedMethods.WindowsMessage.WM_NCMBUTTONDOWN: e = new RawMouseEventArgs( WindowsMouseDevice.Instance, timestamp, _owner, msg == (int)UnmanagedMethods.WindowsMessage.WM_NCLBUTTONDOWN ? RawMouseEventType.LeftButtonDown : msg == (int)UnmanagedMethods.WindowsMessage.WM_NCRBUTTONDOWN ? RawMouseEventType.RightButtonDown : RawMouseEventType.MiddleButtonDown, new Point(0, 0), GetMouseModifiers(wParam)); break; case UnmanagedMethods.WindowsMessage.WM_LBUTTONDOWN: case UnmanagedMethods.WindowsMessage.WM_RBUTTONDOWN: case UnmanagedMethods.WindowsMessage.WM_MBUTTONDOWN: e = new RawMouseEventArgs( WindowsMouseDevice.Instance, timestamp, _owner, msg == (int)UnmanagedMethods.WindowsMessage.WM_LBUTTONDOWN ? RawMouseEventType.LeftButtonDown : msg == (int)UnmanagedMethods.WindowsMessage.WM_RBUTTONDOWN ? RawMouseEventType.RightButtonDown : RawMouseEventType.MiddleButtonDown, new Point((uint) lParam & 0xffff, (uint) lParam >> 16), GetMouseModifiers(wParam)); break; case UnmanagedMethods.WindowsMessage.WM_LBUTTONUP: case UnmanagedMethods.WindowsMessage.WM_RBUTTONUP: case UnmanagedMethods.WindowsMessage.WM_MBUTTONUP: e = new RawMouseEventArgs( WindowsMouseDevice.Instance, timestamp, _owner, msg == (int) UnmanagedMethods.WindowsMessage.WM_LBUTTONUP ? RawMouseEventType.LeftButtonUp : msg == (int) UnmanagedMethods.WindowsMessage.WM_RBUTTONUP ? RawMouseEventType.RightButtonUp : RawMouseEventType.MiddleButtonUp, new Point((uint) lParam & 0xffff, (uint) lParam >> 16), GetMouseModifiers(wParam)); break; case UnmanagedMethods.WindowsMessage.WM_MOUSEMOVE: if (!_trackingMouse) { var tm = new UnmanagedMethods.TRACKMOUSEEVENT { cbSize = Marshal.SizeOf(typeof(UnmanagedMethods.TRACKMOUSEEVENT)), dwFlags = 2, hwndTrack = _hwnd, dwHoverTime = 0, }; UnmanagedMethods.TrackMouseEvent(ref tm); } e = new RawMouseEventArgs( WindowsMouseDevice.Instance, timestamp, _owner, RawMouseEventType.Move, new Point((uint)lParam & 0xffff, (uint)lParam >> 16), GetMouseModifiers(wParam)); break; case UnmanagedMethods.WindowsMessage.WM_MOUSEWHEEL: e = new RawMouseWheelEventArgs( WindowsMouseDevice.Instance, timestamp, _owner, ScreenToClient((uint)lParam & 0xffff, (uint)lParam >> 16), new Vector(0, ((int)wParam >> 16) / wheelDelta), GetMouseModifiers(wParam)); break; case UnmanagedMethods.WindowsMessage.WM_MOUSELEAVE: _trackingMouse = false; e = new RawMouseEventArgs( WindowsMouseDevice.Instance, timestamp, _owner, RawMouseEventType.LeaveWindow, new Point(), WindowsKeyboardDevice.Instance.Modifiers); break; case UnmanagedMethods.WindowsMessage.WM_PAINT: if (Paint != null) { UnmanagedMethods.PAINTSTRUCT ps; if (UnmanagedMethods.BeginPaint(_hwnd, out ps) != IntPtr.Zero) { UnmanagedMethods.RECT r; UnmanagedMethods.GetUpdateRect(_hwnd, out r, false); Paint(new Rect(r.left, r.top, r.right - r.left, r.bottom - r.top), Handle); UnmanagedMethods.EndPaint(_hwnd, ref ps); } } return IntPtr.Zero; case UnmanagedMethods.WindowsMessage.WM_SIZE: if (Resized != null) { var clientSize = new Size((int)lParam & 0xffff, (int)lParam >> 16); Resized(clientSize); } return IntPtr.Zero; } if (e != null && Input != null) { Input(e); if (msg >= 161 && msg <= 173) return UnmanagedMethods.DefWindowProc(hWnd, msg, wParam, lParam); return IntPtr.Zero; } return UnmanagedMethods.DefWindowProc(hWnd, msg, wParam, lParam); }
protected override bool OnKeyPressEvent(Gdk.EventKey evnt) { var e = new RawKeyEventArgs( GtkKeyboardDevice.Instance, evnt.Time, RawKeyEventType.KeyDown, GtkKeyboardDevice.ConvertKey(evnt.Key), new string((char)Gdk.Keyval.ToUnicode((uint)evnt.Key), 1)); this.Input(e); return true; }
private void ProcessRawEvent(RawKeyEventArgs e) { IInputElement element = this.FocusedElement; if (element != null) { switch (e.Type) { case RawKeyEventType.KeyDown: case RawKeyEventType.KeyUp: var routedEvent = e.Type == RawKeyEventType.KeyDown ? InputElement.KeyDownEvent : InputElement.KeyUpEvent; KeyEventArgs ev = new KeyEventArgs { RoutedEvent = routedEvent, Device = this, Key = e.Key, Text = e.Text, Source = element, OriginalSource = element, }; element.RaiseEvent(ev); break; } } }
public void Impl_Input_Should_Pass_Input_To_InputManager() { using (PerspexLocator.EnterScope()) { RegisterServices(); var impl = new Mock<ITopLevelImpl>(); impl.SetupAllProperties(); var target = new TestTopLevel(impl.Object); var input = new RawKeyEventArgs( new Mock<IKeyboardDevice>().Object, 0, RawKeyEventType.KeyDown, Key.A, InputModifiers.None); impl.Object.Input(input); var inputManagerMock = Mock.Get(InputManager.Instance); inputManagerMock.Verify(x => x.Process(input)); } }
protected virtual IntPtr WndProc(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam) { const double WheelDelta = 120.0; uint timestamp = unchecked((uint)UnmanagedMethods.GetMessageTime()); RawInputEventArgs e = null; WindowsMouseDevice.Instance.CurrentWindow = this; switch ((UnmanagedMethods.WindowsMessage)msg) { case UnmanagedMethods.WindowsMessage.WM_ACTIVATE: var wa = (UnmanagedMethods.WindowActivate)((int)wParam & 0xffff); switch (wa) { case UnmanagedMethods.WindowActivate.WA_ACTIVE: case UnmanagedMethods.WindowActivate.WA_CLICKACTIVE: if (this.Activated != null) { this.Activated(); } break; case UnmanagedMethods.WindowActivate.WA_INACTIVE: if (this.Deactivated != null) { this.Deactivated(); } break; } return IntPtr.Zero; case UnmanagedMethods.WindowsMessage.WM_DESTROY: if (this.Closed != null) { this.Closed(); } return IntPtr.Zero; case UnmanagedMethods.WindowsMessage.WM_KEYDOWN: case UnmanagedMethods.WindowsMessage.WM_SYSKEYDOWN: WindowsKeyboardDevice.Instance.UpdateKeyStates(); e = new RawKeyEventArgs( WindowsKeyboardDevice.Instance, timestamp, RawKeyEventType.KeyDown, KeyInterop.KeyFromVirtualKey((int)wParam), WindowsKeyboardDevice.Instance.StringFromVirtualKey((uint)wParam)); break; case UnmanagedMethods.WindowsMessage.WM_KEYUP: case UnmanagedMethods.WindowsMessage.WM_SYSKEYUP: WindowsKeyboardDevice.Instance.UpdateKeyStates(); e = new RawKeyEventArgs( WindowsKeyboardDevice.Instance, timestamp, RawKeyEventType.KeyUp, KeyInterop.KeyFromVirtualKey((int)wParam), WindowsKeyboardDevice.Instance.StringFromVirtualKey((uint)wParam)); break; case UnmanagedMethods.WindowsMessage.WM_LBUTTONDOWN: e = new RawMouseEventArgs( WindowsMouseDevice.Instance, timestamp, this.owner, RawMouseEventType.LeftButtonDown, new Point((uint)lParam & 0xffff, (uint)lParam >> 16)); break; case UnmanagedMethods.WindowsMessage.WM_LBUTTONUP: e = new RawMouseEventArgs( WindowsMouseDevice.Instance, timestamp, this.owner, RawMouseEventType.LeftButtonUp, new Point((uint)lParam & 0xffff, (uint)lParam >> 16)); break; case UnmanagedMethods.WindowsMessage.WM_MOUSEMOVE: if (!this.trackingMouse) { var tm = new UnmanagedMethods.TRACKMOUSEEVENT { cbSize = Marshal.SizeOf(typeof(UnmanagedMethods.TRACKMOUSEEVENT)), dwFlags = 2, hwndTrack = this.hwnd, dwHoverTime = 0, }; UnmanagedMethods.TrackMouseEvent(ref tm); } e = new RawMouseEventArgs( WindowsMouseDevice.Instance, timestamp, this.owner, RawMouseEventType.Move, new Point((uint)lParam & 0xffff, (uint)lParam >> 16)); break; case UnmanagedMethods.WindowsMessage.WM_MOUSEWHEEL: e = new RawMouseWheelEventArgs( WindowsMouseDevice.Instance, timestamp, this.owner, this.ScreenToClient((uint)lParam & 0xffff, (uint)lParam >> 16), new Vector(0, ((int)wParam >> 16) / WheelDelta)); break; case UnmanagedMethods.WindowsMessage.WM_MOUSELEAVE: this.trackingMouse = false; e = new RawMouseEventArgs( WindowsMouseDevice.Instance, timestamp, this.owner, RawMouseEventType.LeaveWindow, new Point()); break; case UnmanagedMethods.WindowsMessage.WM_PAINT: if (this.Paint != null) { UnmanagedMethods.PAINTSTRUCT ps; if (UnmanagedMethods.BeginPaint(this.hwnd, out ps) != IntPtr.Zero) { UnmanagedMethods.RECT r; UnmanagedMethods.GetUpdateRect(this.hwnd, out r, false); this.Paint(new Rect(r.left, r.top, r.right - r.left, r.bottom - r.top), this.Handle); UnmanagedMethods.EndPaint(this.hwnd, ref ps); } } return IntPtr.Zero; case UnmanagedMethods.WindowsMessage.WM_SIZE: if (this.Resized != null) { var clientSize = new Size((int)lParam & 0xffff, (int)lParam >> 16); this.Resized(clientSize); } return IntPtr.Zero; } if (e != null && this.Input != null) { this.Input(e); return IntPtr.Zero; } return UnmanagedMethods.DefWindowProc(hWnd, msg, wParam, lParam); }
private void RawKeyDown(RawKeyEventArgs e) { const InputModifiers modifiers = InputModifiers.Control | InputModifiers.Shift; if ((e.Modifiers) == modifiers) { var point = MouseDevice.Instance.GetPosition(Root); var control = Root.GetVisualsAt(point).FirstOrDefault(x => !(x is AdornerLayer)); if (control != null) { var vm = (DevToolsViewModel)DataContext; vm.SelectControl((IControl)control); } } }
public void Impl_Input_Should_Pass_Input_To_InputManager() { var inputManagerMock = new Mock<IInputManager>(); var services = TestServices.StyledWindow.With(inputManager: inputManagerMock.Object); using (UnitTestApplication.Start(services)) { var impl = new Mock<ITopLevelImpl>(); impl.SetupAllProperties(); var target = new TestTopLevel(impl.Object); var input = new RawKeyEventArgs( new Mock<IKeyboardDevice>().Object, 0, RawKeyEventType.KeyDown, Key.A, InputModifiers.None); impl.Object.Input(input); inputManagerMock.Verify(x => x.Process(input)); } }