MCPcopy Create free account
hub / github.com/OpenLoco/OpenLoco / horizontalFollow

Function horizontalFollow

src/OpenLoco/src/Ui/ScrollView.cpp:16–48  ·  view source on GitHub ↗

0x004C87E1 regs.bp: deltaX

Source from the content-addressed store, hash-verified

14 // 0x004C87E1
15 // regs.bp: deltaX
16 static void horizontalFollow(Ui::Window& window, Ui::Widget* const widget, const WidgetIndex_t widgetIndex, const size_t scrollIndex, const int16_t deltaX)
17 {
18 ScrollArea& scrollArea = window.scrollAreas[scrollIndex];
19 scrollArea.flags |= ScrollFlags::hscrollbarThumbPressed;
20
21 uint16_t trackWidth = widget->width() - (kThumbSize * 2);
22 if (scrollArea.hasFlags(ScrollFlags::vscrollbarVisible))
23 {
24 trackWidth -= kScrollbarSize;
25 }
26
27 if (trackWidth == 0)
28 {
29 return;
30 }
31 auto contentDeltaX = deltaX * scrollArea.contentWidth / trackWidth;
32
33 int16_t newOffset = scrollArea.contentOffsetX + contentDeltaX;
34
35 int frameWidth = widget->width() - (kScrollbarMargin * 2);
36 if (scrollArea.hasFlags(ScrollFlags::vscrollbarVisible))
37 {
38 frameWidth -= kScrollbarSize;
39 }
40
41 int16_t maxOffset = scrollArea.contentWidth - frameWidth;
42 maxOffset = std::max<int16_t>(maxOffset, 0);
43
44 scrollArea.contentOffsetX = std::clamp<int16_t>(newOffset, 0, maxOffset);
45
46 ScrollView::updateThumbs(window, widgetIndex);
47 WindowManager::invalidateWidget(window.type, window.number, widgetIndex);
48 }
49
50 // 0x004C8898
51 // regs.bp: deltaY

Callers 1

scrollLeftContinueFunction · 0.85

Calls 4

updateThumbsFunction · 0.85
invalidateWidgetFunction · 0.85
widthMethod · 0.45
hasFlagsMethod · 0.45

Tested by

no test coverage detected