public override bool HandleInput() { bool captured = false; if (!Visible || !CanScroll()) { return(captured); } var absolutePosition = OwnerControl.GetPositionAbsoluteCenter() + Position; bool mouseOverThis = MyGuiControlBase.CheckMouseOver(Size, absolutePosition, MyGuiDrawAlignEnum.HORISONTAL_LEFT_AND_VERTICAL_TOP); bool mouseOverOwner = OwnerControl.IsMouseOver; IsOverCaret = MyGuiControlBase.CheckMouseOver(CaretSize, absolutePosition + GetCarretPosition(), MyGuiDrawAlignEnum.HORISONTAL_LEFT_AND_VERTICAL_TOP); switch (State) { case StateEnum.Ready: if (MyInput.Static.IsNewPrimaryButtonPressed() && IsOverCaret) { captured = true; State = StateEnum.Drag; m_dragClick = MyGuiManager.MouseCursorPosition; } break; case StateEnum.Drag: if (!MyInput.Static.IsPrimaryButtonPressed()) { State = StateEnum.Ready; } else { ChangeValue((MyGuiManager.MouseCursorPosition.Y - m_dragClick.Y) * (Max - Page) / (Size.Y - CaretSize.Y)); m_dragClick = MyGuiManager.MouseCursorPosition; } captured = true; break; } if (mouseOverThis || mouseOverOwner) { var scrolled = MyInput.Static.DeltaMouseScrollWheelValue(); if (scrolled != 0 && scrolled != -MyInput.Static.PreviousMouseScrollWheelValue()) { captured = true; ChangeValue((scrolled / -120f) * Page * 0.25f); } } return(captured); }
private bool HandleControlsInput(bool receivedFocusInThisUpdate) { MyGuiControlBase inputHandledBySomeControl = null; if (m_lastHandlingControl != null && m_lastHandlingControl.Visible) { if (m_lastHandlingControl.HandleInput() != null) { inputHandledBySomeControl = m_lastHandlingControl; } } if (inputHandledBySomeControl == null && m_listboxDragAndDropHandlingNow != null) { if (m_listboxDragAndDropHandlingNow.HandleInput() != null) { inputHandledBySomeControl = m_listboxDragAndDropHandlingNow; } } if (inputHandledBySomeControl == null && m_comboboxHandlingNow != null) { if (m_comboboxHandlingNow.HandleInput() != null) { inputHandledBySomeControl = m_comboboxHandlingNow; } } // Check focused screen first MyGuiControlBase mouseOverControl = null; if (inputHandledBySomeControl == null) { var visibleControls = Controls.GetVisibleControls(); for (int i = 0; i < visibleControls.Count; i++) { MyGuiControlBase control = visibleControls[i]; if (control != m_comboboxHandlingNow && control != m_listboxDragAndDropHandlingNow && control.CheckMouseOver()) { mouseOverControl = control; inputHandledBySomeControl = control.HandleInput(); break; } } } // If opened combobox didn't capture the input, we will try to handle it in remaining controls if (inputHandledBySomeControl == null) { var visibleControls = Controls.GetVisibleControls(); for (int i = visibleControls.Count - 1; i >= 0; --i) { MyGuiControlBase control = visibleControls[i]; if (control != m_comboboxHandlingNow && control != m_listboxDragAndDropHandlingNow && control != mouseOverControl) { inputHandledBySomeControl = control.HandleInput(); if (inputHandledBySomeControl != null) { break; } } } } if (inputHandledBySomeControl == null) { foreach (var element in Elements) { if (!element.Visible || !element.CanHaveFocus) { continue; } inputHandledBySomeControl = element.HandleInput(); if (inputHandledBySomeControl != null) { break; } } } if (inputHandledBySomeControl != null) { FocusedControl = inputHandledBySomeControl; } m_lastHandlingControl = inputHandledBySomeControl; return(inputHandledBySomeControl != null); }