WIP: Start on rendering scenes via presenter
This commit is contained in:
@@ -0,0 +1,13 @@
|
||||
use anyhow::{anyhow, Result};
|
||||
use gpui::AssetSource;
|
||||
use rust_embed::RustEmbed;
|
||||
|
||||
#[derive(RustEmbed)]
|
||||
#[folder = "assets"]
|
||||
struct Assets;
|
||||
|
||||
impl AssetSource for Assets {
|
||||
fn load(&self, path: &str) -> Result<std::borrow::Cow<[u8]>> {
|
||||
Self::get(path).ok_or_else(|| anyhow!("could not find asset at path \"{}\"", path))
|
||||
}
|
||||
}
|
||||
@@ -1907,46 +1907,46 @@ mod tests {
|
||||
use gpui::App;
|
||||
use std::{cell::RefCell, rc::Rc};
|
||||
|
||||
let mut app = App::new().unwrap();
|
||||
let mut app = App::test((), |mut app| async move {
|
||||
let buffer_1_events = Rc::new(RefCell::new(Vec::new()));
|
||||
let buffer_2_events = Rc::new(RefCell::new(Vec::new()));
|
||||
|
||||
let buffer_1_events = Rc::new(RefCell::new(Vec::new()));
|
||||
let buffer_2_events = Rc::new(RefCell::new(Vec::new()));
|
||||
let buffer1 = app.add_model(|_| Buffer::new(0, "abcdef"));
|
||||
let buffer2 = app.add_model(|_| Buffer::new(1, "abcdef"));
|
||||
let ops = buffer1.update(&mut app, |buffer, ctx| {
|
||||
let buffer_1_events = buffer_1_events.clone();
|
||||
ctx.subscribe(&buffer1, move |_, event, _| {
|
||||
buffer_1_events.borrow_mut().push(event.clone())
|
||||
});
|
||||
let buffer_2_events = buffer_2_events.clone();
|
||||
ctx.subscribe(&buffer2, move |_, event, _| {
|
||||
buffer_2_events.borrow_mut().push(event.clone())
|
||||
});
|
||||
|
||||
let buffer1 = app.add_model(|_| Buffer::new(0, "abcdef"));
|
||||
let buffer2 = app.add_model(|_| Buffer::new(1, "abcdef"));
|
||||
let ops = buffer1.update(&mut app, |buffer, ctx| {
|
||||
let buffer_1_events = buffer_1_events.clone();
|
||||
ctx.subscribe(&buffer1, move |_, event, _| {
|
||||
buffer_1_events.borrow_mut().push(event.clone())
|
||||
buffer.edit(Some(2..4), "XYZ", Some(ctx)).unwrap()
|
||||
});
|
||||
let buffer_2_events = buffer_2_events.clone();
|
||||
ctx.subscribe(&buffer2, move |_, event, _| {
|
||||
buffer_2_events.borrow_mut().push(event.clone())
|
||||
buffer2.update(&mut app, |buffer, ctx| {
|
||||
buffer.apply_ops(ops, Some(ctx)).unwrap();
|
||||
});
|
||||
|
||||
buffer.edit(Some(2..4), "XYZ", Some(ctx)).unwrap()
|
||||
});
|
||||
buffer2.update(&mut app, |buffer, ctx| {
|
||||
buffer.apply_ops(ops, Some(ctx)).unwrap();
|
||||
});
|
||||
let buffer_1_events = buffer_1_events.borrow();
|
||||
assert_eq!(
|
||||
*buffer_1_events,
|
||||
vec![Event::Edited(vec![Edit {
|
||||
old_range: 2..4,
|
||||
new_range: 2..5
|
||||
}])]
|
||||
);
|
||||
|
||||
let buffer_1_events = buffer_1_events.borrow();
|
||||
assert_eq!(
|
||||
*buffer_1_events,
|
||||
vec![Event::Edited(vec![Edit {
|
||||
old_range: 2..4,
|
||||
new_range: 2..5
|
||||
}])]
|
||||
);
|
||||
|
||||
let buffer_2_events = buffer_2_events.borrow();
|
||||
assert_eq!(
|
||||
*buffer_2_events,
|
||||
vec![Event::Edited(vec![Edit {
|
||||
old_range: 2..4,
|
||||
new_range: 2..5
|
||||
}])]
|
||||
);
|
||||
let buffer_2_events = buffer_2_events.borrow();
|
||||
assert_eq!(
|
||||
*buffer_2_events,
|
||||
vec![Event::Edited(vec![Edit {
|
||||
old_range: 2..4,
|
||||
new_range: 2..5
|
||||
}])]
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
@@ -418,7 +418,7 @@ impl Element for BufferElement {
|
||||
let view = self.view.as_ref(app);
|
||||
view.clamp_scroll_left(
|
||||
layout
|
||||
.scroll_max(view, ctx.font_cache, ctx.text_layout_cache, app.ctx())
|
||||
.scroll_max(view, ctx.font_cache, ctx.text_layout_cache, app.downgrade())
|
||||
.x(),
|
||||
);
|
||||
|
||||
@@ -426,10 +426,10 @@ impl Element for BufferElement {
|
||||
view.autoscroll_horizontally(
|
||||
view.scroll_position().y() as u32,
|
||||
layout.text_size.x(),
|
||||
layout.scroll_width(view, ctx.font_cache, ctx.text_layout_cache, app.ctx()),
|
||||
layout.scroll_width(view, ctx.font_cache, ctx.text_layout_cache, app.downgrade()),
|
||||
view.em_width(ctx.font_cache),
|
||||
&layout.line_layouts,
|
||||
app.ctx(),
|
||||
app.downgrade(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1269,7 +1269,7 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn test_selection_with_mouse() {
|
||||
App::test(|mut app| async move {
|
||||
App::test((), |mut app| async move {
|
||||
let buffer = app.add_model(|_| Buffer::new(0, "aaaaaa\nbbbbbb\ncccccc\ndddddd\n"));
|
||||
let settings = settings::channel(&FontCache::new()).unwrap().1;
|
||||
let (_, buffer_view) =
|
||||
@@ -1373,19 +1373,21 @@ mod tests {
|
||||
let font_cache = FontCache::new();
|
||||
let layout_cache = TextLayoutCache::new();
|
||||
|
||||
let mut app = App::new().unwrap();
|
||||
let buffer = app.add_model(|_| Buffer::new(0, sample_text(6, 6)));
|
||||
App::test((), |mut app| async move {
|
||||
let buffer = app.add_model(|_| Buffer::new(0, sample_text(6, 6)));
|
||||
|
||||
let settings = settings::channel(&font_cache).unwrap().1;
|
||||
let (_, view) = app.add_window(|ctx| BufferView::for_buffer(buffer.clone(), settings, ctx));
|
||||
let settings = settings::channel(&font_cache).unwrap().1;
|
||||
let (_, view) =
|
||||
app.add_window(|ctx| BufferView::for_buffer(buffer.clone(), settings, ctx));
|
||||
|
||||
view.read(&app, |view, app| {
|
||||
let layouts = view.layout_line_numbers(1000.0, &font_cache, &layout_cache, app)?;
|
||||
assert_eq!(layouts.len(), 6);
|
||||
Result::<()>::Ok(())
|
||||
})?;
|
||||
view.read(&app, |view, app| {
|
||||
let layouts = view.layout_line_numbers(1000.0, &font_cache, &layout_cache, app)?;
|
||||
assert_eq!(layouts.len(), 6);
|
||||
Result::<()>::Ok(())
|
||||
})?;
|
||||
|
||||
Ok(())
|
||||
Ok(())
|
||||
})
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
pub mod assets;
|
||||
pub mod editor;
|
||||
mod operation_queue;
|
||||
pub mod settings;
|
||||
|
||||
+1
-1
@@ -27,7 +27,7 @@ fn main() {
|
||||
|
||||
let (settings_tx, settings_rx) = settings::channel(&font_cache).unwrap();
|
||||
|
||||
let mut app = gpui::App::new().unwrap();
|
||||
let mut app = gpui::App::new(As).unwrap();
|
||||
|
||||
platform::runner()
|
||||
.on_finish_launching(move || {
|
||||
|
||||
Reference in New Issue
Block a user