From 5629716120f2635406707792a6967bcd7d3e0ff3 Mon Sep 17 00:00:00 2001
From: Héctor Ramón Jiménez <hector0193@gmail.com>
Date: Sun, 24 Nov 2019 12:12:08 +0100
Subject: Fix rounding error when scrolling

---
 native/src/widget/scrollable.rs | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

(limited to 'native')

diff --git a/native/src/widget/scrollable.rs b/native/src/widget/scrollable.rs
index 0d745756..9b7ccf84 100644
--- a/native/src/widget/scrollable.rs
+++ b/native/src/widget/scrollable.rs
@@ -295,7 +295,7 @@ where
 #[derive(Debug, Clone, Copy, Default)]
 pub struct State {
     scrollbar_grabbed_at: Option<Point>,
-    offset: u32,
+    offset: f32,
 }
 
 impl State {
@@ -321,10 +321,9 @@ impl State {
             return;
         }
 
-        self.offset = (self.offset as i32 - delta_y.round() as i32)
-            .max(0)
-            .min((content_bounds.height - bounds.height) as i32)
-            as u32;
+        self.offset = (self.offset - delta_y)
+            .max(0.0)
+            .min((content_bounds.height - bounds.height) as f32);
     }
 
     /// Moves the scroll position to a relative amount, given the bounds of
@@ -341,8 +340,8 @@ impl State {
         bounds: Rectangle,
         content_bounds: Rectangle,
     ) {
-        self.offset = ((content_bounds.height - bounds.height) * percentage)
-            .max(0.0) as u32;
+        self.offset =
+            ((content_bounds.height - bounds.height) * percentage).max(0.0);
     }
 
     /// Returns the current scrolling offset of the [`State`], given the bounds
@@ -354,7 +353,7 @@ impl State {
         let hidden_content =
             (content_bounds.height - bounds.height).max(0.0).round() as u32;
 
-        self.offset.min(hidden_content)
+        self.offset.min(hidden_content as f32) as u32
     }
 
     /// Returns whether the scrollbar is currently grabbed or not.
-- 
cgit