Checkpoint

Antonio Scandurra created

Change summary

crates/gpui3/src/app.rs    | 36 +++++++++++++++++++-----------------
crates/gpui3/src/scene.rs  |  3 ++-
crates/gpui3/src/window.rs |  3 +++
3 files changed, 24 insertions(+), 18 deletions(-)

Detailed changes

crates/gpui3/src/app.rs 🔗

@@ -97,7 +97,7 @@ impl AppContext {
         let this = self.this.upgrade().unwrap();
         self.platform.read(move |platform| {
             let cx = &mut *this.lock();
-            f(platform, cx)
+            cx.update(|cx| f(platform, cx))
         })
     }
 
@@ -122,22 +122,24 @@ impl AppContext {
         id: WindowId,
         update: impl FnOnce(&mut WindowContext) -> R,
     ) -> Result<R> {
-        let mut window = self
-            .windows
-            .get_mut(id)
-            .ok_or_else(|| anyhow!("window not found"))?
-            .take()
-            .unwrap();
-
-        let result = update(&mut WindowContext::mutable(self, &mut window));
-        window.dirty = true;
-
-        self.windows
-            .get_mut(id)
-            .ok_or_else(|| anyhow!("window not found"))?
-            .replace(window);
-
-        Ok(result)
+        self.update(|cx| {
+            let mut window = cx
+                .windows
+                .get_mut(id)
+                .ok_or_else(|| anyhow!("window not found"))?
+                .take()
+                .unwrap();
+
+            let result = update(&mut WindowContext::mutable(cx, &mut window));
+            window.dirty = true;
+
+            cx.windows
+                .get_mut(id)
+                .ok_or_else(|| anyhow!("window not found"))?
+                .replace(window);
+
+            Ok(result)
+        })
     }
 
     fn update<R>(&mut self, update: impl FnOnce(&mut Self) -> R) -> R {

crates/gpui3/src/scene.rs 🔗

@@ -8,12 +8,13 @@ use collections::BTreeMap;
 // Exported to metal
 pub type PointF = Point<f32>;
 
+#[derive(Debug)]
 pub struct Scene {
     layers: BTreeMap<u32, SceneLayer>,
     pub(crate) scale_factor: f32,
 }
 
-#[derive(Default)]
+#[derive(Default, Debug)]
 pub struct SceneLayer {
     pub quads: Vec<Quad>,
 }

crates/gpui3/src/window.rs 🔗

@@ -39,7 +39,9 @@ impl Window {
             let handle = handle;
             let cx = cx.to_async();
             move |content_size, scale_factor| {
+                dbg!("!!!!!!!!!!!!");
                 cx.update_window(handle, |cx| {
+                    dbg!("!!!!!!!!");
                     cx.window.scene = Scene::new(scale_factor);
                     cx.window.content_size = content_size;
                     cx.window.dirty = true;
@@ -101,6 +103,7 @@ impl<'a, 'w> WindowContext<'a, 'w> {
             root_view.paint(layout, &mut (), &mut frame_state, cx)?;
             cx.window.root_view = Some(root_view);
             let scene = cx.window.scene.take();
+            dbg!(&scene);
             let _ = cx.window.platform_window.read(|platform_window| {
                 platform_window.draw(scene);
                 future::ready(())