public void UpdateKeyboardInput() { if (DownKeysGetter == null) { return; } _downKeys = DownKeysGetter(); if (_downKeys != null && _lastDownKeys != null) { var now = DateTime.Now; foreach (var key in _downKeys) { if (!_lastDownKeys.Contains(key)) { if (key == Keys.Tab) { FocusNextWidget(); } KeyDownHandler?.Invoke(key); _lastKeyDown = now; _keyDownCount = 0; } } foreach (var key in _lastDownKeys) { if (!_downKeys.Contains(key)) { // Key had been released KeyUp.Invoke(key); if (_focusedKeyboardWidget != null && _focusedKeyboardWidget.Active) { _focusedKeyboardWidget.OnKeyUp(key); } _lastKeyDown = null; _keyDownCount = 0; } else if (_lastKeyDown != null && ((_keyDownCount == 0 && (now - _lastKeyDown.Value).TotalMilliseconds > RepeatKeyDownStartInMs) || (_keyDownCount > 0 && (now - _lastKeyDown.Value).TotalMilliseconds > RepeatKeyDownInternalInMs))) { KeyDownHandler?.Invoke(key); _lastKeyDown = now; ++_keyDownCount; } } } _lastDownKeys = _downKeys.ToArray(); }
public void UpdateInput() { if (MouseInfoGetter != null) { var mouseInfo = MouseInfoGetter(); MousePosition = mouseInfo.Position; if (SpriteBatchBeginParams.TransformMatrix != null) { // Apply transform var t = Vector2.Transform( new Vector2(MousePosition.X, MousePosition.Y), SpriteBatchBeginParams.InverseTransform); MousePosition = new Point((int)t.X, (int)t.Y); } if (MousePosition.X != LastMousePosition.X || MousePosition.Y != LastMousePosition.Y) { var ev = MouseMoved; if (ev != null) { ev(this, EventArgs.Empty); } for (var i = ChildrenCopy.Count - 1; i >= 0; --i) { var w = ChildrenCopy[i]; if (w.Visible && w.Enabled) { var asWindow = w as Window; if (w.HandleMouseMovement() || (asWindow != null && asWindow.IsModal)) { break; } } } } HandleButton(mouseInfo.IsLeftButtonDown, _lastMouseInfo.IsLeftButtonDown, MouseButtons.Left); HandleButton(mouseInfo.IsMiddleButtonDown, _lastMouseInfo.IsMiddleButtonDown, MouseButtons.Middle); HandleButton(mouseInfo.IsRightButtonDown, _lastMouseInfo.IsRightButtonDown, MouseButtons.Right); #if XENKO var handleWheel = mouseInfo.Wheel != 0; #else var handleWheel = mouseInfo.Wheel != _lastMouseInfo.Wheel; #endif if (handleWheel) { var delta = mouseInfo.Wheel; #if !XENKO delta -= _lastMouseInfo.Wheel; #endif var ev = MouseWheelChanged; if (ev != null) { ev(null, new GenericEventArgs <float>(delta)); } if (FocusedMouseWheelWidget != null) { FocusedMouseWheelWidget.OnMouseWheel(delta); } } _lastMouseInfo = mouseInfo; } if (DownKeysGetter != null) { _downKeys = DownKeysGetter(); if (_downKeys != null) { MyraEnvironment.ShowUnderscores = (MenuBar != null && MenuBar.OpenMenuItem != null) || _downKeys.Contains(Keys.LeftAlt) || _downKeys.Contains(Keys.RightAlt); if (_lastDownKeys != null) { foreach (var key in _downKeys) { if (!_lastDownKeys.Contains(key)) { if (KeyDownHandler != null) { KeyDownHandler(key); } } } foreach (var key in _lastDownKeys) { if (!_downKeys.Contains(key)) { // Key had been released var ev = KeyUp; if (ev != null) { ev(this, new GenericEventArgs <Keys>(key)); } if (_focusedKeyboardWidget != null) { _focusedKeyboardWidget.OnKeyUp(key); } } } } } _lastDownKeys = _downKeys.ToArray(); } }
public void UpdateInput() { if (MouseInfoGetter != null) { var mouseInfo = MouseInfoGetter(); var mousePosition = mouseInfo.Position; if (SpriteBatchBeginParams.TransformMatrix != null) { // Apply transform var t = Vector2.Transform( new Vector2(mousePosition.X, mousePosition.Y), SpriteBatchBeginParams.InverseTransform); mousePosition = new Point((int)t.X, (int)t.Y); } MousePosition = mousePosition; HandleButton(mouseInfo.IsLeftButtonDown, _lastMouseInfo.IsLeftButtonDown, MouseButtons.Left); HandleButton(mouseInfo.IsMiddleButtonDown, _lastMouseInfo.IsMiddleButtonDown, MouseButtons.Middle); HandleButton(mouseInfo.IsRightButtonDown, _lastMouseInfo.IsRightButtonDown, MouseButtons.Right); #if XENKO var handleWheel = mouseInfo.Wheel != 0; #else var handleWheel = mouseInfo.Wheel != _lastMouseInfo.Wheel; #endif if (handleWheel) { var delta = mouseInfo.Wheel; #if !XENKO delta -= _lastMouseInfo.Wheel; #endif MouseWheelChanged.Invoke(this, delta); if (FocusedMouseWheelWidget != null) { FocusedMouseWheelWidget.OnMouseWheel(delta); } } _lastMouseInfo = mouseInfo; } if (DownKeysGetter != null) { _downKeys = DownKeysGetter(); if (_downKeys != null && _lastDownKeys != null) { var now = DateTime.Now; foreach (var key in _downKeys) { if (!_lastDownKeys.Contains(key)) { KeyDownHandler?.Invoke(key); _lastKeyDown = now; _keyDownCount = 0; } } foreach (var key in _lastDownKeys) { if (!_downKeys.Contains(key)) { // Key had been released KeyUp.Invoke(this, key); if (_focusedKeyboardWidget != null && _focusedKeyboardWidget.Active) { _focusedKeyboardWidget.OnKeyUp(key); } _lastKeyDown = null; _keyDownCount = 0; } else if (_lastKeyDown != null && ((_keyDownCount == 0 && (now - _lastKeyDown.Value).TotalMilliseconds > RepeatKeyDownStartInMs) || (_keyDownCount > 0 && (now - _lastKeyDown.Value).TotalMilliseconds > RepeatKeyDownInternalInMs))) { KeyDownHandler?.Invoke(key); _lastKeyDown = now; ++_keyDownCount; } } } _lastDownKeys = _downKeys.ToArray(); } #if !XENKO try { UpdateTouch(); } catch (Exception) { } #endif }