diff options
| author | 2023-11-29 22:28:31 +0100 | |
|---|---|---|
| committer | 2023-11-29 22:28:31 +0100 | |
| commit | e09b4e24dda51b8212d8ece52431dacaa3922a7b (patch) | |
| tree | 7005e181528134ebdde5bbbe5909273db9f30174 /widget/src/lazy | |
| parent | 83c7870c569a2976923ee6243a19813094d44673 (diff) | |
| parent | 7f8b17604a31e00becc43130ec516c1a53552c88 (diff) | |
| download | iced-e09b4e24dda51b8212d8ece52431dacaa3922a7b.tar.gz iced-e09b4e24dda51b8212d8ece52431dacaa3922a7b.tar.bz2 iced-e09b4e24dda51b8212d8ece52431dacaa3922a7b.zip | |
Merge branch 'master' into feat/multi-window-support
Diffstat (limited to '')
| -rw-r--r-- | widget/src/lazy.rs | 20 | ||||
| -rw-r--r-- | widget/src/lazy/component.rs | 28 | ||||
| -rw-r--r-- | widget/src/lazy/responsive.rs | 31 | 
3 files changed, 52 insertions, 27 deletions
| diff --git a/widget/src/lazy.rs b/widget/src/lazy.rs index da287f06..167a055d 100644 --- a/widget/src/lazy.rs +++ b/widget/src/lazy.rs @@ -18,7 +18,7 @@ use crate::core::widget::tree::{self, Tree};  use crate::core::widget::{self, Widget};  use crate::core::Element;  use crate::core::{ -    self, Clipboard, Hasher, Length, Point, Rectangle, Shell, Size, +    self, Clipboard, Hasher, Length, Point, Rectangle, Shell, Size, Vector,  };  use crate::runtime::overlay::Nested; @@ -135,7 +135,7 @@ where              (*self.element.borrow_mut()) = Some(current.element.clone());              self.with_element(|element| { -                tree.diff_children(std::slice::from_ref(&element.as_widget())) +                tree.diff_children(std::slice::from_ref(&element.as_widget()));              });          } else {              (*self.element.borrow_mut()) = Some(current.element.clone()); @@ -152,11 +152,14 @@ where      fn layout(          &self, +        tree: &mut Tree,          renderer: &Renderer,          limits: &layout::Limits,      ) -> layout::Node {          self.with_element(|element| { -            element.as_widget().layout(renderer, limits) +            element +                .as_widget() +                .layout(&mut tree.children[0], renderer, limits)          })      } @@ -186,6 +189,7 @@ where          renderer: &Renderer,          clipboard: &mut dyn Clipboard,          shell: &mut Shell<'_, Message>, +        viewport: &Rectangle,      ) -> event::Status {          self.with_element_mut(|element| {              element.as_widget_mut().on_event( @@ -196,6 +200,7 @@ where                  renderer,                  clipboard,                  shell, +                viewport,              )          })      } @@ -238,8 +243,8 @@ where                  layout,                  cursor,                  viewport, -            ) -        }) +            ); +        });      }      fn overlay<'b>( @@ -324,13 +329,14 @@ where      Renderer: core::Renderer,  {      fn layout( -        &self, +        &mut self,          renderer: &Renderer,          bounds: Size,          position: Point, +        translation: Vector,      ) -> layout::Node {          self.with_overlay_maybe(|overlay| { -            overlay.layout(renderer, bounds, position) +            overlay.layout(renderer, bounds, position, translation)          })          .unwrap_or_default()      } diff --git a/widget/src/lazy/component.rs b/widget/src/lazy/component.rs index c7814966..ad0c3823 100644 --- a/widget/src/lazy/component.rs +++ b/widget/src/lazy/component.rs @@ -7,7 +7,8 @@ use crate::core::renderer;  use crate::core::widget;  use crate::core::widget::tree::{self, Tree};  use crate::core::{ -    self, Clipboard, Element, Length, Point, Rectangle, Shell, Size, Widget, +    self, Clipboard, Element, Length, Point, Rectangle, Shell, Size, Vector, +    Widget,  };  use crate::runtime::overlay::Nested; @@ -253,11 +254,18 @@ where      fn layout(          &self, +        tree: &mut Tree,          renderer: &Renderer,          limits: &layout::Limits,      ) -> layout::Node { +        let t = tree.state.downcast_mut::<Rc<RefCell<Option<Tree>>>>(); +          self.with_element(|element| { -            element.as_widget().layout(renderer, limits) +            element.as_widget().layout( +                &mut t.borrow_mut().as_mut().unwrap().children[0], +                renderer, +                limits, +            )          })      } @@ -270,6 +278,7 @@ where          renderer: &Renderer,          clipboard: &mut dyn Clipboard,          shell: &mut Shell<'_, Message>, +        viewport: &Rectangle,      ) -> event::Status {          let mut local_messages = Vec::new();          let mut local_shell = Shell::new(&mut local_messages); @@ -284,6 +293,7 @@ where                  renderer,                  clipboard,                  &mut local_shell, +                viewport,              )          }); @@ -338,11 +348,12 @@ where              fn container(                  &mut self,                  id: Option<&widget::Id>, +                bounds: Rectangle,                  operate_on_children: &mut dyn FnMut(                      &mut dyn widget::Operation<T>,                  ),              ) { -                self.operation.container(id, &mut |operation| { +                self.operation.container(id, bounds, &mut |operation| {                      operate_on_children(&mut MapOperation { operation });                  });              } @@ -367,8 +378,10 @@ where                  &mut self,                  state: &mut dyn widget::operation::Scrollable,                  id: Option<&widget::Id>, +                bounds: Rectangle, +                translation: Vector,              ) { -                self.operation.scrollable(state, id); +                self.operation.scrollable(state, id, bounds, translation);              }              fn custom( @@ -498,7 +511,7 @@ impl<'a, 'b, Message, Renderer, Event, S> Drop      for Overlay<'a, 'b, Message, Renderer, Event, S>  {      fn drop(&mut self) { -        if let Some(heads) = self.0.take().map(|inner| inner.into_heads()) { +        if let Some(heads) = self.0.take().map(Inner::into_heads) {              *heads.instance.tree.borrow_mut().borrow_mut() = Some(heads.tree);          }      } @@ -560,13 +573,14 @@ where      S: 'static + Default,  {      fn layout( -        &self, +        &mut self,          renderer: &Renderer,          bounds: Size,          position: Point, +        translation: Vector,      ) -> layout::Node {          self.with_overlay_maybe(|overlay| { -            overlay.layout(renderer, bounds, position) +            overlay.layout(renderer, bounds, position, translation)          })          .unwrap_or_default()      } diff --git a/widget/src/lazy/responsive.rs b/widget/src/lazy/responsive.rs index 07300857..86d37b6c 100644 --- a/widget/src/lazy/responsive.rs +++ b/widget/src/lazy/responsive.rs @@ -6,7 +6,8 @@ use crate::core::renderer;  use crate::core::widget;  use crate::core::widget::tree::{self, Tree};  use crate::core::{ -    self, Clipboard, Element, Length, Point, Rectangle, Shell, Size, Widget, +    self, Clipboard, Element, Length, Point, Rectangle, Shell, Size, Vector, +    Widget,  };  use crate::horizontal_space;  use crate::runtime::overlay::Nested; @@ -60,13 +61,13 @@ impl<'a, Message, Renderer> Content<'a, Message, Renderer>  where      Renderer: core::Renderer,  { -    fn layout(&mut self, renderer: &Renderer) { +    fn layout(&mut self, tree: &mut Tree, renderer: &Renderer) {          if self.layout.is_none() { -            self.layout = -                Some(self.element.as_widget().layout( -                    renderer, -                    &layout::Limits::new(Size::ZERO, self.size), -                )); +            self.layout = Some(self.element.as_widget().layout( +                tree, +                renderer, +                &layout::Limits::new(Size::ZERO, self.size), +            ));          }      } @@ -104,7 +105,7 @@ where          R: Deref<Target = Renderer>,      {          self.update(tree, layout.bounds().size(), view); -        self.layout(renderer.deref()); +        self.layout(tree, renderer.deref());          let content_layout = Layout::with_offset(              layout.position() - Point::ORIGIN, @@ -144,6 +145,7 @@ where      fn layout(          &self, +        _tree: &mut Tree,          _renderer: &Renderer,          limits: &layout::Limits,      ) -> layout::Node { @@ -182,6 +184,7 @@ where          renderer: &Renderer,          clipboard: &mut dyn Clipboard,          shell: &mut Shell<'_, Message>, +        viewport: &Rectangle,      ) -> event::Status {          let state = tree.state.downcast_mut::<State>();          let mut content = self.content.borrow_mut(); @@ -203,6 +206,7 @@ where                      renderer,                      clipboard,                      &mut local_shell, +                    viewport,                  )              },          ); @@ -237,9 +241,9 @@ where              |tree, renderer, layout, element| {                  element.as_widget().draw(                      tree, renderer, theme, style, layout, cursor, viewport, -                ) +                );              }, -        ) +        );      }      fn mouse_interaction( @@ -283,7 +287,7 @@ where              overlay_builder: |content: &mut RefMut<'_, Content<'_, _, _>>,                                tree| {                  content.update(tree, layout.bounds().size(), &self.view); -                content.layout(renderer); +                content.layout(tree, renderer);                  let Content {                      element, @@ -360,13 +364,14 @@ where      Renderer: core::Renderer,  {      fn layout( -        &self, +        &mut self,          renderer: &Renderer,          bounds: Size,          position: Point, +        translation: Vector,      ) -> layout::Node {          self.with_overlay_maybe(|overlay| { -            overlay.layout(renderer, bounds, position) +            overlay.layout(renderer, bounds, position, translation)          })          .unwrap_or_default()      } | 
