0x004C8CFD regs.bp: deltaX
| 86 | // 0x004C8CFD |
| 87 | // regs.bp: deltaX |
| 88 | void horizontalDragFollow(Ui::Window& window, Ui::Widget* const widget, const WidgetIndex_t dragWidgetIndex, const size_t dragScrollIndex, const int16_t deltaX) |
| 89 | { |
| 90 | ScrollArea& scrollArea = window.scrollAreas[dragScrollIndex]; |
| 91 | if (!scrollArea.hasFlags(ScrollFlags::hscrollbarVisible)) |
| 92 | { |
| 93 | return; |
| 94 | } |
| 95 | |
| 96 | uint16_t trackWidth = widget->width() - 2 - kThumbSize - kThumbSize; |
| 97 | if (scrollArea.hasFlags(ScrollFlags::vscrollbarVisible)) |
| 98 | { |
| 99 | trackWidth -= kScrollbarSize; |
| 100 | } |
| 101 | |
| 102 | if (trackWidth == 0) |
| 103 | { |
| 104 | return; |
| 105 | } |
| 106 | auto contentDeltaX = deltaX * scrollArea.contentWidth / trackWidth; |
| 107 | |
| 108 | int16_t newOffset = scrollArea.contentOffsetX + contentDeltaX; |
| 109 | |
| 110 | int frameWidth = widget->width() - 2; |
| 111 | if (scrollArea.hasFlags(ScrollFlags::vscrollbarVisible)) |
| 112 | { |
| 113 | frameWidth -= kScrollbarSize; |
| 114 | } |
| 115 | |
| 116 | int16_t maxOffset = scrollArea.contentWidth - frameWidth; |
| 117 | maxOffset = std::max<int16_t>(maxOffset, 0); |
| 118 | |
| 119 | scrollArea.contentOffsetX = std::clamp<int16_t>(newOffset, 0, maxOffset); |
| 120 | |
| 121 | ScrollView::updateThumbs(window, dragWidgetIndex); |
| 122 | WindowManager::invalidateWidget(window.type, window.number, dragWidgetIndex); |
| 123 | } |
| 124 | |
| 125 | // 0x004C8E2E |
| 126 | // regs.bp: deltaY |
no test coverage detected