public void Update(TaeInputHandler input, TaeTransport parentTransport) { if (IsSeparator) { return; } if (!(GetIsEnabled?.Invoke() ?? true) || Rect.IsEmpty) { state = prevState = TransportButtonState.Normal; return; } bool hotkeyPressed = GetHotkey?.Invoke(this) ?? false; var relativeMousePos = input.MousePositionPoint - parentTransport.Rect.Location; bool mouseHover = Rect.Contains(relativeMousePos); if (mouseHover) { if (input.LeftClickDown && state != TransportButtonState.HoldingClick) { state = TransportButtonState.HoldingClick; } else if (!input.LeftClickHeld) { state = TransportButtonState.Hover; } } else { if (prevMouseHover) { state = prevState = TransportButtonState.Normal; } } //if (input.LeftClickHeld && !hotkeyPressed) // prevState = state; if (hotkeyPressed) { state = TransportButtonState.HoldingClick; } else if (!mouseHover) { state = TransportButtonState.Normal; } if (state != TransportButtonState.HoldingClick && prevState == TransportButtonState.HoldingClick) { OnClick?.Invoke(); } prevState = state; prevMouseHover = mouseHover; }
public void UpdateInput(TaeInputHandler input, float elapsedSeconds, bool allowScrollWheel) { var relMouse = new Point((int)(input.MousePosition.X), (int)(input.MousePosition.Y)); if (CurrentScroll == ScrollbarType.None && input.LeftClickDown) { if (!DisableHorizontalScroll && HorizontalBox.Contains(relMouse)) { CurrentScroll = ScrollbarType.Horizontal; HorizontalBoxGrabOffset = new Point(relMouse.X - HorizontalBox.X, relMouse.Y - HorizontalBox.Y); } else if (!DisableVerticalScroll && VerticalBox.Contains(relMouse)) { CurrentScroll = ScrollbarType.Vertical; VerticalBoxGrabOffset = new Point(relMouse.X - VerticalBox.X, relMouse.Y - VerticalBox.Y); } } else if (CurrentScroll == ScrollbarType.Horizontal) { //ScrollByPixels(new Vector2(input.MousePositionDelta.X, 0)); ScrollHorizontalBarToMouse(relMouse); } else if (CurrentScroll == ScrollbarType.Vertical) { //ScrollByPixels(new Vector2(0, input.MousePositionDelta.Y)); ScrollVerticalBarToMouse(relMouse); } if (!input.LeftClickHeld) { CurrentScroll = ScrollbarType.None; } ScrollUpButtonHeld = CurrentScroll == ScrollbarType.None && !DisableVerticalScroll && input.LeftClickHeld && ScrollUpArrowBox.Contains(relMouse); ScrollDownButtonHeld = CurrentScroll == ScrollbarType.None && !DisableVerticalScroll && input.LeftClickHeld && ScrollDownArrowBox.Contains(relMouse); ScrollLeftButtonHeld = CurrentScroll == ScrollbarType.None && !DisableHorizontalScroll && input.LeftClickHeld && ScrollLeftArrowBox.Contains(relMouse); ScrollRightButtonHeld = CurrentScroll == ScrollbarType.None && !DisableHorizontalScroll && input.LeftClickHeld && ScrollRightArrowBox.Contains(relMouse); if (!DisableVerticalScroll) { if (ScrollUpButton.Update(elapsedSeconds, ScrollUpButtonHeld)) { ScrollByVirtualScrollUnits(new Vector2(0, -ScrollArrowButtonVirtualScrollAmountY)); } if (ScrollDownButton.Update(elapsedSeconds, ScrollDownButtonHeld)) { ScrollByVirtualScrollUnits(new Vector2(0, ScrollArrowButtonVirtualScrollAmountY)); } } if (!DisableHorizontalScroll) { if (ScrollLeftButton.Update(elapsedSeconds, ScrollLeftButtonHeld)) { ScrollByVirtualScrollUnits(new Vector2(-ScrollArrowButtonVirtualScrollAmountX, 0)); } if (ScrollRightButton.Update(elapsedSeconds, ScrollRightButtonHeld)) { ScrollByVirtualScrollUnits(new Vector2(ScrollArrowButtonVirtualScrollAmountX, 0)); } } var scrollWheel = allowScrollWheel ? input.ScrollDelta : 0; if (scrollWheel != 0) { if (input.KeyHeld(Microsoft.Xna.Framework.Input.Keys.LeftShift) || input.KeyHeld(Microsoft.Xna.Framework.Input.Keys.RightShift)) { if (!DisableHorizontalScroll) { ScrollByVirtualScrollUnits(new Vector2(-scrollWheel * ScrollWheelVirtualScrollAmountX, 0)); } } else { if (!DisableVerticalScroll) { ScrollByVirtualScrollUnits(new Vector2(0, -scrollWheel * ScrollWheelVirtualScrollAmountY)); } } } }