mirror of
https://github.com/zed-industries/zed.git
synced 2025-01-12 21:32:40 +00:00
Minor API adjustments to make my blog post clearer (#4122)
I don't want to clutter this post with the asset source, so I made it optional. I'm also checking in an example which helps me ensure my code examples are valid. Release Notes: - N/A
This commit is contained in:
commit
006bc5a1fa
5 changed files with 48 additions and 8 deletions
35
crates/gpui/examples/ownership_post.rs
Normal file
35
crates/gpui/examples/ownership_post.rs
Normal file
|
@ -0,0 +1,35 @@
|
|||
use gpui::{prelude::*, App, AppContext, EventEmitter, Model, ModelContext};
|
||||
|
||||
struct Counter {
|
||||
count: usize,
|
||||
}
|
||||
|
||||
struct Change {
|
||||
increment: usize,
|
||||
}
|
||||
|
||||
impl EventEmitter<Change> for Counter {}
|
||||
|
||||
fn main() {
|
||||
App::new().run(|cx: &mut AppContext| {
|
||||
let counter: Model<Counter> = cx.new_model(|_cx| Counter { count: 0 });
|
||||
let subscriber = cx.new_model(|cx: &mut ModelContext<Counter>| {
|
||||
cx.subscribe(&counter, |subscriber, _emitter, event, _cx| {
|
||||
subscriber.count += event.increment * 2;
|
||||
})
|
||||
.detach();
|
||||
|
||||
Counter {
|
||||
count: counter.read(cx).count * 2,
|
||||
}
|
||||
});
|
||||
|
||||
counter.update(cx, |counter, cx| {
|
||||
counter.count += 2;
|
||||
cx.notify();
|
||||
cx.emit(Change { increment: 2 });
|
||||
});
|
||||
|
||||
assert_eq!(subscriber.read(cx).count, 4);
|
||||
});
|
||||
}
|
|
@ -111,14 +111,20 @@ pub struct App(Rc<AppCell>);
|
|||
/// configured, you'll start the app with `App::run`.
|
||||
impl App {
|
||||
/// Builds an app with the given asset source.
|
||||
pub fn production(asset_source: Arc<dyn AssetSource>) -> Self {
|
||||
pub fn new() -> Self {
|
||||
Self(AppContext::new(
|
||||
current_platform(),
|
||||
asset_source,
|
||||
Arc::new(()),
|
||||
http::client(),
|
||||
))
|
||||
}
|
||||
|
||||
/// Assign
|
||||
pub fn with_assets(self, asset_source: impl AssetSource) -> Self {
|
||||
self.0.borrow_mut().asset_source = Arc::new(asset_source);
|
||||
self
|
||||
}
|
||||
|
||||
/// Start the application. The provided callback will be called once the
|
||||
/// app is fully launched.
|
||||
pub fn run<F>(self, on_finish_launching: F)
|
||||
|
@ -1167,7 +1173,7 @@ impl Context for AppContext {
|
|||
type Result<T> = T;
|
||||
|
||||
/// Build an entity that is owned by the application. The given function will be invoked with
|
||||
/// a `ModelContext` and must return an object representing the entity. A `Model` will be returned
|
||||
/// a `ModelContext` and must return an object representing the entity. A `Model` handle will be returned,
|
||||
/// which can be used to access the entity in a context.
|
||||
fn new_model<T: 'static>(
|
||||
&mut self,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
use std::{sync::Arc, time::Duration};
|
||||
use std::time::Duration;
|
||||
|
||||
use futures::StreamExt;
|
||||
use gpui::{actions, KeyBinding, Menu, MenuItem};
|
||||
|
@ -12,7 +12,7 @@ actions!(live_kit_client, [Quit]);
|
|||
fn main() {
|
||||
SimpleLogger::init(LevelFilter::Info, Default::default()).expect("could not initialize logger");
|
||||
|
||||
gpui::App::production(Arc::new(())).run(|cx| {
|
||||
gpui::App::new().run(|cx| {
|
||||
#[cfg(any(test, feature = "test-support"))]
|
||||
println!("USING TEST LIVEKIT");
|
||||
|
||||
|
|
|
@ -60,8 +60,7 @@ fn main() {
|
|||
});
|
||||
let theme_name = args.theme.unwrap_or("One Dark".to_string());
|
||||
|
||||
let asset_source = Arc::new(Assets);
|
||||
gpui::App::production(asset_source).run(move |cx| {
|
||||
gpui::App::new().with_assets(Assets).run(move |cx| {
|
||||
load_embedded_fonts(cx).unwrap();
|
||||
|
||||
let mut store = SettingsStore::default();
|
||||
|
|
|
@ -67,7 +67,7 @@ fn main() {
|
|||
}
|
||||
|
||||
log::info!("========== starting zed ==========");
|
||||
let app = App::production(Arc::new(Assets));
|
||||
let app = App::new().with_assets(Assets);
|
||||
|
||||
let (installation_id, existing_installation_id_found) = app
|
||||
.background_executor()
|
||||
|
|
Loading…
Reference in a new issue