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;