From b364d404a9cc9e2a7d8763331fe76f258a7a8f35 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Wed, 27 Sep 2023 17:25:04 -0600 Subject: [PATCH] Checkpoint --- crates/gpui3/src/app.rs | 43 ++++++------- crates/gpui3/src/elements/div.rs | 103 ++++++++++++++++--------------- crates/gpui3/src/window.rs | 10 +-- 3 files changed, 75 insertions(+), 81 deletions(-) diff --git a/crates/gpui3/src/app.rs b/crates/gpui3/src/app.rs index 7cbaf51dbfd15a0895fc889395cb5e811b82d2d5..dbe53603cd5eaf74de3e2ebc3cf397ba3a460caa 100644 --- a/crates/gpui3/src/app.rs +++ b/crates/gpui3/src/app.rs @@ -289,30 +289,23 @@ impl<'a, T: Send + Sync + 'static> ModelContext<'a, T> { } } - fn immutable(app: &'a AppContext, entity_id: EntityId) -> Self { - Self { - app: Reference::Immutable(app), - entity_type: PhantomData, - entity_id, - } - } - - fn update(&mut self, update: impl FnOnce(&mut T, &mut Self) -> R) -> R { - let mut entity = self - .app - .entities - .get_mut(self.entity_id) - .unwrap() - .take() - .unwrap(); - let result = update(entity.downcast_mut::().unwrap(), self); - self.app - .entities - .get_mut(self.entity_id) - .unwrap() - .replace(entity); - result - } + // todo! + // fn update(&mut self, update: impl FnOnce(&mut T, &mut Self) -> R) -> R { + // let mut entity = self + // .app + // .entities + // .get_mut(self.entity_id) + // .unwrap() + // .take() + // .unwrap(); + // let result = update(entity.downcast_mut::().unwrap(), self); + // self.app + // .entities + // .get_mut(self.entity_id) + // .unwrap() + // .replace(entity); + // result + // } pub fn handle(&self) -> WeakHandle { WeakHandle { @@ -420,7 +413,7 @@ pub struct WeakHandle { } impl WeakHandle { - pub fn upgrade(&self, cx: &impl Context) -> Option> { + pub fn upgrade(&self, _: &impl Context) -> Option> { // todo!("Actually upgrade") Some(Handle { id: self.id, diff --git a/crates/gpui3/src/elements/div.rs b/crates/gpui3/src/elements/div.rs index 7ed37f883c51c519b3df4e665272b6d04842e024..7a0b550007df6b1839e69d853e7b99bf19f35150 100644 --- a/crates/gpui3/src/elements/div.rs +++ b/crates/gpui3/src/elements/div.rs @@ -149,7 +149,7 @@ impl Div { fn handle_scroll( &mut self, - order: u32, + _order: u32, bounds: Bounds, overflow: Point, child_layout_ids: &[LayoutId], @@ -164,6 +164,7 @@ impl Div { } scroll_max -= bounds.size; + // todo!("handle scroll") // let scroll_state = self.scroll_state.as_ref().unwrap().clone(); // cx.on_event(order, move |_, event: &ScrollWheelEvent, cx| { // if bounds.contains_point(event.position) { @@ -193,56 +194,56 @@ impl Div { } } - fn paint_inspector( - &self, - parent_origin: Point, - layout: &Layout, - cx: &mut ViewContext, - ) { - let style = self.styles.merged(); - let bounds = layout.bounds; - - let hovered = bounds.contains_point(cx.mouse_position()); - if hovered { - let rem_size = cx.rem_size(); - // cx.scene().push_quad(scene::Quad { - // bounds, - // background: Some(hsla(0., 0., 1., 0.05).into()), - // border: gpui::Border { - // color: hsla(0., 0., 1., 0.2).into(), - // top: 1., - // right: 1., - // bottom: 1., - // left: 1., - // }, - // corner_radii: CornerRadii::default() - // .refined(&style.corner_radii) - // .to_gpui(bounds.size(), rem_size), - // }) - } - - // let pressed = Cell::new(hovered && cx.is_mouse_down(MouseButton::Left)); - // cx.on_event(layout.order, move |_, event: &MouseButtonEvent, _| { - // if bounds.contains_point(event.position) { - // if event.is_down { - // pressed.set(true); - // } else if pressed.get() { - // pressed.set(false); - // eprintln!("clicked div {:?} {:#?}", bounds, style); - // } - // } - // }); - - // let hovered = Cell::new(hovered); - // cx.on_event(layout.order, move |_, event: &MouseMovedEvent, cx| { - // cx.bubble_event(); - // let hovered_now = bounds.contains_point(event.position); - // if hovered.get() != hovered_now { - // hovered.set(hovered_now); - // cx.repaint(); - // } - // }); - } + // fn paint_inspector( + // &self, + // parent_origin: Point, + // layout: &Layout, + // cx: &mut ViewContext, + // ) { + // let style = self.styles.merged(); + // let bounds = layout.bounds; + + // let hovered = bounds.contains_point(cx.mouse_position()); + // if hovered { + // let rem_size = cx.rem_size(); + // // cx.scene().push_quad(scene::Quad { + // // bounds, + // // background: Some(hsla(0., 0., 1., 0.05).into()), + // // border: gpui::Border { + // // color: hsla(0., 0., 1., 0.2).into(), + // // top: 1., + // // right: 1., + // // bottom: 1., + // // left: 1., + // // }, + // // corner_radii: CornerRadii::default() + // // .refined(&style.corner_radii) + // // .to_gpui(bounds.size(), rem_size), + // // }) + // } + + // // let pressed = Cell::new(hovered && cx.is_mouse_down(MouseButton::Left)); + // // cx.on_event(layout.order, move |_, event: &MouseButtonEvent, _| { + // // if bounds.contains_point(event.position) { + // // if event.is_down { + // // pressed.set(true); + // // } else if pressed.get() { + // // pressed.set(false); + // // eprintln!("clicked div {:?} {:#?}", bounds, style); + // // } + // // } + // // }); + + // // let hovered = Cell::new(hovered); + // // cx.on_event(layout.order, move |_, event: &MouseMovedEvent, cx| { + // // cx.bubble_event(); + // // let hovered_now = bounds.contains_point(event.position); + // // if hovered.get() != hovered_now { + // // hovered.set(hovered_now); + // // cx.repaint(); + // // } + // // }); + // } } impl Styled for Div { diff --git a/crates/gpui3/src/window.rs b/crates/gpui3/src/window.rs index e04febe942dd1475de88d7e4a17ce83831f11941..d264a2f1501966e812225eaa083a2cbb3334ad7a 100644 --- a/crates/gpui3/src/window.rs +++ b/crates/gpui3/src/window.rs @@ -24,7 +24,7 @@ pub struct Window { content_size: Size, layout_engine: TaffyLayoutEngine, text_style_stack: Vec, - cascading_states: HashMap>>, + state_stacks_by_type: HashMap>>, pub(crate) root_view: Option>, mouse_position: Point, pub(crate) scene: Scene, @@ -64,7 +64,7 @@ impl Window { content_size, layout_engine: TaffyLayoutEngine::new(), text_style_stack: Vec::new(), - cascading_states: HashMap::default(), + state_stacks_by_type: HashMap::default(), root_view: None, mouse_position, scene: Scene::new(scale_factor), @@ -168,7 +168,7 @@ impl<'a, 'w> WindowContext<'a, 'w> { pub fn push_cascading_state(&mut self, theme: T) { self.window - .cascading_states + .state_stacks_by_type .entry(TypeId::of::()) .or_default() .push(Box::new(theme)); @@ -176,7 +176,7 @@ impl<'a, 'w> WindowContext<'a, 'w> { pub fn pop_cascading_state(&mut self) { self.window - .cascading_states + .state_stacks_by_type .get_mut(&TypeId::of::()) .and_then(|stack| stack.pop()) .expect("cascading state not found"); @@ -185,7 +185,7 @@ impl<'a, 'w> WindowContext<'a, 'w> { pub fn cascading_state(&self) -> &T { let type_id = TypeId::of::(); self.window - .cascading_states + .state_stacks_by_type .get(&type_id) .and_then(|stack| stack.last()) .expect("no cascading state of the specified type has been pushed")