diff --git a/src/main.rs b/src/main.rs index ad633ad..3c75676 100644 --- a/src/main.rs +++ b/src/main.rs @@ -31,20 +31,13 @@ impl State { RgbaImage::new(100, 100) }; - let allocate_image = widget::image::allocate(widget::image::Handle::from_rgba( - image.width(), - image.height(), - unsafe { std::mem::transmute::<_, &'static [u8]>(image.as_bytes()) }, - )) - .map(Message::ImageDisplayReady); + let state = State { + image_display: None, + image, + }; + let allocate_image = state.allocate_image(); - ( - State { - image_display: None, - image, - }, - allocate_image, - ) + (state, allocate_image) } fn view(&self) -> Element<'_, Message, Theme, Renderer> { if let Some(allocation) = self.image_display.as_ref() { @@ -77,12 +70,7 @@ impl State { Key::Character("r") => { self.image = imageops::rotate90(&self.image); - return widget::image::allocate(widget::image::Handle::from_rgba( - self.image.width(), - self.image.height(), - unsafe { std::mem::transmute::<_, &'static [u8]>(self.image.as_bytes()) }, - )) - .map(Message::ImageDisplayReady); + return self.allocate_image(); } // ignore unused keys @@ -96,6 +84,15 @@ impl State { Task::none() } + fn allocate_image(&self) -> Task { + widget::image::allocate(widget::image::Handle::from_rgba( + self.image.width(), + self.image.height(), + unsafe { std::mem::transmute::<_, &'static [u8]>(self.image.as_bytes()) }, + )) + .map(Message::ImageDisplayReady) + } + fn subscription(&self) -> Subscription { event::listen().map(Message::Event) }