fix bug that large listbox not scrolling correctly(#324)

This commit is contained in:
Jinhao 2018-07-15 16:52:33 +08:00
parent 6add8868da
commit 8e546695d7

View File

@ -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<double>(value_max) / scroll_area); //converting to double to avoid overflow.
if(metrics_.value < value_max)
if (metrics_.value < value_max)
{
int selfpos = static_cast<int>(metrics_.value * scroll_area / value_max);
int nextpos = static_cast<int>((metrics_.value + 1) * scroll_area / value_max);
//converting to double to avoid overflow.
auto const px_per_value = static_cast<double>(scroll_area) / value_max;
int selfpos = static_cast<int>(metrics_.value * px_per_value);
int nextpos = static_cast<int>((metrics_.value + 1) * px_per_value);
if(selfpos != nextpos && (pos - selfpos > nextpos - pos))
++metrics_.value;