diff --git a/src/script/script_gui.cpp b/src/script/script_gui.cpp index 673747f2cd..2546083ded 100644 --- a/src/script/script_gui.cpp +++ b/src/script/script_gui.cpp @@ -860,11 +860,10 @@ struct ScriptDebugWindow : public Window { /* Detect when the user scrolls the window. Enable autoscroll when the * bottom-most line becomes visible. */ if (this->last_vscroll_pos != this->vscroll->GetPosition()) { - this->autoscroll = this->vscroll->GetPosition() >= log.size() - this->vscroll->GetCapacity(); + this->autoscroll = this->vscroll->GetPosition() + this->vscroll->GetCapacity() >= (int)log.size(); } if (this->autoscroll) { - int scroll_pos = std::max(0, (int)log.size() - this->vscroll->GetCapacity()); - if (this->vscroll->SetPosition(scroll_pos)) { + if (this->vscroll->SetPosition((int)log.size())) { /* We need a repaint */ this->SetWidgetDirty(WID_SCRD_SCROLLBAR); this->SetWidgetDirty(WID_SCRD_LOG_PANEL); diff --git a/src/window.cpp b/src/window.cpp index 16a43e0fdd..c12aab6e37 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -2379,13 +2379,10 @@ static void HandleScrollbarScrolling(Window *w) return; } - /* Find the item we want to move to and make sure it's inside bounds. */ - int pos = std::min(RoundDivSU(std::max(0, i + _scrollbar_start_pos) * sb->GetCount(), _scrollbar_size), std::max(0, sb->GetCount() - sb->GetCapacity())); - if (rtl) pos = std::max(0, sb->GetCount() - sb->GetCapacity() - pos); - if (pos != sb->GetPosition()) { - sb->SetPosition(pos); - w->SetDirty(); - } + /* Find the item we want to move to. SetPosition will make sure it's inside bounds. */ + int pos = RoundDivSU((i + _scrollbar_start_pos) * sb->GetCount(), _scrollbar_size); + if (rtl) pos = sb->GetCount() - sb->GetCapacity() - pos; + if (sb->SetPosition(pos)) w->SetDirty(); } /**