]> git.seodisparate.com - mpd_info_screen/commitdiff
Backport: Fix timer bg not updating
authorStephen Seo <seo.disparate@gmail.com>
Sat, 4 Feb 2023 11:41:47 +0000 (20:41 +0900)
committerStephen Seo <seo.disparate@gmail.com>
Wed, 1 Mar 2023 12:54:13 +0000 (21:54 +0900)
This commit fixes the bg mesh (slightly-transparent-black-bg for text)
not updating when the timer-text changes size.

src/display.rs

index 040c20650724ac504612e98443bf43cb5af9039b..ee800aa0ab35e42ae4dc76e6d5d9d74f7bda0e0c 100644 (file)
@@ -203,11 +203,17 @@ pub struct MPDDisplay {
     album_string_cache: String,
     album_transform: Transform,
     timer_text: Text,
+    timer_text_len: usize,
     timer_transform: Transform,
     timer_x: f32,
     timer_y: f32,
     timer: f64,
     length: f64,
+    cached_filename_y: f32,
+    cached_album_y: f32,
+    cached_artist_y: f32,
+    cached_title_y: f32,
+    cached_timer_y: f32,
     text_bg_mesh: Option<Mesh>,
     hide_text: bool,
     tried_album_art_in_dir: bool,
@@ -237,11 +243,17 @@ impl MPDDisplay {
             title_text: Text::default(),
             title_transform: Transform::default(),
             timer_text: Text::new("0"),
+            timer_text_len: 0,
             timer_transform: Transform::default(),
             timer_x: INIT_FONT_SIZE_X,
             timer_y: INIT_FONT_SIZE_Y,
             timer: 0.0,
             length: 0.0,
+            cached_filename_y: 0.0f32,
+            cached_album_y: 0.0f32,
+            cached_artist_y: 0.0f32,
+            cached_title_y: 0.0f32,
+            cached_timer_y: 0.0f32,
             text_bg_mesh: None,
             hide_text: false,
             tried_album_art_in_dir: false,
@@ -446,12 +458,6 @@ impl MPDDisplay {
 
         let mut offset_y: f32 = screen_coords.h;
 
-        let mut filename_y: f32 = 0.0;
-        let mut album_y: f32 = 0.0;
-        let mut artist_y: f32 = 0.0;
-        let mut title_y: f32 = 0.0;
-        let mut timer_y: f32 = 0.0;
-
         let set_transform = |text: &mut Text,
                              transform: &mut Transform,
                              offset_y: &mut f32,
@@ -535,7 +541,7 @@ impl MPDDisplay {
                 &mut self.filename_text,
                 &mut self.filename_transform,
                 &mut offset_y,
-                &mut filename_y,
+                &mut self.cached_filename_y,
                 true,
                 false,
                 false,
@@ -555,7 +561,7 @@ impl MPDDisplay {
                 &mut self.album_text,
                 &mut self.album_transform,
                 &mut offset_y,
-                &mut album_y,
+                &mut self.cached_album_y,
                 true,
                 false,
                 true,
@@ -569,7 +575,7 @@ impl MPDDisplay {
                 &mut self.artist_text,
                 &mut self.artist_transform,
                 &mut offset_y,
-                &mut artist_y,
+                &mut self.cached_artist_y,
                 true,
                 true,
                 false,
@@ -589,7 +595,7 @@ impl MPDDisplay {
                 &mut self.title_text,
                 &mut self.title_transform,
                 &mut offset_y,
-                &mut title_y,
+                &mut self.cached_title_y,
                 true,
                 false,
                 false,
@@ -608,7 +614,7 @@ impl MPDDisplay {
             &mut self.timer_text,
             &mut self.timer_transform,
             &mut offset_y,
-            &mut timer_y,
+            &mut self.cached_timer_y,
             false,
             false,
             false,
@@ -616,6 +622,12 @@ impl MPDDisplay {
             &mut self.timer_y,
         );
 
+        self.update_bg_mesh(ctx)?;
+
+        Ok(())
+    }
+
+    fn update_bg_mesh(&mut self, ctx: &mut Context) -> GameResult<()> {
         let filename_dimensions = self.filename_text.dimensions(ctx);
         let album_dimensions = self.album_text.dimensions(ctx);
         let artist_dimensions = self.artist_text.dimensions(ctx);
@@ -628,7 +640,7 @@ impl MPDDisplay {
                 DrawMode::fill(),
                 Rect {
                     x: TEXT_X_OFFSET,
-                    y: filename_y,
+                    y: self.cached_filename_y,
                     w: filename_dimensions.w,
                     h: filename_dimensions.h,
                 },
@@ -640,7 +652,7 @@ impl MPDDisplay {
                 DrawMode::fill(),
                 Rect {
                     x: TEXT_X_OFFSET,
-                    y: album_y,
+                    y: self.cached_album_y,
                     w: album_dimensions.w,
                     h: album_dimensions.h,
                 },
@@ -652,7 +664,7 @@ impl MPDDisplay {
                 DrawMode::fill(),
                 Rect {
                     x: TEXT_X_OFFSET,
-                    y: artist_y,
+                    y: self.cached_artist_y,
                     w: artist_dimensions.w,
                     h: artist_dimensions.h,
                 },
@@ -664,7 +676,7 @@ impl MPDDisplay {
                 DrawMode::fill(),
                 Rect {
                     x: TEXT_X_OFFSET,
-                    y: title_y,
+                    y: self.cached_title_y,
                     w: title_dimensions.w,
                     h: title_dimensions.h,
                 },
@@ -676,7 +688,7 @@ impl MPDDisplay {
                 DrawMode::fill(),
                 Rect {
                     x: TEXT_X_OFFSET,
-                    y: timer_y,
+                    y: self.cached_timer_y,
                     w: timer_dimensions.w,
                     h: timer_dimensions.h,
                 },
@@ -885,6 +897,7 @@ impl EventHandler for MPDDisplay {
         let delta = timer::delta(ctx);
         self.timer += delta.as_secs_f64();
         let timer_diff = seconds_to_time(self.length - self.timer);
+        let timer_diff_len = timer_diff.len();
         self.timer_text = Text::new(timer_diff);
         self.timer_text.set_font(
             Font::default(),
@@ -893,6 +906,10 @@ impl EventHandler for MPDDisplay {
                 y: self.timer_y,
             },
         );
+        if timer_diff_len != self.timer_text_len {
+            self.timer_text_len = timer_diff_len;
+            self.update_bg_mesh(ctx)?;
+        }
 
         Ok(())
     }