public override void OnMouseEntered() { base.OnMouseEntered(); ChildrenCopy.HandleMouseMovement(); }
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); } ChildrenCopy.HandleMouseMovement(); } 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 (_focusedWidget != null) { _focusedWidget.IterateFocusable(w => w.OnMouseWheel(delta)); } } _lastMouseInfo = mouseInfo; } if (DownKeysGetter != null) { var pressedKeys = DownKeysGetter(); if (pressedKeys != null) { MyraEnvironment.ShowUnderscores = (MenuBar != null && MenuBar.OpenMenuItem != null) || pressedKeys.Contains(Keys.LeftAlt) || pressedKeys.Contains(Keys.RightAlt); if (_lastDownKeys != null) { foreach (var key in pressedKeys) { if (!_lastDownKeys.Contains(key)) { var ev = KeyDown; if (ev != null) { ev(this, new GenericEventArgs <Keys>(key)); } if (MenuBar != null && MyraEnvironment.ShowUnderscores) { MenuBar.OnKeyDown(key); } else { if (_focusedWidget != null) { _focusedWidget.IterateFocusable(w => w.OnKeyDown(key)); #if XENKO var ch = key.ToChar(pressedKeys.Contains(Keys.LeftShift) || pressedKeys.Contains(Keys.RightShift)); if (ch != null) { _focusedWidget.IterateFocusable(w => w.OnChar(ch.Value)); } #endif } } if (key == Keys.Escape && ContextMenu != null) { HideContextMenu(); } } } foreach (var key in _lastDownKeys) { if (!pressedKeys.Contains(key)) { // Key had been released var ev = KeyUp; if (ev != null) { ev(this, new GenericEventArgs <Keys>(key)); } if (_focusedWidget != null) { _focusedWidget.IterateFocusable(w => w.OnKeyUp(key)); } } } } } _lastDownKeys = pressedKeys.ToArray(); } }