diff --git a/src/company_gui.cpp b/src/company_gui.cpp index 79cede9573..ea0c9df394 100644 --- a/src/company_gui.cpp +++ b/src/company_gui.cpp @@ -795,7 +795,7 @@ public: /* Position scrollbar to selected group */ for (uint i = 0; i < this->rows; i++) { if (this->groups[i]->index == sel) { - this->vscroll->SetPosition(Clamp(i - this->vscroll->GetCapacity() / 2, 0, std::max(this->vscroll->GetCount() - this->vscroll->GetCapacity(), 0))); + this->vscroll->SetPosition(i - this->vscroll->GetCapacity() / 2); break; } } diff --git a/src/script/script_gui.cpp b/src/script/script_gui.cpp index 8c9a1abcc7..1a1bca2822 100644 --- a/src/script/script_gui.cpp +++ b/src/script/script_gui.cpp @@ -866,9 +866,7 @@ struct ScriptDebugWindow : public Window { } if (this->autoscroll) { int scroll_pos = std::max(0, log->used - this->vscroll->GetCapacity()); - if (scroll_pos != this->vscroll->GetPosition()) { - this->vscroll->SetPosition(scroll_pos); - + if (this->vscroll->SetPosition(scroll_pos)) { /* We need a repaint */ this->SetWidgetDirty(WID_SCRD_SCROLLBAR); this->SetWidgetDirty(WID_SCRD_LOG_PANEL); diff --git a/src/widget_type.h b/src/widget_type.h index 8c05a321f7..078aa49b10 100644 --- a/src/widget_type.h +++ b/src/widget_type.h @@ -746,10 +746,8 @@ public: */ bool SetPosition(int position) { - assert(position >= 0); - assert(this->count <= this->cap ? (position == 0) : (position + this->cap <= this->count)); uint16 old_pos = this->pos; - this->pos = position; + this->pos = Clamp(position, 0, std::max(this->count - this->cap, 0)); return this->pos != old_pos; } @@ -768,7 +766,7 @@ public: case SS_BIG: difference *= this->cap; break; default: break; } - return this->SetPosition(Clamp(this->pos + difference, 0, std::max(this->count - this->cap, 0))); + return this->SetPosition(this->pos + difference); } /**