From b8fab6fde9b1418247baa7b8c0d115667df5ef1a Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Mon, 24 Apr 2023 16:33:27 +0200 Subject: [PATCH] Remove `UpgradeViewHandle` trait Co-authored-by: Nathan Sobo --- crates/gpui/src/app.rs | 112 ++++++++++++---------------------- crates/gpui/src/app/window.rs | 25 +++----- 2 files changed, 47 insertions(+), 90 deletions(-) diff --git a/crates/gpui/src/app.rs b/crates/gpui/src/app.rs index 4c197b0d89c29693a9f0e33b21a49e78a30b81c2..26303e6d791b01347de5475841382f997fec27e9 100644 --- a/crates/gpui/src/app.rs +++ b/crates/gpui/src/app.rs @@ -121,8 +121,8 @@ pub trait View: Entity + Sized { } } -pub trait AccessAppContext { - fn read T>(&self, f: F) -> T; +pub trait BorrowAppContext { + fn read_with T>(&self, f: F) -> T; fn update T>(&mut self, f: F) -> T; } @@ -411,9 +411,9 @@ impl AsyncAppContext { } } -impl AccessAppContext for AsyncAppContext { - fn read T>(&self, f: F) -> T { - self.0.borrow().read(f) +impl BorrowAppContext for AsyncAppContext { + fn read_with T>(&self, f: F) -> T { + self.0.borrow().read_with(f) } fn update T>(&mut self, f: F) -> T { @@ -448,16 +448,6 @@ impl UpgradeModelHandle for AsyncAppContext { } } -impl UpgradeViewHandle for AsyncAppContext { - fn upgrade_view_handle(&self, handle: &WeakViewHandle) -> Option> { - self.0.borrow_mut().upgrade_view_handle(handle) - } - - fn upgrade_any_view_handle(&self, handle: &AnyWeakViewHandle) -> Option { - self.0.borrow_mut().upgrade_any_view_handle(handle) - } -} - impl ReadModelWith for AsyncAppContext { fn read_model_with( &self, @@ -1470,6 +1460,31 @@ impl AppContext { } } + fn upgrade_view_handle(&self, handle: &WeakViewHandle) -> Option> { + if self.ref_counts.lock().is_entity_alive(handle.view_id) { + Some(ViewHandle::new( + handle.window_id, + handle.view_id, + &self.ref_counts, + )) + } else { + None + } + } + + fn upgrade_any_view_handle(&self, handle: &AnyWeakViewHandle) -> Option { + if self.ref_counts.lock().is_entity_alive(handle.view_id) { + Some(AnyViewHandle::new( + handle.window_id, + handle.view_id, + handle.view_type, + self.ref_counts.clone(), + )) + } else { + None + } + } + fn remove_dropped_entities(&mut self) { loop { let (dropped_models, dropped_views, dropped_element_states) = @@ -2104,8 +2119,8 @@ impl AppContext { } } -impl AccessAppContext for AppContext { - fn read T>(&self, f: F) -> T { +impl BorrowAppContext for AppContext { + fn read_with T>(&self, f: F) -> T { f(self) } @@ -2168,33 +2183,6 @@ impl UpgradeModelHandle for AppContext { } } -impl UpgradeViewHandle for AppContext { - fn upgrade_view_handle(&self, handle: &WeakViewHandle) -> Option> { - if self.ref_counts.lock().is_entity_alive(handle.view_id) { - Some(ViewHandle::new( - handle.window_id, - handle.view_id, - &self.ref_counts, - )) - } else { - None - } - } - - fn upgrade_any_view_handle(&self, handle: &AnyWeakViewHandle) -> Option { - if self.ref_counts.lock().is_entity_alive(handle.view_id) { - Some(AnyViewHandle::new( - handle.window_id, - handle.view_id, - handle.view_type, - self.ref_counts.clone(), - )) - } else { - None - } - } -} - #[derive(Debug)] pub enum ParentId { View(usize), @@ -3452,9 +3440,9 @@ impl<'a, 'b, V: View> ViewContext<'a, 'b, V> { } } -impl AccessAppContext for ViewContext<'_, '_, V> { - fn read T>(&self, f: F) -> T { - self.window_context.read(f) +impl BorrowAppContext for ViewContext<'_, '_, V> { + fn read_with T>(&self, f: F) -> T { + self.window_context.read_with(f) } fn update T>(&mut self, f: F) -> T { @@ -3479,16 +3467,6 @@ impl UpgradeModelHandle for ViewContext<'_, '_, V> { } } -impl UpgradeViewHandle for ViewContext<'_, '_, V> { - fn upgrade_view_handle(&self, handle: &WeakViewHandle) -> Option> { - self.window_context.upgrade_view_handle(handle) - } - - fn upgrade_any_view_handle(&self, handle: &AnyWeakViewHandle) -> Option { - self.window_context.upgrade_any_view_handle(handle) - } -} - impl UpdateModel for ViewContext<'_, '_, V> { fn update_model( &mut self, @@ -3588,16 +3566,6 @@ impl UpgradeModelHandle for EventContext<'_, '_, '_, V> { } } -impl UpgradeViewHandle for EventContext<'_, '_, '_, V> { - fn upgrade_view_handle(&self, handle: &WeakViewHandle) -> Option> { - self.view_context.upgrade_view_handle(handle) - } - - fn upgrade_any_view_handle(&self, handle: &AnyWeakViewHandle) -> Option { - self.view_context.upgrade_any_view_handle(handle) - } -} - pub(crate) enum Reference<'a, T> { Immutable(&'a T), Mutable(&'a mut T), @@ -4282,13 +4250,13 @@ impl WeakViewHandle { self.any_handle } - pub fn upgrade(&self, cx: &impl AccessAppContext) -> Option> { - cx.read(|cx| cx.upgrade_view_handle(self)) + pub fn upgrade(&self, cx: &impl BorrowAppContext) -> Option> { + cx.read_with(|cx| cx.upgrade_view_handle(self)) } pub fn update( &self, - cx: &mut impl AccessAppContext, + cx: &mut impl BorrowAppContext, update: impl FnOnce(&mut V, &mut ViewContext) -> T, ) -> Option { cx.update(|cx| { @@ -4342,8 +4310,8 @@ impl AnyWeakViewHandle { self.view_id } - pub fn upgrade(&self, cx: &impl UpgradeViewHandle) -> Option { - cx.upgrade_any_view_handle(self) + pub fn upgrade(&self, cx: &impl BorrowAppContext) -> Option { + cx.read_with(|cx| cx.upgrade_any_view_handle(self)) } } diff --git a/crates/gpui/src/app/window.rs b/crates/gpui/src/app/window.rs index 0738797f4b49fa73081427a0122bf5a2350d6ea5..605a46bf9e50e8b5466d87d0e1f26cd53b5ebfdf 100644 --- a/crates/gpui/src/app/window.rs +++ b/crates/gpui/src/app/window.rs @@ -13,11 +13,10 @@ use crate::{ }, text_layout::TextLayoutCache, util::post_inc, - AccessAppContext, Action, AnyModelHandle, AnyView, AnyViewHandle, AnyWeakModelHandle, - AnyWeakViewHandle, AppContext, Effect, Element, Entity, Handle, ModelContext, ModelHandle, - MouseRegion, MouseRegionId, ParentId, SceneBuilder, Subscription, UpdateModel, UpdateView, - UpgradeModelHandle, View, ViewContext, ViewHandle, WeakModelHandle, WeakViewHandle, - WindowInvalidation, + Action, AnyModelHandle, AnyView, AnyViewHandle, AnyWeakModelHandle, AppContext, + BorrowAppContext, Effect, Element, Entity, Handle, ModelContext, ModelHandle, MouseRegion, + MouseRegionId, ParentId, SceneBuilder, Subscription, UpdateModel, UpdateView, + UpgradeModelHandle, View, ViewContext, ViewHandle, WeakModelHandle, WindowInvalidation, }; use anyhow::{anyhow, bail, Result}; use collections::{HashMap, HashSet}; @@ -133,9 +132,9 @@ impl DerefMut for WindowContext<'_> { } } -impl AccessAppContext for WindowContext<'_> { - fn read T>(&self, f: F) -> T { - self.app_context.read(f) +impl BorrowAppContext for WindowContext<'_> { + fn read_with T>(&self, f: F) -> T { + self.app_context.read_with(f) } fn update T>(&mut self, f: F) -> T { @@ -194,16 +193,6 @@ impl UpgradeModelHandle for WindowContext<'_> { } } -impl UpgradeViewHandle for WindowContext<'_> { - fn upgrade_view_handle(&self, handle: &WeakViewHandle) -> Option> { - self.app_context.upgrade_view_handle(handle) - } - - fn upgrade_any_view_handle(&self, handle: &AnyWeakViewHandle) -> Option { - self.app_context.upgrade_any_view_handle(handle) - } -} - impl<'a> WindowContext<'a> { pub fn mutable( app_context: &'a mut AppContext,