fix bug that large listbox not scrolling correctly(#324)
This commit is contained in:
parent
6add8868da
commit
8e546695d7
@ -99,12 +99,14 @@ namespace nana
|
|||||||
|
|
||||||
//Check scroll_area to avoiding division by zero.
|
//Check scroll_area to avoiding division by zero.
|
||||||
if (scroll_area)
|
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);
|
//converting to double to avoid overflow.
|
||||||
int nextpos = static_cast<int>((metrics_.value + 1) * scroll_area / value_max);
|
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))
|
if(selfpos != nextpos && (pos - selfpos > nextpos - pos))
|
||||||
++metrics_.value;
|
++metrics_.value;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user