Fix responsive, component, and lazy always returning an overlay
This commit is contained in:
parent
fca5d8038a
commit
d057b16153
3 changed files with 78 additions and 59 deletions
|
|
@ -270,8 +270,7 @@ where
|
||||||
renderer: &Renderer,
|
renderer: &Renderer,
|
||||||
translation: Vector,
|
translation: Vector,
|
||||||
) -> Option<overlay::Element<'_, Message, Theme, Renderer>> {
|
) -> Option<overlay::Element<'_, Message, Theme, Renderer>> {
|
||||||
let overlay = Overlay(Some(
|
let overlay = InnerBuilder {
|
||||||
InnerBuilder {
|
|
||||||
cell: self.element.borrow().as_ref().unwrap().clone(),
|
cell: self.element.borrow().as_ref().unwrap().clone(),
|
||||||
element: self
|
element: self
|
||||||
.element
|
.element
|
||||||
|
|
@ -289,10 +288,22 @@ where
|
||||||
.map(|overlay| RefCell::new(Nested::new(overlay)))
|
.map(|overlay| RefCell::new(Nested::new(overlay)))
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
.build(),
|
.build();
|
||||||
));
|
|
||||||
|
|
||||||
Some(overlay::Element::new(Box::new(overlay)))
|
#[allow(clippy::redundant_closure_for_method_calls)]
|
||||||
|
if overlay.with_overlay(|overlay| overlay.is_some()) {
|
||||||
|
Some(overlay::Element::new(Box::new(Overlay(Some(overlay)))))
|
||||||
|
} else {
|
||||||
|
let heads = overlay.into_heads();
|
||||||
|
|
||||||
|
// - You may not like it, but this is what peak performance looks like
|
||||||
|
// - TODO: Get rid of ouroboros, for good
|
||||||
|
// - What?!
|
||||||
|
*self.element.borrow().as_ref().unwrap().borrow_mut() =
|
||||||
|
Some(heads.element);
|
||||||
|
|
||||||
|
None
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -446,15 +446,10 @@ where
|
||||||
) -> Option<overlay::Element<'b, Message, Theme, Renderer>> {
|
) -> Option<overlay::Element<'b, Message, Theme, Renderer>> {
|
||||||
self.rebuild_element_if_necessary();
|
self.rebuild_element_if_necessary();
|
||||||
|
|
||||||
let tree = tree
|
let state = tree.state.downcast_mut::<Rc<RefCell<Option<Tree>>>>();
|
||||||
.state
|
let tree = state.borrow_mut().take().unwrap();
|
||||||
.downcast_mut::<Rc<RefCell<Option<Tree>>>>()
|
|
||||||
.borrow_mut()
|
|
||||||
.take()
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
let overlay = Overlay(Some(
|
let overlay = InnerBuilder {
|
||||||
InnerBuilder {
|
|
||||||
instance: self,
|
instance: self,
|
||||||
tree,
|
tree,
|
||||||
types: PhantomData,
|
types: PhantomData,
|
||||||
|
|
@ -471,19 +466,28 @@ where
|
||||||
renderer,
|
renderer,
|
||||||
translation,
|
translation,
|
||||||
)
|
)
|
||||||
.map(|overlay| {
|
.map(|overlay| RefCell::new(Nested::new(overlay)))
|
||||||
RefCell::new(Nested::new(overlay))
|
|
||||||
})
|
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
.build(),
|
.build();
|
||||||
));
|
|
||||||
|
|
||||||
|
#[allow(clippy::redundant_closure_for_method_calls)]
|
||||||
|
if overlay.with_overlay(|overlay| overlay.is_some()) {
|
||||||
Some(overlay::Element::new(Box::new(OverlayInstance {
|
Some(overlay::Element::new(Box::new(OverlayInstance {
|
||||||
overlay: Some(overlay),
|
overlay: Some(Overlay(Some(overlay))), // Beautiful, I know
|
||||||
})))
|
})))
|
||||||
|
} else {
|
||||||
|
let heads = overlay.into_heads();
|
||||||
|
|
||||||
|
// - You may not like it, but this is what peak performance looks like
|
||||||
|
// - TODO: Get rid of ouroboros, for good
|
||||||
|
// - What?!
|
||||||
|
*state.borrow_mut() = Some(heads.tree);
|
||||||
|
|
||||||
|
None
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -320,7 +320,11 @@ where
|
||||||
}
|
}
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
if overlay.with_overlay(|(overlay, _layout)| overlay.is_some()) {
|
||||||
Some(overlay::Element::new(Box::new(overlay)))
|
Some(overlay::Element::new(Box::new(overlay)))
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue