From 52b16237ad863ce30746ac7efc46a9ece7e3bdd2 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Fri, 7 May 2021 12:36:08 +0100 Subject: Codechange: Don't update window contents if scrollbar position has not moved. --- src/widget_type.h | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'src/widget_type.h') diff --git a/src/widget_type.h b/src/widget_type.h index 200711356..c50a263d6 100644 --- a/src/widget_type.h +++ b/src/widget_type.h @@ -737,12 +737,15 @@ public: /** * Sets the position of the first visible element * @param position the position of the element + * @return true iff the position has changed */ - void SetPosition(int position) + 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; + return this->pos != old_pos; } /** @@ -750,16 +753,17 @@ public: * If the position would be too low or high it will be clamped appropriately * @param difference the amount of change requested * @param unit The stepping unit of \a difference + * @return true iff the position has changed */ - void UpdatePosition(int difference, ScrollbarStepping unit = SS_SMALL) + bool UpdatePosition(int difference, ScrollbarStepping unit = SS_SMALL) { - if (difference == 0) return; + if (difference == 0) return false; switch (unit) { case SS_SMALL: difference *= this->stepsize; break; case SS_BIG: difference *= this->cap; break; default: break; } - this->SetPosition(Clamp(this->pos + difference, 0, std::max(this->count - this->cap, 0))); + return this->SetPosition(Clamp(this->pos + difference, 0, std::max(this->count - this->cap, 0))); } /** -- cgit v1.2.3-54-g00ecf