From 8e546695d74add42ceb1caf05e943d9029064675 Mon Sep 17 00:00:00 2001 From: Jinhao Date: Sun, 15 Jul 2018 16:52:33 +0800 Subject: [PATCH] fix bug that large listbox not scrolling correctly(#324) --- source/gui/widgets/scroll.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/source/gui/widgets/scroll.cpp b/source/gui/widgets/scroll.cpp index acc2c8b6..01684d2b 100644 --- a/source/gui/widgets/scroll.cpp +++ b/source/gui/widgets/scroll.cpp @@ -99,12 +99,14 @@ namespace nana //Check scroll_area to avoiding division by zero. if (scroll_area) - metrics_.value = pos * value_max / scroll_area; + metrics_.value = pos * (static_cast(value_max) / scroll_area); //converting to double to avoid overflow. - if(metrics_.value < value_max) + if (metrics_.value < value_max) { - int selfpos = static_cast(metrics_.value * scroll_area / value_max); - int nextpos = static_cast((metrics_.value + 1) * scroll_area / value_max); + //converting to double to avoid overflow. + auto const px_per_value = static_cast(scroll_area) / value_max; + int selfpos = static_cast(metrics_.value * px_per_value); + int nextpos = static_cast((metrics_.value + 1) * px_per_value); if(selfpos != nextpos && (pos - selfpos > nextpos - pos)) ++metrics_.value;