Checkpoint
This commit is contained in:
parent
79e1e1a747
commit
66ef5549e9
6 changed files with 47 additions and 11 deletions
|
@ -289,6 +289,18 @@ impl MainThread<AppContext> {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(crate) fn update_window<R>(
|
||||||
|
&mut self,
|
||||||
|
id: WindowId,
|
||||||
|
update: impl FnOnce(&mut WindowContext) -> R,
|
||||||
|
) -> Result<R> {
|
||||||
|
self.0.update_window(id, |cx| {
|
||||||
|
update(unsafe {
|
||||||
|
std::mem::transmute::<&mut WindowContext, &mut MainThread<WindowContext>>(cx)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
pub(crate) fn platform(&self) -> &dyn Platform {
|
pub(crate) fn platform(&self) -> &dyn Platform {
|
||||||
self.platform.borrow_on_main_thread()
|
self.platform.borrow_on_main_thread()
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@ pub use color::*;
|
||||||
pub use element::*;
|
pub use element::*;
|
||||||
pub use elements::*;
|
pub use elements::*;
|
||||||
pub use executor::*;
|
pub use executor::*;
|
||||||
|
use futures::Future;
|
||||||
pub use geometry::*;
|
pub use geometry::*;
|
||||||
pub use gpui3_macros::*;
|
pub use gpui3_macros::*;
|
||||||
pub use platform::*;
|
pub use platform::*;
|
||||||
|
|
|
@ -103,6 +103,8 @@ impl MetalRenderer {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn draw(&mut self, scene: &Scene) {
|
pub fn draw(&mut self, scene: &Scene) {
|
||||||
|
dbg!(scene);
|
||||||
|
|
||||||
let layer = self.layer.clone();
|
let layer = self.layer.clone();
|
||||||
let viewport_size = layer.drawable_size();
|
let viewport_size = layer.drawable_size();
|
||||||
let viewport_size: Size<DevicePixels> = size(
|
let viewport_size: Size<DevicePixels> = size(
|
||||||
|
|
|
@ -1358,6 +1358,7 @@ extern "C" fn display_layer(this: &Object, _: Sel, _: id) {
|
||||||
let window_state = get_window_state(this);
|
let window_state = get_window_state(this);
|
||||||
let mut window_state = window_state.as_ref().lock();
|
let mut window_state = window_state.as_ref().lock();
|
||||||
if let Some(scene) = window_state.scene_to_render.take() {
|
if let Some(scene) = window_state.scene_to_render.take() {
|
||||||
|
dbg!("render", &scene);
|
||||||
window_state.renderer.draw(&scene);
|
window_state.renderer.draw(&scene);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,8 @@ use crate::{
|
||||||
StackContext, Style, TaffyLayoutEngine, WeakHandle, WindowOptions,
|
StackContext, Style, TaffyLayoutEngine, WeakHandle, WindowOptions,
|
||||||
};
|
};
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use std::{any::TypeId, marker::PhantomData, sync::Arc};
|
use futures::Future;
|
||||||
|
use std::{any::TypeId, marker::PhantomData, mem, sync::Arc};
|
||||||
use util::ResultExt;
|
use util::ResultExt;
|
||||||
|
|
||||||
pub struct AnyWindow {}
|
pub struct AnyWindow {}
|
||||||
|
@ -125,6 +126,23 @@ impl<'a, 'w> WindowContext<'a, 'w> {
|
||||||
&mut self.window.scene
|
&mut self.window.scene
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn run_on_main<R>(
|
||||||
|
&self,
|
||||||
|
f: impl FnOnce(&mut MainThread<WindowContext>) -> R + Send + 'static,
|
||||||
|
) -> impl Future<Output = Result<R>>
|
||||||
|
where
|
||||||
|
R: Send + 'static,
|
||||||
|
{
|
||||||
|
let id = self.window.handle.id;
|
||||||
|
self.app.run_on_main(move |cx| {
|
||||||
|
cx.update_window(id, |cx| {
|
||||||
|
f(unsafe {
|
||||||
|
mem::transmute::<&mut WindowContext, &mut MainThread<WindowContext>>(cx)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
pub(crate) fn draw(&mut self) -> Result<()> {
|
pub(crate) fn draw(&mut self) -> Result<()> {
|
||||||
let unit_entity = self.unit_entity.clone();
|
let unit_entity = self.unit_entity.clone();
|
||||||
self.update_entity(&unit_entity, |_, cx| {
|
self.update_entity(&unit_entity, |_, cx| {
|
||||||
|
@ -135,19 +153,19 @@ impl<'a, 'w> WindowContext<'a, 'w> {
|
||||||
.layout_engine
|
.layout_engine
|
||||||
.compute_layout(root_layout_id, available_space)?;
|
.compute_layout(root_layout_id, available_space)?;
|
||||||
let layout = cx.window.layout_engine.layout(root_layout_id)?;
|
let layout = cx.window.layout_engine.layout(root_layout_id)?;
|
||||||
|
|
||||||
|
dbg!(&layout.bounds);
|
||||||
|
|
||||||
root_view.paint(layout, &mut (), &mut frame_state, cx)?;
|
root_view.paint(layout, &mut (), &mut frame_state, cx)?;
|
||||||
cx.window.root_view = Some(root_view);
|
cx.window.root_view = Some(root_view);
|
||||||
let scene = cx.window.scene.take();
|
let scene = cx.window.scene.take();
|
||||||
|
|
||||||
dbg!(&scene);
|
let _ = cx.run_on_main(|cx| {
|
||||||
|
cx.window
|
||||||
// // todo!
|
.platform_window
|
||||||
// self.run_on_main(|cx| {
|
.borrow_on_main_thread()
|
||||||
// cx.window
|
.draw(scene);
|
||||||
// .platform_window
|
});
|
||||||
// .borrow_on_main_thread()
|
|
||||||
// .draw(scene);
|
|
||||||
// });
|
|
||||||
|
|
||||||
cx.window.dirty = false;
|
cx.window.dirty = false;
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
@ -27,7 +27,9 @@ impl Workspace {
|
||||||
|
|
||||||
fn render(&mut self, cx: &mut ViewContext<Self>) -> impl Element<State = Self> {
|
fn render(&mut self, cx: &mut ViewContext<Self>) -> impl Element<State = Self> {
|
||||||
let theme = rose_pine_dawn();
|
let theme = rose_pine_dawn();
|
||||||
div().fill(theme.middle.positive.default.background)
|
div()
|
||||||
|
.size_full()
|
||||||
|
.fill(theme.middle.positive.default.background)
|
||||||
|
|
||||||
// TODO: Implement style.
|
// TODO: Implement style.
|
||||||
//.size_full().fill(gpui3::hsla(0.83, 1., 0.5, 1.))
|
//.size_full().fill(gpui3::hsla(0.83, 1., 0.5, 1.))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue