diff --git a/src/main.rs b/src/main.rs index a691062..62f5087 100644 --- a/src/main.rs +++ b/src/main.rs @@ -79,9 +79,13 @@ impl State { } } - Key::Character("o") => { - return self.pick_and_load_image(); - } + Key::Character("o") => match self.pick_and_load_image() { + Ok(task) => { + self.error = None; + return task; + } + Err(e) => self.error = Some(e), + }, Key::Character("r") => { match self.image.as_ref() { @@ -115,9 +119,13 @@ impl State { }, Message::Event(iced::Event::Window(window_event)) => match window_event { - window::Event::FileDropped(file) => { - return self.load_image(file); - } + window::Event::FileDropped(file) => match self.load_image(file) { + Ok(task) => { + self.error = None; + return task; + } + Err(e) => self.error = Some(e), + }, // ignore unused window events _ => {} @@ -130,28 +138,14 @@ impl State { Task::none() } - #[must_use] - fn load_image(&mut self, path: impl AsRef) -> Task { - let task; - (self.error, task) = match utils::load_image(path) { - Ok(image) => { - self.image = Some(image); - (None, self.allocate_image()) - } - Err(e) => (Some(e), Task::none()), - }; - - task + fn load_image(&mut self, path: impl AsRef) -> Result, String> { + utils::load_image(path).and_then(|image| { + self.image = Some(image); + Ok(self.allocate_image()) + }) } - #[must_use] - fn pick_and_load_image(&mut self) -> Task { - let task; - (self.error, task) = match utils::pick_image() { - Ok(path) => (None, self.load_image(path)), - Err(e) => (Some(e), Task::none()), - }; - - task + fn pick_and_load_image(&mut self) -> Result, String> { + utils::pick_image().and_then(|path| self.load_image(path)) } fn save_image(&mut self) { @@ -176,11 +170,18 @@ impl State { fn subscription(&self) -> Subscription { event::listen().map(Message::Event) } + fn title(&self) -> String { + match self.image.as_ref() { + Some(image) => format!("imagey {}x{}", image.width(), image.height()), + None => format!("imagey"), + } + } } fn main() -> Result<(), iced::Error> { iced::application(State::new, State::update, State::view) .subscription(State::subscription) + .title(State::title) .theme(Theme::custom( "custom", theme::Palette {