mod action; mod app; mod assets; mod color; mod element; mod elements; mod executor; mod focusable; mod geometry; mod image_cache; mod interactive; mod keymap; mod platform; mod scene; mod style; mod styled; mod subscription; mod svg_renderer; mod taffy; #[cfg(any(test, feature = "test-support"))] mod test; mod text_system; mod util; mod view; mod window; mod private { /// A mechanism for restricting implementations of a trait to only those in GPUI. /// See: https://predr.ag/blog/definitive-guide-to-sealed-traits-in-rust/ pub trait Sealed {} } pub use action::*; pub use anyhow::Result; pub use app::*; pub use assets::*; pub use color::*; pub use element::*; pub use elements::*; pub use executor::*; pub use focusable::*; pub use geometry::*; pub use gpui2_macros::*; pub use image_cache::*; pub use interactive::*; pub use keymap::*; pub use platform::*; use private::Sealed; pub use refineable::*; pub use scene::*; pub use serde; pub use serde_json; pub use smallvec; pub use smol::Timer; pub use style::*; pub use styled::*; pub use subscription::*; pub use svg_renderer::*; pub use taffy::{AvailableSpace, LayoutId}; #[cfg(any(test, feature = "test-support"))] pub use test::*; pub use text_system::*; pub use util::arc_cow::ArcCow; pub use view::*; pub use window::*; use derive_more::{Deref, DerefMut}; use std::{ any::{Any, TypeId}, borrow::{Borrow, BorrowMut}, }; use taffy::TaffyLayoutEngine; type AnyBox = Box; pub trait Context { type Result; fn build_model( &mut self, build_model: impl FnOnce(&mut ModelContext<'_, T>) -> T, ) -> Self::Result>; fn update_model( &mut self, handle: &Model, update: impl FnOnce(&mut T, &mut ModelContext<'_, T>) -> R, ) -> Self::Result where T: 'static; fn update_window(&mut self, window: AnyWindowHandle, f: F) -> Result where F: FnOnce(AnyView, &mut WindowContext<'_>) -> T; } pub trait VisualContext: Context { fn build_view( &mut self, build_view: impl FnOnce(&mut ViewContext<'_, V>) -> V, ) -> Self::Result> where V: 'static; fn update_view( &mut self, view: &View, update: impl FnOnce(&mut V, &mut ViewContext<'_, V>) -> R, ) -> Self::Result; fn replace_root_view( &mut self, build_view: impl FnOnce(&mut ViewContext<'_, V>) -> V, ) -> Self::Result> where V: Render; } pub trait Entity: Sealed { type Weak: 'static; fn entity_id(&self) -> EntityId; fn downgrade(&self) -> Self::Weak; fn upgrade_from(weak: &Self::Weak) -> Option where Self: Sized; } pub enum GlobalKey { Numeric(usize), View(EntityId), Type(TypeId), } pub trait BorrowAppContext { fn with_text_style(&mut self, style: TextStyleRefinement, f: F) -> R where F: FnOnce(&mut Self) -> R; fn set_global(&mut self, global: T); } impl BorrowAppContext for C where C: BorrowMut, { fn with_text_style(&mut self, style: TextStyleRefinement, f: F) -> R where F: FnOnce(&mut Self) -> R, { self.borrow_mut().push_text_style(style); let result = f(self); self.borrow_mut().pop_text_style(); result } fn set_global(&mut self, global: G) { self.borrow_mut().set_global(global) } } pub trait EventEmitter: 'static { type Event: Any; } pub trait Flatten { fn flatten(self) -> Result; } impl Flatten for Result> { fn flatten(self) -> Result { self? } } impl Flatten for Result { fn flatten(self) -> Result { self } } #[derive(Deref, DerefMut, Eq, PartialEq, Hash, Clone)] pub struct SharedString(ArcCow<'static, str>); impl Default for SharedString { fn default() -> Self { Self(ArcCow::Owned("".into())) } } impl AsRef for SharedString { fn as_ref(&self) -> &str { &self.0 } } impl Borrow for SharedString { fn borrow(&self) -> &str { self.as_ref() } } impl std::fmt::Debug for SharedString { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { self.0.fmt(f) } } impl std::fmt::Display for SharedString { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{}", self.0.as_ref()) } } impl>> From for SharedString { fn from(value: T) -> Self { Self(value.into()) } }