[gnome-tour: 1/2] Refactor `update_position`




commit 0eafe2c5a63d0655a9410a6a34a88cd0711cc65f
Author: Julian Hofer <julianhofer gnome org>
Date:   Mon Oct 5 18:47:18 2020 +0200

    Refactor `update_position`
    
    The original implementation to determine the button opacity was clever,
    but not easy to understand. The new implementation is more verbose,
    but hopefully easier to get.

 src/widgets/paginator.rs | 22 ++++++++++++++--------
 1 file changed, 14 insertions(+), 8 deletions(-)
---
diff --git a/src/widgets/paginator.rs b/src/widgets/paginator.rs
index 026bdab..b0de46b 100644
--- a/src/widgets/paginator.rs
+++ b/src/widgets/paginator.rs
@@ -64,17 +64,23 @@ impl PaginatorWidget {
     }
 
     fn update_position(&self) {
-        let n_pages = self.carousel.get_n_pages() as f64;
         let position = self.carousel.get_position();
         let page_nr = position.round() as u32;
 
-        let opacity_close = (position - n_pages + 2_f64).max(0_f64);
-        let opacity_previous = if position <= 1_f64 { position } else { 1_f64 };
-        let opacity_next = if position <= 1_f64 && position <= n_pages {
-            position % n_pages
-        } else {
-            1_f64
-        };
+        let n_pages = self.carousel.get_n_pages() as f64;
+        let forelast_page = n_pages - 2.0;
+        let last_page = n_pages - 1.0;
+
+        let (opacity_close, opacity_previous, opacity_next) =
+            if (0.0 <= position) && (position < 1.0) {
+                (0.0, position, position)
+            } else if (1.0 <= position) && (position <= forelast_page) {
+                (0.0, 1.0, 1.0)
+            } else if (forelast_page < position) && (position <= last_page) {
+                (position - forelast_page, 1.0, 1.0)
+            } else {
+                panic!("Position of the carousel is outside the allowed range");
+            };
 
         self.close_btn.set_opacity(opacity_close);
         self.close_btn.set_visible(opacity_close > 0_f64);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]