From 8bfc707a596c45ce134a427d8c800620042ba78c Mon Sep 17 00:00:00 2001 From: rabite Date: Wed, 3 Apr 2019 11:28:30 +0200 Subject: don't animate over other widgets --- src/preview.rs | 42 +++++++++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 11 deletions(-) (limited to 'src/preview.rs') diff --git a/src/preview.rs b/src/preview.rs index 4607fa4..c395e86 100644 --- a/src/preview.rs +++ b/src/preview.rs @@ -420,6 +420,7 @@ pub struct Previewer { core: WidgetCore, file: Option, pub cache: FsCache, + animator: Stale } @@ -434,7 +435,8 @@ impl Previewer { Previewer { widget: widget, core: core.clone(), file: None, - cache: cache } + cache: cache, + animator: Stale::new()} } fn become_preview(&mut self, @@ -453,6 +455,10 @@ impl Previewer { self.file.as_ref() } + pub fn cancel_animation(&self) -> HResult<()> { + self.animator.set_stale() + } + pub fn take_files(&mut self) -> HResult { let core = self.core.clone(); let mut widget = AsyncWidget::new(&core.clone(), Box::new(move |_| { @@ -513,8 +519,10 @@ impl Previewer { let file = file.clone(); let core = self.core.clone(); let cache = self.cache.clone(); + let animator = self.animator.clone(); self.widget.set_stale().ok(); + self.animator.set_fresh().log(); self.become_preview(Ok(AsyncWidget::new(&self.core, Box::new(move |stale: Stale| { @@ -524,21 +532,28 @@ impl Previewer { let preview = Previewer::preview_dir(&file, cache, &core, - stale); + stale, + animator); return preview; } if file.is_text() { - return Previewer::preview_text(&file, &core, stale) + return Previewer::preview_text(&file, + &core, + stale, + animator); } - let preview = Previewer::preview_external(&file, &core, stale); + let preview = Previewer::preview_external(&file, + &core, + stale, + animator.clone()); if preview.is_ok() { return preview; } else { let mut blank = TextView::new_blank(&core); blank.set_coordinates(&coordinates).log(); blank.refresh().log(); - blank.animate_slide_up().log(); + blank.animate_slide_up(Some(animator)).log(); return Ok(PreviewWidget::TextView(blank)) } })))) @@ -560,7 +575,8 @@ impl Previewer { fn preview_dir(file: &File, cache: FsCache, core: &WidgetCore, - stale: Stale) + stale: Stale, + animator: Stale) -> HResult { let (selection, cached_files) = cache.get_files(&file, stale.clone())?; @@ -577,11 +593,14 @@ impl Previewer { file_list.set_coordinates(&core.coordinates)?; file_list.refresh()?; if is_stale(&stale)? { return Previewer::preview_failed(&file) } - file_list.animate_slide_up()?; + file_list.animate_slide_up(Some(animator))?; Ok(PreviewWidget::FileList(file_list)) } - fn preview_text(file: &File, core: &WidgetCore, stale: Stale) + fn preview_text(file: &File, + core: &WidgetCore, + stale: Stale, + animator: Stale) -> HResult { let lines = core.coordinates.ysize() as usize; let mut textview @@ -595,13 +614,14 @@ impl Previewer { if is_stale(&stale)? { return Previewer::preview_failed(&file) } - textview.animate_slide_up()?; + textview.animate_slide_up(Some(animator))?; Ok(PreviewWidget::TextView(textview)) } fn preview_external(file: &File, core: &WidgetCore, - stale: Stale) + stale: Stale, + animator: Stale) -> HResult { let process = std::process::Command::new("scope.sh") @@ -644,7 +664,7 @@ impl Previewer { offset: 0}; textview.set_coordinates(&core.coordinates).log(); textview.refresh().log(); - textview.animate_slide_up().log(); + textview.animate_slide_up(Some(animator)).log(); return Ok(PreviewWidget::TextView(textview)) } HError::preview_failed(file) -- cgit v1.2.3