@@ -57,27 +57,34 @@ pub fn derive_element(input: TokenStream) -> TokenStream {
None
}
- fn layout(
+ fn initialize(
&mut self,
view_state: &mut Self::ViewState,
- element_state: Option<Self::ElementState>,
- cx: &mut gpui3::ViewContext<Self::ViewState>,
- ) -> (gpui3::LayoutId, Self::ElementState) {
+ _: Option<Self::ElementState>,
+ cx: &mut gpui3::ViewContext<Self::ViewState>
+ ) -> Self::ElementState {
use gpui3::IntoAnyElement;
- let mut rendered_element = self.render(view_state, cx).into_any();
- let layout_id = rendered_element.layout(view_state, cx);
- (layout_id, rendered_element)
+ self.render(view_state, cx).into_any()
+ }
+
+ fn layout(
+ &mut self,
+ view_state: &mut Self::ViewState,
+ rendered_element: &mut Self::ElementState,
+ cx: &mut gpui3::ViewContext<Self::ViewState>,
+ ) -> gpui3::LayoutId {
+ rendered_element.layout(view_state, cx)
}
fn paint(
&mut self,
bounds: gpui3::Bounds<gpui3::Pixels>,
view_state: &mut Self::ViewState,
- element_state: &mut Self::ElementState,
+ rendered_element: &mut Self::ElementState,
cx: &mut gpui3::ViewContext<Self::ViewState>,
) {
- element_state.paint(view_state, None, cx)
+ rendered_element.paint(view_state, None, cx)
}
}
};
@@ -164,31 +164,42 @@ impl<E: Element> Element for Themed<E> {
None
}
- fn layout(
+ fn initialize(
&mut self,
- state: &mut E::ViewState,
+ view_state: &mut Self::ViewState,
element_state: Option<Self::ElementState>,
+ cx: &mut ViewContext<Self::ViewState>,
+ ) -> Self::ElementState {
+ cx.with_global(self.theme.clone(), |cx| {
+ self.child.initialize(view_state, element_state, cx)
+ })
+ }
+
+ fn layout(
+ &mut self,
+ view_state: &mut E::ViewState,
+ element_state: &mut Self::ElementState,
cx: &mut ViewContext<E::ViewState>,
- ) -> (LayoutId, Self::ElementState)
+ ) -> LayoutId
where
Self: Sized,
{
cx.with_global(self.theme.clone(), |cx| {
- self.child.layout(state, element_state, cx)
+ self.child.layout(view_state, element_state, cx)
})
}
fn paint(
&mut self,
bounds: Bounds<Pixels>,
- state: &mut Self::ViewState,
+ view_state: &mut Self::ViewState,
frame_state: &mut Self::ElementState,
cx: &mut ViewContext<Self::ViewState>,
) where
Self: Sized,
{
cx.with_global(self.theme.clone(), |cx| {
- self.child.paint(bounds, state, frame_state, cx);
+ self.child.paint(bounds, view_state, frame_state, cx);
});
}
}