diff --git a/src/display.rs b/src/display.rs index 040c206..ee800aa 100644 --- a/src/display.rs +++ b/src/display.rs @@ -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, 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(()) }