diff --git a/src/widgets/image_bg.rs b/src/widgets/image_bg.rs index bd235fc..ddc7eac 100644 --- a/src/widgets/image_bg.rs +++ b/src/widgets/image_bg.rs @@ -1,3 +1,5 @@ +// Renders image behind widget, and otherwise passes through all behavior + use cosmic::iced::{ self, advanced::{ @@ -34,86 +36,51 @@ impl<'a, Msg> Widget for ImageBg<'a, Msg> { fn children(&self) -> Vec; fn width(&self) -> Length; fn height(&self) -> Length; + fn layout( + &self, + tree: &mut Tree, + renderer: &cosmic::Renderer, + limits: &layout::Limits, + ) -> layout::Node; + fn operate( + &self, + tree: &mut Tree, + layout: Layout<'_>, + renderer: &cosmic::Renderer, + operation: &mut dyn Operation>, + ); + fn mouse_interaction( + &self, + tree: &Tree, + layout: Layout<'_>, + cursor: mouse::Cursor, + viewport: &Rectangle, + renderer: &cosmic::Renderer, + ) -> mouse::Interaction; } to self.content.as_widget_mut() { fn diff(&mut self, tree: &mut Tree); + fn on_event( + &mut self, + tree: &mut Tree, + event: Event, + layout: Layout<'_>, + cursor: mouse::Cursor, + renderer: &cosmic::Renderer, + clipboard: &mut dyn Clipboard, + shell: &mut Shell<'_, Msg>, + viewport: &Rectangle, + ) -> event::Status; + fn overlay<'b>( + &'b mut self, + tree: &'b mut Tree, + layout: Layout<'_>, + renderer: &cosmic::Renderer, + ) -> Option>; } } - fn layout( - &self, - tree: &mut Tree, - renderer: &cosmic::Renderer, - limits: &layout::Limits, - ) -> layout::Node { - let content = self.content.as_widget().layout(tree, renderer, limits); - //let size = limits.resolve(content.size()); - let size = content.size(); - layout::Node::with_children(size, vec![content]) - } - - fn operate( - &self, - tree: &mut Tree, - layout: Layout<'_>, - renderer: &cosmic::Renderer, - operation: &mut dyn Operation>, - ) { - operation.container( - None, // XXX id - layout.bounds(), - &mut |operation| { - self.content.as_widget().operate( - tree, - layout.children().next().unwrap(), - renderer, - operation, - ); - }, - ); - } - - fn on_event( - &mut self, - tree: &mut Tree, - event: Event, - layout: Layout<'_>, - cursor: mouse::Cursor, - renderer: &cosmic::Renderer, - clipboard: &mut dyn Clipboard, - shell: &mut Shell<'_, Msg>, - viewport: &Rectangle, - ) -> event::Status { - self.content.as_widget_mut().on_event( - tree, - event, - layout.children().next().unwrap(), - cursor, - renderer, - clipboard, - shell, - viewport, - ) - } - - fn mouse_interaction( - &self, - tree: &Tree, - layout: Layout<'_>, - cursor: mouse::Cursor, - viewport: &Rectangle, - renderer: &cosmic::Renderer, - ) -> mouse::Interaction { - self.content.as_widget().mouse_interaction( - tree, - layout.children().next().unwrap(), - cursor, - viewport, - renderer, - ) - } - fn draw( &self, state: &Tree, @@ -157,26 +124,8 @@ impl<'a, Msg> Widget for ImageBg<'a, Msg> { ); //}); - self.content.draw( - state, - renderer, - theme, - style, - layout.children().next().unwrap(), - cursor, - viewport, - ) - } - - fn overlay<'b>( - &'b mut self, - tree: &'b mut Tree, - layout: Layout<'_>, - renderer: &cosmic::Renderer, - ) -> Option> { self.content - .as_widget_mut() - .overlay(tree, layout.children().next().unwrap(), renderer) + .draw(state, renderer, theme, style, layout, cursor, viewport) } }