Remove internal State from responsive
This commit is contained in:
parent
497ebcd0c3
commit
6f72ac4650
1 changed files with 11 additions and 27 deletions
|
|
@ -46,23 +46,18 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct State {
|
|
||||||
tree: Tree,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer>
|
impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer>
|
||||||
for Responsive<'_, Message, Theme, Renderer>
|
for Responsive<'_, Message, Theme, Renderer>
|
||||||
where
|
where
|
||||||
Renderer: core::Renderer,
|
Renderer: core::Renderer,
|
||||||
{
|
{
|
||||||
fn tag(&self) -> tree::Tag {
|
fn tag(&self) -> tree::Tag {
|
||||||
tree::Tag::of::<State>()
|
struct Marker;
|
||||||
|
tree::Tag::of::<Marker>()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn state(&self) -> tree::State {
|
fn diff(&mut self, _tree: &mut Tree) {
|
||||||
tree::State::new(State {
|
// Diff is deferred to layout
|
||||||
tree: Tree::empty(),
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn size(&self) -> Size<Length> {
|
fn size(&self) -> Size<Length> {
|
||||||
|
|
@ -78,14 +73,13 @@ where
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
limits: &layout::Limits,
|
limits: &layout::Limits,
|
||||||
) -> layout::Node {
|
) -> layout::Node {
|
||||||
let state = tree.state.downcast_mut::<State>();
|
|
||||||
let size = limits.max();
|
let size = limits.max();
|
||||||
|
|
||||||
self.content = (self.view)(size);
|
self.content = (self.view)(size);
|
||||||
state.tree.diff(&mut self.content);
|
tree.diff_children(std::slice::from_mut(&mut self.content));
|
||||||
|
|
||||||
self.content.as_widget_mut().layout(
|
self.content.as_widget_mut().layout(
|
||||||
&mut state.tree,
|
&mut tree.children[0],
|
||||||
renderer,
|
renderer,
|
||||||
&limits.loose(),
|
&limits.loose(),
|
||||||
)
|
)
|
||||||
|
|
@ -102,10 +96,8 @@ where
|
||||||
shell: &mut Shell<'_, Message>,
|
shell: &mut Shell<'_, Message>,
|
||||||
viewport: &Rectangle,
|
viewport: &Rectangle,
|
||||||
) {
|
) {
|
||||||
let state = tree.state.downcast_mut::<State>();
|
|
||||||
|
|
||||||
self.content.as_widget_mut().update(
|
self.content.as_widget_mut().update(
|
||||||
&mut state.tree,
|
&mut tree.children[0],
|
||||||
event,
|
event,
|
||||||
layout,
|
layout,
|
||||||
cursor,
|
cursor,
|
||||||
|
|
@ -126,10 +118,8 @@ where
|
||||||
cursor: mouse::Cursor,
|
cursor: mouse::Cursor,
|
||||||
viewport: &Rectangle,
|
viewport: &Rectangle,
|
||||||
) {
|
) {
|
||||||
let state = tree.state.downcast_ref::<State>();
|
|
||||||
|
|
||||||
self.content.as_widget().draw(
|
self.content.as_widget().draw(
|
||||||
&state.tree,
|
&tree.children[0],
|
||||||
renderer,
|
renderer,
|
||||||
theme,
|
theme,
|
||||||
style,
|
style,
|
||||||
|
|
@ -147,10 +137,8 @@ where
|
||||||
viewport: &Rectangle,
|
viewport: &Rectangle,
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
) -> mouse::Interaction {
|
) -> mouse::Interaction {
|
||||||
let state = tree.state.downcast_ref::<State>();
|
|
||||||
|
|
||||||
self.content.as_widget().mouse_interaction(
|
self.content.as_widget().mouse_interaction(
|
||||||
&state.tree,
|
&tree.children[0],
|
||||||
layout,
|
layout,
|
||||||
cursor,
|
cursor,
|
||||||
viewport,
|
viewport,
|
||||||
|
|
@ -165,10 +153,8 @@ where
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
operation: &mut dyn widget::Operation,
|
operation: &mut dyn widget::Operation,
|
||||||
) {
|
) {
|
||||||
let state = tree.state.downcast_mut::<State>();
|
|
||||||
|
|
||||||
self.content.as_widget_mut().operate(
|
self.content.as_widget_mut().operate(
|
||||||
&mut state.tree,
|
&mut tree.children[0],
|
||||||
layout,
|
layout,
|
||||||
renderer,
|
renderer,
|
||||||
operation,
|
operation,
|
||||||
|
|
@ -183,10 +169,8 @@ where
|
||||||
viewport: &Rectangle,
|
viewport: &Rectangle,
|
||||||
translation: Vector,
|
translation: Vector,
|
||||||
) -> Option<overlay::Element<'a, Message, Theme, Renderer>> {
|
) -> Option<overlay::Element<'a, Message, Theme, Renderer>> {
|
||||||
let state = tree.state.downcast_mut::<State>();
|
|
||||||
|
|
||||||
self.content.as_widget_mut().overlay(
|
self.content.as_widget_mut().overlay(
|
||||||
&mut state.tree,
|
&mut tree.children[0],
|
||||||
layout,
|
layout,
|
||||||
renderer,
|
renderer,
|
||||||
viewport,
|
viewport,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue