MCPcopy Create free account
hub / github.com/OpenRCT2/OpenRCT2 / InputScrollBegin

Function InputScrollBegin

src/openrct2-ui/input/MouseInput.cpp:638–708  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

636#pragma region Scroll bars
637
638 static void InputScrollBegin(WindowBase& w, WidgetIndex widgetIndex, const ScreenCoordsXY& screenCoords)
639 {
640 const auto& widget = w.widgets[widgetIndex];
641
642 _inputState = InputState::scrollLeft;
643 gPressedWidget.windowClassification = w.classification;
644 gPressedWidget.windowNumber = w.number;
645 gPressedWidget.widgetIndex = widgetIndex;
646 gTooltipCursor = screenCoords;
647
648 int32_t scroll_area, scroll_id;
649 ScreenCoordsXY scrollCoords;
650 scroll_id = 0; // safety
651 widgetScrollGetPart(w, &widget, screenCoords, scrollCoords, &scroll_area, &scroll_id);
652
653 _currentScrollArea = scroll_area;
654 _currentScrollIndex = scroll_id;
655 w.onScrollSelect(scroll_id, scroll_area);
656 if (scroll_area == SCROLL_PART_VIEW)
657 {
658 w.onScrollMouseDown(scroll_id, scrollCoords);
659 return;
660 }
661
662 const auto& widg = w.widgets[widgetIndex];
663 auto& scroll = w.scrolls[scroll_id];
664
665 int32_t widget_width = widg.width() - 2;
666 if (scroll.flags & VSCROLLBAR_VISIBLE)
667 widget_width -= kScrollBarWidth + 1;
668 int32_t widget_content_width = std::max(scroll.contentWidth - widget_width, 0);
669
670 int32_t widget_height = widg.bottom - widg.top - 1;
671 if (scroll.flags & HSCROLLBAR_VISIBLE)
672 widget_height -= kScrollBarWidth + 1;
673 int32_t widget_content_height = std::max(scroll.contentHeight - widget_height, 0);
674
675 switch (scroll_area)
676 {
677 case SCROLL_PART_HSCROLLBAR_LEFT:
678 scroll.contentOffsetX = std::max(scroll.contentOffsetX - 3, 0);
679 break;
680 case SCROLL_PART_HSCROLLBAR_RIGHT:
681 scroll.contentOffsetX = std::min(scroll.contentOffsetX + 3, widget_content_width);
682 break;
683 case SCROLL_PART_HSCROLLBAR_LEFT_TROUGH:
684 scroll.contentOffsetX = std::max(scroll.contentOffsetX - widget_width, 0);
685 break;
686 case SCROLL_PART_HSCROLLBAR_RIGHT_TROUGH:
687 scroll.contentOffsetX = std::min(scroll.contentOffsetX + widget_width, widget_content_width);
688 break;
689 case SCROLL_PART_VSCROLLBAR_TOP:
690 scroll.contentOffsetY = std::max(scroll.contentOffsetY - 3, 0);
691 break;
692 case SCROLL_PART_VSCROLLBAR_BOTTOM:
693 scroll.contentOffsetY = std::min(scroll.contentOffsetY + 3, widget_content_height);
694 break;
695 case SCROLL_PART_VSCROLLBAR_TOP_TROUGH:

Callers 1

InputWidgetLeftFunction · 0.85

Calls 7

widgetScrollGetPartFunction · 0.85
widgetScrollUpdateThumbsFunction · 0.85
GetWindowManagerFunction · 0.85
widthMethod · 0.80
InvalidateByNumberMethod · 0.80
onScrollSelectMethod · 0.45
onScrollMouseDownMethod · 0.45

Tested by

no test coverage detected