Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }