public virtual void HandleUnhandledInput(MyGuiInput input, bool receivedFocusInThisUpdate) { // by calling this we are soure that no control handled input already if (m_windowIsMovable) { if (input.IsNewLeftMousePressed() && IsMouseOver()) { m_draged = true; m_mouseDragEntryPoint = new Vector2(MyGuiManager.MouseCursorPosition.X, MyGuiManager.MouseCursorPosition.Y); //KeenSoftwareHouse.Library.Trace.Trace.SendMsgLastCall("drag"); } if (input.IsLeftMousePressed() && m_draged) { Vector2 newMousePoint = new Vector2(MyGuiManager.MouseCursorPosition.X, MyGuiManager.MouseCursorPosition.Y); Vector2 deltaPos = newMousePoint - m_mouseDragEntryPoint; //KeenSoftwareHouse.Library.Trace.Trace.SendMsgLastCall( deltaPos.ToString() ); m_mouseDragEntryPoint = newMousePoint; m_position += deltaPos; } if (input.IsNewLeftMouseReleased()) { m_draged = false; //KeenSoftwareHouse.Library.Trace.Trace.SendMsgLastCall("undrag"); } } }
private bool HandleControlMoving(MyGuiInput input) { bool dragging = false; if (input.IsLeftMousePressed()) { // if we dragging control, then we set it new position by mouse if (m_draggingControl != null) { m_draggingControl.SetPosition(MyGuiManager.MouseCursorPosition - m_draggingControl.GetParent().GetPositionAbsolute() - m_draggingControlOffset); dragging = true; } // if we are not dragging control, then we try find it else { MyGuiControlBase controlToDrag = null; // first we try find control, which has mouse over controlToDrag = GetMouseOverControl(); // if there is no control which has mouse over, then we try find control, which is under mouse cursor (because some controls has no mouse over all time) if (controlToDrag == null) { controlToDrag = GetControlUnderMouseCursor(); } // if we found any contorl to drag, then we set it to dragging control if (controlToDrag != null) { m_draggingControl = controlToDrag; m_draggingControlOffset = MyGuiManager.MouseCursorPosition - m_draggingControl.GetParent().GetPositionAbsolute() - controlToDrag.GetPosition(); dragging = true; } } } else { m_draggingControl = null; if (input.IsNewLeftMouseReleased()) { dragging = true; } } return(dragging); }
// Method returns true if input was captured by control, so no other controls, nor screen can use input in this update public override bool HandleInput(MyGuiInput input, bool hasKeyboardActiveControl, bool hasKeyboardActiveControlPrevious, bool receivedFocusInThisUpdate) { bool captureInput = base.HandleInput(input, hasKeyboardActiveControl, hasKeyboardActiveControlPrevious, receivedFocusInThisUpdate); if (captureInput == false) { if (((IsMouseOver() == true) && ((input.IsNewLeftMouseReleased() == true))) || ((hasKeyboardActiveControl == true) && (m_canHandleKeyboardInput == true) && ((input.IsJoystickButtonNewPressed(MyJoystickButtonsEnum.J01)) || (input.IsNewKeyPress(Keys.Enter)) || (input.IsNewKeyPress(Keys.Space))))) { if (m_implementedFeature == false) { MyAudio.AddCue2D(MySoundCuesEnum.GuiMouseClick); MyGuiManager.AddScreen(new MyGuiScreenMessageBox(MyMessageBoxType.ERROR, MyTextsWrapperEnum.FeatureNotYetImplemented, MyTextsWrapperEnum.MessageBoxCaptionFeatureDisabled, MyTextsWrapperEnum.Ok, null)); } else if (m_accessForbiddenReason != null) { MyAudio.AddCue2D(MySoundCuesEnum.GuiMouseClick); MyGuiManager.AddScreen(new MyGuiScreenMessageBox(MyMessageBoxType.ERROR, m_accessForbiddenReason.Value, MyTextsWrapperEnum.MessageBoxCaptionFeatureDisabled, MyTextsWrapperEnum.Ok, null)); } else if (Enabled || UseSwitchMode) { MyAudio.AddCue2D(MySoundCuesEnum.GuiMouseClick); if (m_onButtonClick != null) { m_onButtonClick(this); } else if (m_onIndexedButtonClick != null) { m_onIndexedButtonClick(m_buttonIndex); } } captureInput = true; } } return(captureInput); }
public bool HandleInputEx(MyGuiInput input, bool hasKeyboardActiveControl, bool hasKeyboardActiveControlPrevious, bool receivedFocusInThisUpdate) { if (!Visible) { return false; } bool captured = false; // Hoover item if mouse cursor is inside its area if (TreeView.Contains(MyGuiManager.MouseCursorPosition.X, MyGuiManager.MouseCursorPosition.Y) && MyGUIHelper.Contains(m_currentOrigin, m_currentSize, MyGuiManager.MouseCursorPosition.X, MyGuiManager.MouseCursorPosition.Y)) { TreeView.HooveredItem = this; } if (Enabled && DragDrop != null) { captured = DragDrop.HandleInput(this, input); } // Single click - expand or focus item if (input.IsNewLeftMouseReleased()) { if (GetItemCount() > 0 && MyGUIHelper.Contains(m_currentOrigin + GetExpandIconPosition(), m_expandIconSize, MyGuiManager.MouseCursorPosition.X, MyGuiManager.MouseCursorPosition.Y)) { IsExpanded = !IsExpanded; captured = true; MyAudio.AddCue2D(MySoundCuesEnum.GuiMouseClick); } else if (TreeView.HooveredItem == this) { TreeView.FocusItem(this); captured = true; MyAudio.AddCue2D(MySoundCuesEnum.GuiMouseClick); } } // Double click - launch Action event if (Enabled && /*!captured && */input.IsNewLeftMouseDoubleClick() && TreeView.HooveredItem == this) { if (Action != null) { DoAction(); } else if (GetItemCount() > 0) { IsExpanded = !IsExpanded; } captured = true; } // Right click - launch RightClick event if (/*!captured && */input.IsNewRightMousePressed() && TreeView.HooveredItem == this) { if (RightClick != null) { RightClick(this, EventArgs.Empty); } captured = true; MyAudio.AddCue2D(MySoundCuesEnum.GuiMouseClick); } return captured; }
private bool HandleControlMoving(MyGuiInput input) { bool dragging = false; if (input.IsLeftMousePressed()) { // if we dragging control, then we set it new position by mouse if (m_draggingControl != null) { m_draggingControl.SetPosition(MyGuiManager.MouseCursorPosition - m_draggingControl.GetParent().GetPositionAbsolute() - m_draggingControlOffset); dragging = true; } // if we are not dragging control, then we try find it else { MyGuiControlBase controlToDrag = null; // first we try find control, which has mouse over controlToDrag = GetMouseOverControl(); // if there is no control which has mouse over, then we try find control, which is under mouse cursor (because some controls has no mouse over all time) if (controlToDrag == null) { controlToDrag = GetControlUnderMouseCursor(); } // if we found any contorl to drag, then we set it to dragging control if(controlToDrag != null) { m_draggingControl = controlToDrag; m_draggingControlOffset = MyGuiManager.MouseCursorPosition - m_draggingControl.GetParent().GetPositionAbsolute() - controlToDrag.GetPosition(); dragging = true; } } } else { m_draggingControl = null; if (input.IsNewLeftMouseReleased()) { dragging = true; } } return dragging; }
// Method returns true if input was captured by control, so no other controls, nor screen can use input in this update public override bool HandleInput(MyGuiInput input, bool hasKeyboardActiveControl, bool hasKeyboardActiveControlPrevious, bool receivedFocusInThisUpdate) { bool captureInput = base.HandleInput(input, hasKeyboardActiveControl, hasKeyboardActiveControlPrevious, receivedFocusInThisUpdate); //Assert(); if (captureInput == false) { if ((IsMouseOver() == true) && (input.IsNewLeftMousePressed() == true) && (m_supportListBoxMode == false && !m_isOpen) && m_scrollBarDragging == false) return true; // Make sure here, that whenever not in listbox mode, switch opened/closed state when clicked on combobobox //if ((IsMouseOver() == true) && (input.IsNewLeftMouseReleased() == true) && (m_supportListBoxMode == false) && m_scrollBarDragging == false) if (input.IsNewLeftMouseReleased() && !m_supportListBoxMode && !m_scrollBarDragging) { if (IsMouseOver() && !m_isOpen || IsMouseOverSelectedItem() && m_isOpen) { MyAudio.AddCue2D(MySoundCuesEnum.GuiMouseClick); SwitchComboboxMode(); captureInput = true; } } if ((hasKeyboardActiveControl == true) && ((input.IsNewKeyPress(Keys.Enter)) || (input.IsNewKeyPress(Keys.Space) || (input.IsNewGameControlPressed(MyGameControlEnums.FIRE_PRIMARY) && !input.IsNewLeftMousePressed())))) { MyAudio.AddCue2D(MySoundCuesEnum.GuiMouseClick); if ((m_preselectedKeyboardIndex.HasValue) && (m_preselectedKeyboardIndex.Value < m_items.Count)) { if (m_isOpen == false) { SetScrollBarPositionByIndex(m_selected.Key); } else { SelectItemByKey(m_items[m_preselectedKeyboardIndex.Value].Key); } } // Close but capture focus for this update so parent screen don't receive this ENTER SwitchComboboxMode(); captureInput = true; } // In listbox mode, the list is always in opened state if (m_isOpen == true) { #region Handle mouse and scrollbar interaction if (m_showScrollBar == true && input.IsLeftMousePressed() == true) { // Handles mouse input of dragging the scrollbar up or down Vector2 position = GetDrawPosition(); MyRectangle2D openedArea = GetOpenedArea(); float minX = position.X + m_size.Value.X - m_scrollBarWidth; float maxX = position.X + m_size.Value.X; float minY = m_supportListBoxMode == false ? position.Y + m_size.Value.Y / 2.0f : position.Y - m_size.Value.Y / 2.0f; float maxY = minY + openedArea.Size.Y; // if we are already scrolling, the area used for scrollbar moving will be extended to whole screen if (m_scrollBarDragging) { minX = 0; maxX = 1; minY = 0; maxY = 1; } // In case mouse cursor is intersecting scrollbar area, start scroll bar dragging mode if ((MyGuiManager.MouseCursorPosition.X >= minX) && (MyGuiManager.MouseCursorPosition.X <= maxX) && (MyGuiManager.MouseCursorPosition.Y >= minY) && (MyGuiManager.MouseCursorPosition.Y <= maxY)) { // Are we over thee scroll bar handle? float P0 = m_scrollBarCurrentPosition.Value + (openedArea.LeftTop.Y); if (MyGuiManager.MouseCursorPosition.Y > P0 && MyGuiManager.MouseCursorPosition.Y < P0 + m_scrollBarHeight) { if (m_mousePositionReinit) { m_mouseOldPosition = MyGuiManager.MouseCursorPosition.Y; m_mousePositionReinit = false; } float mdeff = MyGuiManager.MouseCursorPosition.Y - m_mouseOldPosition; if (mdeff > float.Epsilon || mdeff < float.Epsilon) { SetScrollBarPosition(m_scrollBarCurrentNonadjustedPosition + mdeff); } m_mouseOldPosition = MyGuiManager.MouseCursorPosition.Y; } else { // If we are not over the scrollbar handle -> jump: float scrollPositionY = MyGuiManager.MouseCursorPosition.Y - (openedArea.LeftTop.Y) - m_scrollBarHeight / 2.0f; SetScrollBarPosition(scrollPositionY); } m_scrollBarDragging = true; } } #endregion // Reset mouse parameters after it was released now if (input.IsNewLeftMouseReleased()) { m_mouseOldPosition = MyGuiManager.MouseCursorPosition.Y; m_mousePositionReinit = true; } // Don't try close combobox if listbox mode is suported. if (m_supportListBoxMode == false) { // If ESC was pressed while combobox has keyboard focus and combobox was opened, then close combobox but don't send this ESC to parent screen // Or if user clicked outside of the combobox's area if (((hasKeyboardActiveControl == true) && (input.IsNewKeyPress(Keys.Escape) || input.IsJoystickButtonNewPressed(MyJoystickButtonsEnum.J02))) || ((IsMouseOverOnOpenedArea() != true) && (IsMouseOver() != true) && (input.IsNewLeftMouseReleased() == true))) { MyAudio.AddCue2D(MySoundCuesEnum.GuiMouseClick); m_isOpen = false; } // Still capture focus, don't allow parent screen to receive this ESCAPE captureInput = true; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Mouse controling items in the combobox //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// if (m_scrollBarDragging == false) { #region Handle item that is under mouse cursor // Search for item that is under the mouse cursor m_preselectedMouseOverPrevious = m_preselectedMouseOver; m_preselectedMouseOver = null; // The following are used for controlling scroll window range int startIndex = 0; int endIndex = m_items.Count; float widthOffSet = 0f; if (m_showScrollBar == true) { if (m_supportSmoothScroll == true) { // Extend the display items range by 1(top and bottom) in smooth scrolling mode because of the scenario of partial rendering startIndex = Math.Max(0, m_displayItemsStartIndex - 1); endIndex = Math.Min(m_items.Count, endIndex + 1); } else { startIndex = m_displayItemsStartIndex; endIndex = m_displayItemsEndIndex; } widthOffSet = 0.025f; } for (int i = startIndex; i < endIndex; i++) { Vector2 position = GetOpenItemPosition(i - m_displayItemsStartIndex); MyRectangle2D openedArea = GetOpenedArea(); Vector2 min = new Vector2(position.X, Math.Max(openedArea.LeftTop.Y, position.Y)); Vector2 max = min + new Vector2(m_size.Value.X - widthOffSet, m_comboboxItemDeltaHeight); if ((MyGuiManager.MouseCursorPosition.X >= min.X) && (MyGuiManager.MouseCursorPosition.X <= max.X) && (MyGuiManager.MouseCursorPosition.Y >= min.Y) && (MyGuiManager.MouseCursorPosition.Y <= max.Y)) { m_preselectedMouseOver = m_items[i]; // Auto snap(scroll) current pre-selected/selected item to be fully visible if (m_supportSmoothScroll == true) { if (position.Y + 0.001f < openedArea.LeftTop.Y) { float scrollUpBy = m_scrollBarCurrentPosition.Value; scrollUpBy -= 0.001f; SetScrollBarPosition(scrollUpBy); } else if (position.Y + m_comboboxItemDeltaHeight - 0.001f > openedArea.LeftTop.Y + openedArea.Size.Y) { float scrollDownBy = m_scrollBarCurrentPosition.Value; scrollDownBy += 0.001f; SetScrollBarPosition(scrollDownBy); } } } } if (m_preselectedMouseOver != null && m_preselectedMouseOver != m_preselectedMouseOverPrevious) { MyAudio.AddCue2D(MySoundCuesEnum.GuiMouseOver); } // To be used to check for mouse double click action m_doubleClickTimer += MyConstants.PHYSICS_STEP_SIZE_IN_MILLISECONDS; #endregion #region Selecting item in opened combobox area // Select item when user clicks on it if (input.IsNewLeftMouseReleased() == true && m_preselectedMouseOver != null) { // Checks for double click, only listbox mode supports this type of input if (m_supportListBoxMode == true && m_preselectedMouseOver.Key.Equals(m_selected.Key) == true && m_doubleClickTimer < DOUBLE_CLICK_DELAY) { if (OnSelectItemDoubleClick != null) OnSelectItemDoubleClick(); } m_doubleClickTimer = 0; //m_selected = m_preselectedMouseOver; SelectItemByKey(m_preselectedMouseOver.Key); MyAudio.AddCue2D(MySoundCuesEnum.GuiMouseClick); if (m_supportListBoxMode == false) m_isOpen = false; // Still capture focus, don't allow parent screen to receive this CLICK captureInput = true; } #endregion #region Keyboard and scrollwheel controlling items in combobox if (hasKeyboardActiveControl == true || IsMouseOverOnOpenedArea()) { if (m_mouseWheelValueLast == null) m_mouseWheelValueLast = input.MouseScrollWheelValue(); if (input.MouseScrollWheelValue() < m_mouseWheelValueLast) { HandleItemMovement(true); captureInput = true; } else if (input.MouseScrollWheelValue() > m_mouseWheelValueLast) { HandleItemMovement(false); captureInput = true; } // Keyboard and mouse movement if (input.IsNewKeyPress(Keys.Down) || input.IsNewGamepadKeyDownPressed()) { HandleItemMovement(true); captureInput = true; } else if (input.IsNewKeyPress(Keys.Up) || input.IsNewGamepadKeyUpPressed()) { HandleItemMovement(false); captureInput = true; } else if (input.IsNewKeyPress(Keys.PageDown)) { HandleItemMovement(true, true); } else if (input.IsNewKeyPress(Keys.PageUp)) { HandleItemMovement(false, true); } else if (input.IsNewKeyPress(Keys.Home)) { HandleItemMovement(true, false, true); } else if (input.IsNewKeyPress(Keys.End)) { HandleItemMovement(false, false, true); } else if (input.IsNewKeyPress(Keys.Tab)) { // We want to close the combobox without selecting any item and forward TAB or SHIF+TAB to parent screen so it can navigate to next control if (m_supportListBoxMode == false && m_isOpen) SwitchComboboxMode(); captureInput = false; } m_mouseWheelValueLast = input.MouseScrollWheelValue(); } #endregion } else { // When finished scrollbar dragging, set it to false and enable input capturing again if (input.IsNewLeftMouseReleased()) m_scrollBarDragging = false; captureInput = true; } } } return captureInput; }
// Method returns true if input was captured by control, so no other controls, nor screen can use input in this update public override bool HandleInput(MyGuiInput input, bool hasKeyboardActiveControl, bool hasKeyboardActiveControlPrevious, bool receivedFocusInThisUpdate) { bool captureInput = base.HandleInput(input, hasKeyboardActiveControl, hasKeyboardActiveControlPrevious, receivedFocusInThisUpdate); if (captureInput == false) { if (((IsMouseOver() == true) && ((input.IsNewLeftMouseReleased() == true))) || ((hasKeyboardActiveControl == true) && (m_canHandleKeyboardInput == true) && ((input.IsJoystickButtonNewPressed(MyJoystickButtonsEnum.J01)) || (input.IsNewKeyPress(Keys.Enter)) || (input.IsNewKeyPress(Keys.Space))))) { if (m_implementedFeature == false) { MyAudio.AddCue2D(MySoundCuesEnum.GuiMouseClick); MyGuiManager.AddScreen(new MyGuiScreenMessageBox(MyMessageBoxType.ERROR, MyTextsWrapperEnum.FeatureNotYetImplemented, MyTextsWrapperEnum.MessageBoxCaptionFeatureDisabled, MyTextsWrapperEnum.Ok, null)); } else if (m_accessForbiddenReason != null) { MyAudio.AddCue2D(MySoundCuesEnum.GuiMouseClick); MyGuiManager.AddScreen(new MyGuiScreenMessageBox(MyMessageBoxType.ERROR, m_accessForbiddenReason.Value, MyTextsWrapperEnum.MessageBoxCaptionFeatureDisabled, MyTextsWrapperEnum.Ok, null)); } else if (Enabled || UseSwitchMode) { MyAudio.AddCue2D(MySoundCuesEnum.GuiMouseClick); if (m_onButtonClick != null) { m_onButtonClick(this); } else if (m_onIndexedButtonClick != null) { m_onIndexedButtonClick(m_buttonIndex); } } captureInput = true; } } return captureInput; }
public bool HandleInputEx(MyGuiInput input, bool hasKeyboardActiveControl, bool hasKeyboardActiveControlPrevious, bool receivedFocusInThisUpdate) { if (!Visible) { return(false); } bool captured = false; // Hoover item if mouse cursor is inside its area if (TreeView.Contains(MyGuiManager.MouseCursorPosition.X, MyGuiManager.MouseCursorPosition.Y) && MyGUIHelper.Contains(m_currentOrigin, m_currentSize, MyGuiManager.MouseCursorPosition.X, MyGuiManager.MouseCursorPosition.Y)) { TreeView.HooveredItem = this; } if (Enabled && DragDrop != null) { captured = DragDrop.HandleInput(this, input); } // Single click - expand or focus item if (input.IsNewLeftMouseReleased()) { if (GetItemCount() > 0 && MyGUIHelper.Contains(m_currentOrigin + GetExpandIconPosition(), m_expandIconSize, MyGuiManager.MouseCursorPosition.X, MyGuiManager.MouseCursorPosition.Y)) { IsExpanded = !IsExpanded; captured = true; MyAudio.AddCue2D(MySoundCuesEnum.GuiMouseClick); } else if (TreeView.HooveredItem == this) { TreeView.FocusItem(this); captured = true; MyAudio.AddCue2D(MySoundCuesEnum.GuiMouseClick); } } // Double click - launch Action event if (Enabled && /*!captured && */ input.IsNewLeftMouseDoubleClick() && TreeView.HooveredItem == this) { if (Action != null) { DoAction(); } else if (GetItemCount() > 0) { IsExpanded = !IsExpanded; } captured = true; } // Right click - launch RightClick event if (/*!captured && */ input.IsNewRightMousePressed() && TreeView.HooveredItem == this) { if (RightClick != null) { RightClick(this, EventArgs.Empty); } captured = true; MyAudio.AddCue2D(MySoundCuesEnum.GuiMouseClick); } return(captured); }