Merge branch 'master' into advanced-text
This commit is contained in:
commit
8e8808f0e1
12 changed files with 173 additions and 70 deletions
|
|
@ -42,7 +42,7 @@ where
|
|||
view: Box::new(view),
|
||||
content: RefCell::new(Content {
|
||||
size: Size::ZERO,
|
||||
layout: layout::Node::new(Size::ZERO),
|
||||
layout: None,
|
||||
element: Element::new(horizontal_space(0)),
|
||||
}),
|
||||
}
|
||||
|
|
@ -51,7 +51,7 @@ where
|
|||
|
||||
struct Content<'a, Message, Renderer> {
|
||||
size: Size,
|
||||
layout: layout::Node,
|
||||
layout: Option<layout::Node>,
|
||||
element: Element<'a, Message, Renderer>,
|
||||
}
|
||||
|
||||
|
|
@ -59,10 +59,19 @@ impl<'a, Message, Renderer> Content<'a, Message, Renderer>
|
|||
where
|
||||
Renderer: core::Renderer,
|
||||
{
|
||||
fn layout(&mut self, renderer: &Renderer) {
|
||||
if self.layout.is_none() {
|
||||
self.layout =
|
||||
Some(self.element.as_widget().layout(
|
||||
renderer,
|
||||
&layout::Limits::new(Size::ZERO, self.size),
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
fn update(
|
||||
&mut self,
|
||||
tree: &mut Tree,
|
||||
renderer: &Renderer,
|
||||
new_size: Size,
|
||||
view: &dyn Fn(Size) -> Element<'a, Message, Renderer>,
|
||||
) {
|
||||
|
|
@ -74,11 +83,6 @@ where
|
|||
self.size = new_size;
|
||||
|
||||
tree.diff(&self.element);
|
||||
|
||||
self.layout = self
|
||||
.element
|
||||
.as_widget()
|
||||
.layout(renderer, &layout::Limits::new(Size::ZERO, self.size));
|
||||
}
|
||||
|
||||
fn resolve<R, T>(
|
||||
|
|
@ -97,11 +101,12 @@ where
|
|||
where
|
||||
R: Deref<Target = Renderer>,
|
||||
{
|
||||
self.update(tree, renderer.deref(), layout.bounds().size(), view);
|
||||
self.update(tree, layout.bounds().size(), view);
|
||||
self.layout(renderer.deref());
|
||||
|
||||
let content_layout = Layout::with_offset(
|
||||
layout.position() - Point::ORIGIN,
|
||||
&self.layout,
|
||||
self.layout.as_ref().unwrap(),
|
||||
);
|
||||
|
||||
f(tree, renderer, content_layout, &mut self.element)
|
||||
|
|
@ -179,7 +184,10 @@ where
|
|||
let state = tree.state.downcast_mut::<State>();
|
||||
let mut content = self.content.borrow_mut();
|
||||
|
||||
content.resolve(
|
||||
let mut local_messages = vec![];
|
||||
let mut local_shell = Shell::new(&mut local_messages);
|
||||
|
||||
let status = content.resolve(
|
||||
&mut state.tree.borrow_mut(),
|
||||
renderer,
|
||||
layout,
|
||||
|
|
@ -192,10 +200,18 @@ where
|
|||
cursor_position,
|
||||
renderer,
|
||||
clipboard,
|
||||
shell,
|
||||
&mut local_shell,
|
||||
)
|
||||
},
|
||||
)
|
||||
);
|
||||
|
||||
if local_shell.is_layout_invalid() {
|
||||
content.layout = None;
|
||||
}
|
||||
|
||||
shell.merge(local_shell, std::convert::identity);
|
||||
|
||||
status
|
||||
}
|
||||
|
||||
fn draw(
|
||||
|
|
@ -274,22 +290,18 @@ where
|
|||
types: PhantomData,
|
||||
overlay_builder: |content: &mut RefMut<'_, Content<'_, _, _>>,
|
||||
tree| {
|
||||
content.update(
|
||||
tree,
|
||||
renderer,
|
||||
layout.bounds().size(),
|
||||
&self.view,
|
||||
);
|
||||
content.update(tree, layout.bounds().size(), &self.view);
|
||||
content.layout(renderer);
|
||||
|
||||
let Content {
|
||||
element,
|
||||
layout: content_layout,
|
||||
layout: content_layout_node,
|
||||
..
|
||||
} = content.deref_mut();
|
||||
|
||||
let content_layout = Layout::with_offset(
|
||||
layout.bounds().position() - Point::ORIGIN,
|
||||
content_layout,
|
||||
content_layout_node.as_ref().unwrap(),
|
||||
);
|
||||
|
||||
element
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue