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

Function verticalFollow

src/OpenLoco/src/Ui/ScrollView.cpp:52–84  ·  view source on GitHub ↗

0x004C8898 regs.bp: deltaY

Source from the content-addressed store, hash-verified

50 // 0x004C8898
51 // regs.bp: deltaY
52 static void verticalFollow(Ui::Window& window, Ui::Widget* const widget, const WidgetIndex_t widgetIndex, const size_t scrollIndex, const int16_t deltaY)
53 {
54 ScrollArea& scrollArea = window.scrollAreas[scrollIndex];
55 scrollArea.flags |= ScrollFlags::vscrollbarThumbPressed;
56
57 uint16_t trackHeight = widget->height() - (kThumbSize * 2);
58 if (scrollArea.hasFlags(ScrollFlags::hscrollbarVisible))
59 {
60 trackHeight -= kScrollbarSize;
61 }
62
63 if (trackHeight == 0)
64 {
65 return;
66 }
67 auto contentDeltaY = deltaY * scrollArea.contentHeight / trackHeight;
68
69 int16_t newOffset = scrollArea.contentOffsetY + contentDeltaY;
70
71 int frameHeight = widget->height() - (kScrollbarMargin * 2);
72 if (scrollArea.hasFlags(ScrollFlags::hscrollbarVisible))
73 {
74 frameHeight -= kScrollbarSize;
75 }
76
77 int16_t maxOffset = scrollArea.contentHeight - frameHeight;
78 maxOffset = std::max<int16_t>(maxOffset, 0);
79
80 scrollArea.contentOffsetY = std::clamp<int16_t>(newOffset, 0, maxOffset);
81
82 ScrollView::updateThumbs(window, widgetIndex);
83 WindowManager::invalidateWidget(window.type, window.number, widgetIndex);
84 }
85
86 // 0x004C8CFD
87 // regs.bp: deltaX

Callers 1

scrollLeftContinueFunction · 0.85

Calls 4

updateThumbsFunction · 0.85
invalidateWidgetFunction · 0.85
heightMethod · 0.45
hasFlagsMethod · 0.45

Tested by

no test coverage detected