Checkpoint

Antonio Scandurra created

Change summary

crates/gpui3_macros/src/derive_element.rs | 25 ++++++++++++++++---------
crates/ui2/src/theme.rs                   | 23 +++++++++++++++++------
2 files changed, 33 insertions(+), 15 deletions(-)

Detailed changes

crates/gpui3_macros/src/derive_element.rs 🔗

@@ -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)
             }
         }
     };

crates/ui2/src/theme.rs 🔗

@@ -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);
         });
     }
 }