protected internal virtual void OnMouseWheel(Point _hitPoint, int _iDelta) { if (Parent != null) { Parent.OnMouseWheel(_hitPoint, _iDelta); } }
//---------------------------------------------------------------------- public void HandleInput() { //------------------------------------------------------------------ // Make sure we don't hold references to orphaned widgets if (FocusedWidget != null && FocusedWidget.IsOrphan) { FocusedWidget = null; mbHasActivatedFocusedWidget = false; } if (HoveredWidget != null && HoveredWidget.IsOrphan) { Game.SetCursor(MouseCursor.Default); HoveredWidget = null; } if (mClickedWidget != null && mClickedWidget.IsOrphan) { mClickedWidget = null; } //------------------------------------------------------------------ Point mouseHitPoint = new Point( (int)(Game.InputMgr.MouseState.X / Resolution.ScaleFactor), (int)((Game.InputMgr.MouseState.Y - Game.GraphicsDevice.Viewport.Y) / Resolution.ScaleFactor) ); if (!IsActive) { if (HoveredWidget != null) { HoveredWidget.OnMouseOut(mouseHitPoint); HoveredWidget = null; } if (mClickedWidget != null) { mClickedWidget.OnMouseUp(mouseHitPoint, miClickedWidgetMouseButton); mClickedWidget = null; } return; } //------------------------------------------------------------------ // Mouse buttons bool bHasMouseEvent = false; if (miIgnoreClickFrames == 0) { for (int iButton = 0; iButton < 3; iButton++) { if (Game.InputMgr.WasMouseButtonJustPressed(iButton)) { bHasMouseEvent = true; if (mClickedWidget == null) { miClickedWidgetMouseButton = iButton; Widget hitWidget = null; if (FocusedWidget != null) { hitWidget = FocusedWidget.HitTest(mouseHitPoint); } if (hitWidget == null) { hitWidget = Root.HitTest(mouseHitPoint); } while (hitWidget != null && !hitWidget.OnMouseDown(mouseHitPoint, iButton)) { hitWidget = hitWidget.Parent; } mClickedWidget = hitWidget; } } } if (Game.InputMgr.WasMouseJustDoubleClicked()) { bHasMouseEvent = true; Widget widget = FocusedWidget == null ? null : FocusedWidget.HitTest(mouseHitPoint); if (widget != null) { bool bPressed; switch (Game.InputMgr.PrimaryMouseButton) { case 0: bPressed = Game.InputMgr.MouseState.LeftButton == ButtonState.Pressed; break; case 2: bPressed = Game.InputMgr.MouseState.RightButton == ButtonState.Pressed; break; default: throw new NotSupportedException(); } if (bPressed) { mClickedWidget = widget; miClickedWidgetMouseButton = Game.InputMgr.PrimaryMouseButton; } if (widget.OnMouseDoubleClick(mouseHitPoint)) { miIgnoreClickFrames = 3; } } } } else { miIgnoreClickFrames--; } for (int iButton = 0; iButton < 3; iButton++) { if (Game.InputMgr.WasMouseButtonJustReleased(iButton)) { bHasMouseEvent = true; if (mClickedWidget != null && iButton == miClickedWidgetMouseButton) { mClickedWidget.OnMouseUp(mouseHitPoint, iButton); mClickedWidget = null; } } } if (!bHasMouseEvent) { Widget hoveredWidget = (FocusedWidget == null ? null : FocusedWidget.HitTest(mouseHitPoint)) ?? Root.HitTest(mouseHitPoint); if (mouseHitPoint != mPreviousMouseHitPoint) { if (mClickedWidget == null) { if (hoveredWidget != null && hoveredWidget == HoveredWidget) { HoveredWidget.OnMouseMove(mouseHitPoint); } else { if (HoveredWidget != null) { HoveredWidget.OnMouseOut(mouseHitPoint); } HoveredWidget = hoveredWidget; if (HoveredWidget != null) { HoveredWidget.OnMouseEnter(mouseHitPoint); } } } else { mClickedWidget.OnMouseMove(mouseHitPoint); } } } // Mouse wheel int iWheelDelta = Game.InputMgr.GetMouseWheelDelta(); if (iWheelDelta != 0) { Widget hoveredWidget = (FocusedWidget == null ? null : FocusedWidget.HitTest(mouseHitPoint)) ?? Root.HitTest(mouseHitPoint); if (hoveredWidget != null) { hoveredWidget.OnMouseWheel(mouseHitPoint, iWheelDelta); } } mPreviousMouseHitPoint = mouseHitPoint; //------------------------------------------------------------------ // Keyboard if (FocusedWidget != null) { foreach (char character in Game.InputMgr.EnteredText) { FocusedWidget.OnTextEntered(character); } if (Game.InputMgr.JustPressedOSKeys.Contains(OSKey.Enter) || Game.InputMgr.JustPressedOSKeys.Contains(OSKey.Return) || Game.InputMgr.JustPressedOSKeys.Contains(OSKey.Space)) { if (FocusedWidget.OnActivateDown()) { mbHasActivatedFocusedWidget = true; } } else if (Game.InputMgr.JustReleasedOSKeys.Contains(OSKey.Enter) || Game.InputMgr.JustReleasedOSKeys.Contains(OSKey.Return) || Game.InputMgr.JustReleasedOSKeys.Contains(OSKey.Space)) { if (mbHasActivatedFocusedWidget) { FocusedWidget.OnActivateUp(); mbHasActivatedFocusedWidget = false; } } if (Game.InputMgr.WasKeyJustPressed(Keys.Left)) { FocusedWidget.OnPadMove(UI.Direction.Left); } if (Game.InputMgr.WasKeyJustPressed(Keys.Right)) { FocusedWidget.OnPadMove(UI.Direction.Right); } if (Game.InputMgr.WasKeyJustPressed(Keys.Up)) { FocusedWidget.OnPadMove(UI.Direction.Up); } if (Game.InputMgr.WasKeyJustPressed(Keys.Down)) { FocusedWidget.OnPadMove(UI.Direction.Down); } foreach (Keys key in Game.InputMgr.JustPressedKeys) { FocusedWidget.OnKeyPress(key); } foreach (var key in Game.InputMgr.JustPressedOSKeys) { FocusedWidget.OnOSKeyPress(key); } } }