From cdaacd1ca6300a037140c01cce1d788bebf9baee Mon Sep 17 00:00:00 2001 From: rabite Date: Thu, 23 May 2019 19:49:01 +0200 Subject: [PATCH] move methods from Widget trait to WidgetCore --- src/bookmarks.rs | 6 +- src/file_browser.rs | 42 ++++---- src/hbox.rs | 2 +- src/listview.rs | 33 ++++--- src/mediaview.rs | 4 +- src/minibuffer.rs | 8 +- src/preview.rs | 6 +- src/proclist.rs | 8 +- src/tabview.rs | 2 +- src/textview.rs | 2 +- src/widget.rs | 230 ++++++++++++++++++++++---------------------- 11 files changed, 171 insertions(+), 172 deletions(-) diff --git a/src/bookmarks.rs b/src/bookmarks.rs index 326be7c..29a7b5c 100644 --- a/src/bookmarks.rs +++ b/src/bookmarks.rs @@ -102,7 +102,7 @@ impl BMPopup { err @ Err(HError::WidgetResizedError) => err?, err @ Err(_) => err?, } - self.clear()?; + self.get_core()?.clear()?; let bookmark = self.bookmark_path.take(); Ok(bookmark?) @@ -112,9 +112,9 @@ impl BMPopup { self.add_mode = true; self.bookmark_path = Some(path.to_string()); self.refresh()?; - self.clear()?; + self.get_core()?.clear()?; self.popup()?; - self.clear()?; + self.get_core()?.clear()?; Ok(()) } diff --git a/src/file_browser.rs b/src/file_browser.rs index 51afd13..e01f4b8 100644 --- a/src/file_browser.rs +++ b/src/file_browser.rs @@ -197,7 +197,7 @@ impl Tabbable for TabView { } fn on_config_loaded(&mut self) -> HResult<()> { - let show_hidden = self.config().show_hidden(); + let show_hidden = self.core.config().show_hidden(); for tab in self.widgets.iter_mut() { tab.left_async_widget_mut().map(|async_w| { @@ -366,7 +366,7 @@ impl FileBrowser { let status = format!("{}Stop right there, cowboy! Check your permisions!", term::color_red()); - self.show_status(&status).log(); + self.core.show_status(&status).log(); return Ok(()); } err @ Err(_) => err.log() @@ -414,17 +414,17 @@ impl FileBrowser { .status(); self.core.screen.activate().log(); - self.clear().log(); + self.core.clear().log(); self.core.get_sender().send(Events::InputEnabled(true))?; match status { Ok(status) => - self.show_status(&format!("\"{}\" exited with {}", - "rifle", status)).log(), + self.core.show_status(&format!("\"{}\" exited with {}", + "rifle", status)).log(), Err(err) => - self.show_status(&format!("Can't run this \"{}\": {}", - "rifle", err)).log() + self.core.show_status(&format!("Can't run this \"{}\": {}", + "rifle", err)).log() } } Ok(()) @@ -648,7 +648,7 @@ impl FileBrowser { pub fn set_title(&self) -> HResult<()> { let path = self.cwd.short_string(); - self.screen()?.set_title(&path)?; + self.core.screen()?.set_title(&path)?; Ok(()) } @@ -880,7 +880,7 @@ impl FileBrowser { } pub fn turbo_cd(&mut self) -> HResult<()> { - let dir = self.minibuffer("cd")?; + let dir = self.core.minibuffer("cd")?; let path = std::path::PathBuf::from(&dir); let dir = File::new_from_path(&path.canonicalize()?, None)?; @@ -910,7 +910,7 @@ impl FileBrowser { .output(); self.core.screen.activate().log(); - self.clear().log(); + self.core.clear().log(); self.core.get_sender().send(Events::InputEnabled(true))?; match cmd_result { @@ -954,7 +954,7 @@ impl FileBrowser { } else { let msg = format!("Can't access path: {}!", path.to_string_lossy()); - self.show_status(&msg).log(); + self.core.show_status(&msg).log(); } } else { let mut last_file = None; @@ -962,7 +962,7 @@ impl FileBrowser { if !file_path.exists() { let msg = format!("Can't find: {}", file_path .to_string_lossy()); - self.show_status(&msg).log(); + self.core.show_status(&msg).log(); continue; } @@ -988,10 +988,10 @@ impl FileBrowser { }).log(); } } else { - self.show_status("External program failed!").log(); + self.core.show_status("External program failed!").log(); } } - Err(_) => self.show_status("Can't run external program!").log() + Err(_) => self.core.show_status("Can't run external program!").log() } Ok(()) @@ -1018,7 +1018,7 @@ impl FileBrowser { .output(); self.core.screen.activate().log(); - self.clear().log(); + self.core.clear().log(); self.core.get_sender().send(Events::InputEnabled(true))?; match cmd_result { @@ -1043,15 +1043,15 @@ impl FileBrowser { else { let msg = format!("Can't access path: {}!", path.to_string_lossy()); - self.show_status(&msg).log(); + self.core.show_status(&msg).log(); } } else { - self.show_status("External program failed!").log(); + self.core.show_status("External program failed!").log(); } } } - Err(_) => self.show_status("Can't run external program!").log() + Err(_) => self.core.show_status("Can't run external program!").log() } Ok(()) @@ -1066,7 +1066,7 @@ impl FileBrowser { let selected_file = self.selected_file().ok(); let selected_files = self.selected_files().ok(); - let cmd = self.minibuffer("exec")?.trim_start().to_string() + " "; + let cmd = self.core.minibuffer("exec")?.trim_start().to_string() + " "; let cwd_files = selected_files.map(|selected_files| { if selected_files.len() == 0 { @@ -1111,10 +1111,10 @@ impl FileBrowser { match status { Ok(status) => - self.show_status(&format!("\"{}\" exited with {}", + self.core.show_status(&format!("\"{}\" exited with {}", shell, status)).log(), Err(err) => - self.show_status(&format!("Can't run this \"{}\": {}", + self.core.show_status(&format!("Can't run this \"{}\": {}", shell, err)).log() } diff --git a/src/hbox.rs b/src/hbox.rs index 4537961..d85bc51 100644 --- a/src/hbox.rs +++ b/src/hbox.rs @@ -72,7 +72,7 @@ impl HBox where T: Widget + PartialEq { } pub fn toggle_zoom(&mut self) -> HResult<()> { - self.clear().log(); + self.core.clear().log(); self.zoom_active = !self.zoom_active; self.resize_children() } diff --git a/src/listview.rs b/src/listview.rs index 6a1326c..62e6ace 100644 --- a/src/listview.rs +++ b/src/listview.rs @@ -29,7 +29,7 @@ impl Listable for ListView { } fn on_new(&mut self) -> HResult<()> { - let show_hidden = self.config().show_hidden(); + let show_hidden = self.core.config().show_hidden(); self.content.show_hidden = show_hidden; Ok(()) } @@ -226,7 +226,7 @@ impl ListView pub fn goto_grand_parent(&mut self) -> HResult<()> { match self.grand_parent() { Some(grand_parent) => self.goto_path(&grand_parent), - None => { self.show_status("Can't go further!") }, + None => { self.core.show_status("Can't go further!") }, } } @@ -245,7 +245,7 @@ impl ListView self.refresh() } Err(err) => { - self.show_status(&format!("Can't open this path: {}", err)) + self.core.show_status(&format!("Can't open this path: {}", err)) } } } @@ -266,7 +266,7 @@ impl ListView self.content.sort(); self.select_file(&file); self.refresh().log(); - self.show_status(&format!("Sorting by: {}", self.content.sort)).log(); + self.core.show_status(&format!("Sorting by: {}", self.content.sort)).log(); } fn reverse_sort(&mut self) { @@ -275,7 +275,8 @@ impl ListView self.content.sort(); self.select_file(&file); self.refresh().log(); - self.show_status(&format!("Reversed sorting by: {}", self.content.sort)).log(); + self.core.show_status(&format!("Reversed sorting by: {}", + self.content.sort)).log(); } fn select_next_mtime(&mut self) { @@ -346,8 +347,8 @@ impl ListView self.content.sort(); self.select_file(&file); self.refresh().log(); - self.show_status(&format!("Direcories first: {}", - self.content.dirs_first)).log(); + self.core.show_status(&format!("Direcories first: {}", + self.content.dirs_first)).log(); } fn multi_select_file(&mut self) { @@ -383,7 +384,7 @@ impl ListView let selected_file = self.clone_selected_file(); loop { - let input = self.minibuffer_continuous("search"); + let input = self.core.minibuffer_continuous("search"); match input { Ok(input) => { @@ -414,7 +415,7 @@ impl ListView fn search_next(&mut self) -> HResult<()> { if self.searching.is_none() { - self.show_status("No search pattern set!").log(); + self.core.show_status("No search pattern set!").log(); } let prev_search = self.searching.clone()?; let selection = self.get_selection(); @@ -435,14 +436,14 @@ impl ListView let file = file.clone(); self.select_file(&file); } else { - self.show_status("Reached last search result!").log(); + self.core.show_status("Reached last search result!").log(); } Ok(()) } fn search_prev(&mut self) -> HResult<()> { if self.searching.is_none() { - self.show_status("No search pattern set!").log(); + self.core.show_status("No search pattern set!").log(); } let prev_search = self.searching.clone()?; @@ -464,13 +465,13 @@ impl ListView }).cloned(); self.reverse_sort(); - self.clear_status().log(); + self.core.clear_status().log(); if let Some(file) = file { let file = file.clone(); self.select_file(&file); } else { - self.show_status("Reached last search result!").log(); + self.core.show_status("Reached last search result!").log(); } Ok(()) @@ -480,7 +481,7 @@ impl ListView let selected_file = self.selected_file().clone(); loop { - let filter = self.minibuffer_continuous("filter"); + let filter = self.core.minibuffer_continuous("filter"); match filter { Err(HError::MiniBufferInputUpdated(input)) => { @@ -502,7 +503,7 @@ impl ListView } let msgstr = filter.clone().unwrap_or(String::from("")); - self.show_status(&format!("Filtering with: \"{}\"", msgstr)).log(); + self.core.show_status(&format!("Filtering with: \"{}\"", msgstr)).log(); break; } @@ -511,7 +512,7 @@ impl ListView } fn render_line(&self, file: &File) -> String { - let icon = if self.config().icons { + let icon = if self.core.config().icons { file.icon() } else { "" }; diff --git a/src/mediaview.rs b/src/mediaview.rs index e868ee8..f502591 100644 --- a/src/mediaview.rs +++ b/src/mediaview.rs @@ -198,7 +198,7 @@ impl MediaView { let mute = self.mute(); let position = self.position.clone(); let duration = self.duration.clone(); - let clear = self.get_clearlist()?; + let clear = self.get_core()?.get_clearlist()?; std::thread::spawn(move || -> HResult<()> { // Sleep a bit to avoid overloading the system when scrolling @@ -460,6 +460,6 @@ impl Drop for MediaView { self.stale.set_stale().ok(); self.kill().log(); - self.clear().log(); + self.core.clear().log(); } } diff --git a/src/minibuffer.rs b/src/minibuffer.rs index a8fb410..f7e0229 100644 --- a/src/minibuffer.rs +++ b/src/minibuffer.rs @@ -167,7 +167,7 @@ impl MiniBuffer { self.clear(); } - self.screen()?.cursor_hide().log(); + self.core.screen()?.cursor_hide().log(); match self.popup() { Err(HError::MiniBufferCancelledInput) => self.input_cancelled()?, @@ -335,7 +335,7 @@ impl MiniBuffer { } pub fn input_cancelled(&self) -> HResult<()> { - self.show_status("Input cancelled").log(); + self.core.show_status("Input cancelled").log(); return HError::minibuffer_cancel() } @@ -344,7 +344,7 @@ impl MiniBuffer { } pub fn input_empty(&self) -> HResult<()> { - self.show_status("Empty!").log(); + self.core.show_status("Empty!").log(); return HError::minibuffer_empty() } } @@ -502,7 +502,7 @@ impl Widget for MiniBuffer { ": ".len() + self.position; - let mut screen = self.screen()?; + let mut screen = self.core.screen()?; let ysize = screen.ysize()?; screen.goto_xy(cursor_pos, ysize).log(); diff --git a/src/preview.rs b/src/preview.rs index a3c3a5f..1dbe511 100644 --- a/src/preview.rs +++ b/src/preview.rs @@ -166,14 +166,14 @@ impl Widget for AsyncWidget { } fn get_drawlist(&self) -> HResult { if self.widget().is_err() { - let clear = self.get_clearlist()?; + let clear = self.core.get_clearlist()?; let (xpos, ypos) = self.get_coordinates()?.u16position(); let pos = crate::term::goto_xy(xpos, ypos); return Ok(clear + &pos + "...") } if self.is_stale()? { - return self.get_clearlist() + return self.core.get_clearlist() } self.widget()?.get_drawlist() @@ -517,7 +517,7 @@ impl Widget for Previewer { } fn config_loaded(&mut self) -> HResult<()> { - let show_hidden = self.config().show_hidden(); + let show_hidden = self.core.config().show_hidden(); if let PreviewWidget::FileList(filelist) = self.widget.widget_mut()? { filelist.content.show_hidden = show_hidden; filelist.content.dirty_meta.set_dirty(); diff --git a/src/proclist.rs b/src/proclist.rs index 99a74dd..fca5029 100644 --- a/src/proclist.rs +++ b/src/proclist.rs @@ -212,7 +212,7 @@ impl ListView> { .to_string_lossy() .to_string(); - self.show_status(&format!("Running: {}", &short_cmd)).log(); + self.core.show_status(&format!("Running: {}", &short_cmd)).log(); let shell_args = cmd_args.concat(); let shell_args = vec![OsString::from("-c"), shell_args.clone()]; @@ -232,7 +232,7 @@ impl ListView> { .to_string()); let args = cmd.args.unwrap_or(vec![]); - self.show_status(&format!("Running: {}", &short_cmd)).log(); + self.core.show_status(&format!("Running: {}", &short_cmd)).log(); let handle = std::process::Command::new(real_cmd) .args(args) @@ -411,7 +411,7 @@ impl ProcView { pub fn remove_proc(&mut self) -> HResult<()> { if self.get_listview_mut().content.len() == 0 { return Ok(()) } self.get_listview_mut().remove_proc()?; - self.get_textview().clear().log(); + self.get_textview().get_core()?.clear().log(); self.get_textview().widget_mut()?.set_text("").log(); self.viewing = None; Ok(()) @@ -563,7 +563,7 @@ impl Widget for ProcView { match key { Key::Char('w') => { self.animator.set_stale().log(); - self.clear().log(); + self.get_core()?.clear().log(); return Err(HError::PopupFinnished) } Key::Char('d') => { self.remove_proc()? } Key::Char('K') => { self.get_listview_mut().kill_proc()? } diff --git a/src/tabview.rs b/src/tabview.rs index adf22e7..8b87552 100644 --- a/src/tabview.rs +++ b/src/tabview.rs @@ -36,7 +36,7 @@ pub trait Tabbable { pub struct TabView where T: Widget, TabView: Tabbable { pub widgets: Vec, pub active: usize, - core: WidgetCore + pub core: WidgetCore } impl TabView where T: Widget, TabView: Tabbable { diff --git a/src/textview.rs b/src/textview.rs index 889b8fa..0a67160 100644 --- a/src/textview.rs +++ b/src/textview.rs @@ -152,7 +152,7 @@ impl Widget for TextView { let (xsize, ysize) = self.get_coordinates()?.size().size(); let (xpos, ypos) = self.get_coordinates()?.position().position(); - let output = self.get_clearlist()? + + let output = self.core.get_clearlist()? + &self .lines .iter() diff --git a/src/widget.rs b/src/widget.rs index 1a91994..43c1fdf 100644 --- a/src/widget.rs +++ b/src/widget.rs @@ -102,6 +102,100 @@ impl WidgetCore { pub fn get_sender(&self) -> Sender { self.event_sender.lock().unwrap().clone() } + + pub fn draw_status(&self) -> HResult<()> { + let xsize = term::xsize_u(); + let status = match self.status_bar_content.lock()?.as_ref() { + Some(status) => status.to_string(), + None => "".to_string(), + }; + let sized_status = term::sized_string_u(&status, xsize); + + self.write_to_screen( + &format!( + "{}{}{}", + term::move_bottom(), + term::status_bg(), + sized_status + )).log(); + + Ok(()) + } + + pub fn show_status(&self, status: &str) -> HResult<()> { + HError::log::<()>(status.to_string()).log(); + { + let mut status_content = self.status_bar_content.lock()?; + *status_content = Some(status.to_string()); + } + self.draw_status()?; + Ok(()) + } + + pub fn clear_status(&self) -> HResult<()> { + if self.status_bar_content.lock()?.take().is_some() { + self.draw_status().log(); + } + Ok(()) + } + + pub fn minibuffer(&self, query: &str) -> HResult { + let answer = self.minibuffer + .lock()? + .as_mut()? + .query(query, false); + let mut screen = self.screen()?; + screen.cursor_hide().log(); + answer + } + + pub fn minibuffer_continuous(&self, query: &str) -> HResult { + let answer = self.minibuffer + .lock()? + .as_mut()? + .query(query, true); + let mut screen = self.screen()?; + screen.cursor_hide().log(); + answer + } + + pub fn screen(&self) -> HResult { + Ok(self.screen.clone()) + } + + pub fn clear(&self) -> HResult<()> { + let clearlist = self.get_clearlist()?; + self.write_to_screen(&clearlist) + } + + pub fn get_clearlist(&self) -> HResult { + let (xpos, ypos) = self.coordinates.u16position(); + let (xsize, ysize) = self.coordinates.u16size(); + let endpos = ypos + ysize; + + Ok((ypos..endpos) + .map(|line| { + format!( + "{}{}{:xsize$}", + crate::term::reset(), + crate::term::goto_xy(xpos, line), + " ", + xsize = xsize as usize + ) + }) + .collect()) + } + + pub fn write_to_screen(&self, s: &str) -> HResult<()> { + let mut screen = self.screen()?; + screen.write_str(s) + } + + pub fn config(&self) -> Config { + self.config.read().unwrap().get() + .map(|config| config.clone()) + .unwrap_or(Config::new()) + } } impl Dirtyable for WidgetCore { @@ -149,7 +243,7 @@ pub trait Widget { fn on_event(&mut self, event: Event) -> HResult<()> { - self.clear_status().log(); + self.get_core()?.clear_status().log(); match event { Event::Key(key) => self.on_key(key), Event::Mouse(button) => self.on_mouse(button), @@ -179,7 +273,8 @@ pub trait Widget { } fn bad(&mut self, event: Event) -> HResult<()> { - self.show_status(&format!("Stop it!! {:?} does nothing!", event)).log(); + self.get_core()?.show_status(&format!("Stop it!! {:?} does nothing!", + event)).log(); if let Event::Key(key) = event { HError::undefined_key(key) } else { Ok(()) } @@ -210,23 +305,7 @@ pub trait Widget { xsize = xsize as usize)) } - fn get_clearlist(&self) -> HResult { - let (xpos, ypos) = self.get_coordinates()?.u16position(); - let (xsize, ysize) = self.get_coordinates()?.u16size(); - let endpos = ypos + ysize; - Ok((ypos..endpos) - .map(|line| { - format!( - "{}{}{:xsize$}", - crate::term::reset(), - crate::term::goto_xy(xpos, line), - " ", - xsize = xsize as usize - ) - }) - .collect()) - } fn get_redraw_empty_list(&self, lines: usize) -> HResult { let (xpos, ypos) = self.get_coordinates()?.u16position(); @@ -247,7 +326,7 @@ pub trait Widget { fn popup(&mut self) -> HResult<()> { let result = self.run_widget(); - self.clear().log(); + self.get_core()?.clear().log(); self.get_core()?.get_sender().send(Events::ExclusiveEvent(None))?; result } @@ -263,7 +342,7 @@ pub trait Widget { .send(Events::ExclusiveEvent(Some(Mutex::new(Some(tx_event)))))?; self.get_core()?.get_sender().send(Events::RequestInput)?; - self.clear()?; + self.get_core()?.clear()?; self.refresh().log(); self.draw()?; @@ -286,10 +365,10 @@ pub trait Widget { self.draw().log(); } Events::Status(status) => { - self.show_status(&status).log(); + self.get_core()?.show_status(&status).log(); } Events::TerminalResized => { - self.screen()?.clear().log(); + self.get_core()?.screen()?.clear().log(); match self.resize() { err @ Err(HError::TerminalResizedError) => err?, _ => {} @@ -310,30 +389,16 @@ pub trait Widget { Ok(()) } - fn clear(&self) -> HResult<()> { - let clearlist = self.get_clearlist()?; - self.write_to_screen(&clearlist) - } - - fn config(&self) -> Config { - self.get_core() - .unwrap() - .config.read().unwrap().get() - .map(|config| config.clone()) - .unwrap_or(Config::new()) - } fn animate_slide_up(&mut self, animator: Option<&Stale>) -> HResult<()> { - if !self.config().animate() { return Ok(()); } - - self.config(); + if !self.get_core()?.config().animate() { return Ok(()); } let coords = self.get_coordinates()?.clone(); let xpos = coords.position().x(); let ypos = coords.position().y(); let xsize = coords.xsize(); let ysize = coords.ysize(); - let clear = self.get_clearlist()?; + let clear = self.get_core()?.get_clearlist()?; let pause = std::time::Duration::from_millis(5); if let Some(ref animator) = animator { @@ -342,7 +407,7 @@ pub trait Widget { } } - self.write_to_screen(&clear).log(); + self.get_core()?.write_to_screen(&clear).log(); for i in (0..10).rev() { if let Some(ref animator) = animator { @@ -360,7 +425,7 @@ pub trait Widget { let buffer = self.get_drawlist()?; if !animator.as_ref()?.is_stale()? { - self.write_to_screen(&buffer).log(); + self.get_core()?.write_to_screen(&buffer).log(); } std::thread::sleep(pause); @@ -374,8 +439,8 @@ pub trait Widget { self.get_drawlist().unwrap_or("".to_string()) + &self.get_header_drawlist().unwrap_or("".to_string()) + &self.get_footer_drawlist().unwrap_or("".to_string()); - self.write_to_screen(&output).log(); - self.screen()?.flush().ok(); + self.get_core()?.write_to_screen(&output).log(); + self.get_core()?.screen()?.flush().ok(); Ok(()) } @@ -383,7 +448,7 @@ pub trait Widget { let (tx_internal_event, rx_internal_event) = channel(); let rx_global_event = self.get_core()?.event_receiver.lock()?.take()?; - dispatch_events(tx_internal_event, rx_global_event, self.screen()?); + dispatch_events(tx_internal_event, rx_global_event, self.get_core()?.screen()?); for event in rx_internal_event.iter() { match event { @@ -395,10 +460,10 @@ pub trait Widget { self.get_core()?.get_sender().send(Events::RequestInput)?; } Events::Status(status) => { - self.show_status(&status).log(); + self.get_core()?.show_status(&status).log(); } Events::TerminalResized => { - self.screen()?.clear().log(); + self.get_core()?.screen()?.clear().log(); } Events::ConfigLoaded => { self.get_core_mut()?.config.write()?.pull_async()?; @@ -407,8 +472,8 @@ pub trait Widget { _ => {} } self.resize().log(); - if self.screen()?.is_resized()? { - self.screen()?.take_size().ok(); + if self.get_core()?.screen()?.is_resized()? { + self.get_core()?.screen()?.take_size().ok(); } self.refresh().ok(); self.draw().ok(); @@ -416,76 +481,9 @@ pub trait Widget { Ok(()) } - fn draw_status(&self) -> HResult<()> { - let xsize = term::xsize_u(); - let status = match self.get_core()?.status_bar_content.lock()?.as_ref() { - Some(status) => status.to_string(), - None => "".to_string(), - }; - let sized_status = term::sized_string_u(&status, xsize); - - self.write_to_screen( - &format!( - "{}{}{}", - term::move_bottom(), - term::status_bg(), - sized_status - )).log(); - - Ok(()) - } - - fn show_status(&self, status: &str) -> HResult<()> { - HError::log::<()>(status.to_string()).log(); - { - let mut status_content = self.get_core()?.status_bar_content.lock()?; - *status_content = Some(status.to_string()); - } - self.draw_status()?; - Ok(()) - } - - fn clear_status(&self) -> HResult<()> { - if self.get_core()?.status_bar_content.lock()?.take().is_some() { - self.draw_status().log(); - } - Ok(()) - } - - fn minibuffer(&self, query: &str) -> HResult { - let answer = self.get_core()? - .minibuffer - .lock()? - .as_mut()? - .query(query, false); - let mut screen = self.screen()?; - screen.cursor_hide().log(); - answer - } - - fn minibuffer_continuous(&self, query: &str) -> HResult { - let answer = self.get_core()? - .minibuffer - .lock()? - .as_mut()? - .query(query, true); - let mut screen = self.screen()?; - screen.cursor_hide().log(); - answer - } - - fn screen(&self) -> HResult { - Ok(self.get_core()?.screen.clone()) - } - - fn write_to_screen(&self, s: &str) -> HResult<()> { - let mut screen = self.screen()?; - screen.write_str(s) - } - fn resize(&mut self) -> HResult<()> { - if let Ok(true) = self.screen()?.is_resized() { - let (xsize, ysize) = self.screen()?.get_size()?; + if let Ok(true) = self.get_core()?.screen()?.is_resized() { + let (xsize, ysize) = self.get_core()?.screen()?.get_size()?; let mut coords = self.get_core()?.coordinates.clone(); coords.set_size_u(xsize, ysize-2); self.set_coordinates(&coords)?;