use cosmic::iced::{ advanced::{ layout, mouse, overlay, renderer, widget::{tree, Id, Operation, OperationOutputWrapper, Tree}, Clipboard, Layout, Shell, Widget, }, event::{self, Event}, Length, Rectangle, }; use std::marker::PhantomData; mod image_bg; pub use image_bg::image_bg; mod workspace_bar; pub use workspace_bar::workspace_bar; mod workspace_item; pub use workspace_item::workspace_item; mod mouse_interaction_wrapper; pub use mouse_interaction_wrapper::mouse_interaction_wrapper; mod toplevels; pub use toplevels::toplevels; trait Foo {} pub fn layout_wrapper<'a, Msg, T: Into>>( inner: T, ) -> LayoutWrapper<'a, Msg> { LayoutWrapper { content: inner.into(), _msg: PhantomData, } } pub struct LayoutWrapper<'a, Msg> { content: cosmic::Element<'a, Msg>, _msg: PhantomData, } impl<'a, Msg> Widget for LayoutWrapper<'a, Msg> { fn layout( &self, tree: &mut Tree, renderer: &cosmic::Renderer, limits: &layout::Limits, ) -> layout::Node { dbg!(limits); dbg!(self.content.as_widget().layout(tree, renderer, limits)) } delegate::delegate! { to self.content.as_widget() { fn tag(&self) -> tree::Tag; fn state(&self) -> tree::State; fn children(&self) -> Vec; fn width(&self) -> Length; fn height(&self) -> Length; fn operate( &self, tree: &mut Tree, layout: Layout<'_>, renderer: &cosmic::Renderer, operation: &mut dyn Operation>, ); fn draw( &self, state: &Tree, renderer: &mut cosmic::Renderer, theme: &cosmic::Theme, style: &renderer::Style, layout: Layout<'_>, cursor: mouse::Cursor, viewport: &Rectangle, ); fn mouse_interaction( &self, _tree: &Tree, _layout: Layout<'_>, _cursor: mouse::Cursor, _viewport: &Rectangle, _renderer: &cosmic::Renderer, ) -> mouse::Interaction; fn id(&self) -> Option; } 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 set_id(&mut self, id: Id); } } } impl<'a, Msg: 'a> From> for cosmic::Element<'a, Msg> { fn from(widget: LayoutWrapper<'a, Msg>) -> Self { cosmic::Element::new(widget) } }