mirror of
https://github.com/zed-industries/zed.git
synced 2024-12-25 01:34:02 +00:00
Make titlebar_height available during render
Co-Authored-By: Antonio Scandurra <me@as-cii.com>
This commit is contained in:
parent
5cfb948b2b
commit
a7ac37a318
2 changed files with 55 additions and 18 deletions
|
@ -747,12 +747,12 @@ impl MutableAppContext {
|
|||
self.cx.focused_view_id(window_id)
|
||||
}
|
||||
|
||||
pub fn render_view(&self, window_id: usize, view_id: usize) -> Result<ElementBox> {
|
||||
self.cx.render_view(window_id, view_id)
|
||||
}
|
||||
|
||||
pub fn render_views(&self, window_id: usize) -> HashMap<usize, ElementBox> {
|
||||
self.cx.render_views(window_id)
|
||||
pub fn render_views(
|
||||
&self,
|
||||
window_id: usize,
|
||||
titlebar_height: f32,
|
||||
) -> HashMap<usize, ElementBox> {
|
||||
self.cx.render_views(window_id, titlebar_height)
|
||||
}
|
||||
|
||||
pub fn update<T, F: FnOnce() -> T>(&mut self, callback: F) -> T {
|
||||
|
@ -1019,6 +1019,7 @@ impl MutableAppContext {
|
|||
let text_layout_cache = TextLayoutCache::new(self.cx.platform.fonts());
|
||||
let presenter = Rc::new(RefCell::new(Presenter::new(
|
||||
window_id,
|
||||
window.titlebar_height(),
|
||||
self.cx.font_cache.clone(),
|
||||
text_layout_cache,
|
||||
self.assets.clone(),
|
||||
|
@ -1211,10 +1212,11 @@ impl MutableAppContext {
|
|||
{
|
||||
{
|
||||
let mut presenter = presenter.borrow_mut();
|
||||
presenter.invalidate(invalidation, self.as_ref());
|
||||
let titlebar_height = window.titlebar_height();
|
||||
presenter.invalidate(invalidation, titlebar_height, self.as_ref());
|
||||
let scene = presenter.build_scene(
|
||||
window.size(),
|
||||
window.titlebar_height(),
|
||||
titlebar_height,
|
||||
window.scale_factor(),
|
||||
self,
|
||||
);
|
||||
|
@ -1540,19 +1542,31 @@ impl AppContext {
|
|||
.map(|window| window.focused_view_id)
|
||||
}
|
||||
|
||||
pub fn render_view(&self, window_id: usize, view_id: usize) -> Result<ElementBox> {
|
||||
pub fn render_view(
|
||||
&self,
|
||||
window_id: usize,
|
||||
view_id: usize,
|
||||
titlebar_height: f32,
|
||||
) -> Result<ElementBox> {
|
||||
self.views
|
||||
.get(&(window_id, view_id))
|
||||
.map(|v| v.render(window_id, view_id, self))
|
||||
.map(|v| v.render(window_id, view_id, titlebar_height, self))
|
||||
.ok_or(anyhow!("view not found"))
|
||||
}
|
||||
|
||||
pub fn render_views(&self, window_id: usize) -> HashMap<usize, ElementBox> {
|
||||
pub fn render_views(
|
||||
&self,
|
||||
window_id: usize,
|
||||
titlebar_height: f32,
|
||||
) -> HashMap<usize, ElementBox> {
|
||||
self.views
|
||||
.iter()
|
||||
.filter_map(|((win_id, view_id), view)| {
|
||||
if *win_id == window_id {
|
||||
Some((*view_id, view.render(*win_id, *view_id, self)))
|
||||
Some((
|
||||
*view_id,
|
||||
view.render(*win_id, *view_id, titlebar_height, self),
|
||||
))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
|
@ -1703,7 +1717,13 @@ pub trait AnyView: Send + Sync {
|
|||
fn as_any_mut(&mut self) -> &mut dyn Any;
|
||||
fn release(&mut self, cx: &mut MutableAppContext);
|
||||
fn ui_name(&self) -> &'static str;
|
||||
fn render<'a>(&self, window_id: usize, view_id: usize, cx: &AppContext) -> ElementBox;
|
||||
fn render<'a>(
|
||||
&self,
|
||||
window_id: usize,
|
||||
view_id: usize,
|
||||
titlebar_height: f32,
|
||||
cx: &AppContext,
|
||||
) -> ElementBox;
|
||||
fn on_focus(&mut self, cx: &mut MutableAppContext, window_id: usize, view_id: usize);
|
||||
fn on_blur(&mut self, cx: &mut MutableAppContext, window_id: usize, view_id: usize);
|
||||
fn keymap_context(&self, cx: &AppContext) -> keymap::Context;
|
||||
|
@ -1729,7 +1749,13 @@ where
|
|||
T::ui_name()
|
||||
}
|
||||
|
||||
fn render<'a>(&self, window_id: usize, view_id: usize, cx: &AppContext) -> ElementBox {
|
||||
fn render<'a>(
|
||||
&self,
|
||||
window_id: usize,
|
||||
view_id: usize,
|
||||
titlebar_height: f32,
|
||||
cx: &AppContext,
|
||||
) -> ElementBox {
|
||||
View::render(
|
||||
self,
|
||||
&RenderContext {
|
||||
|
@ -1737,6 +1763,7 @@ where
|
|||
view_id,
|
||||
app: cx,
|
||||
view_type: PhantomData::<T>,
|
||||
titlebar_height,
|
||||
},
|
||||
)
|
||||
}
|
||||
|
@ -2170,6 +2197,7 @@ impl<'a, T: View> ViewContext<'a, T> {
|
|||
|
||||
pub struct RenderContext<'a, T: View> {
|
||||
pub app: &'a AppContext,
|
||||
pub titlebar_height: f32,
|
||||
window_id: usize,
|
||||
view_id: usize,
|
||||
view_type: PhantomData<T>,
|
||||
|
|
|
@ -28,6 +28,7 @@ pub struct Presenter {
|
|||
impl Presenter {
|
||||
pub fn new(
|
||||
window_id: usize,
|
||||
titlebar_height: f32,
|
||||
font_cache: Arc<FontCache>,
|
||||
text_layout_cache: TextLayoutCache,
|
||||
asset_cache: Arc<AssetCache>,
|
||||
|
@ -35,7 +36,7 @@ impl Presenter {
|
|||
) -> Self {
|
||||
Self {
|
||||
window_id,
|
||||
rendered_views: cx.render_views(window_id),
|
||||
rendered_views: cx.render_views(window_id, titlebar_height),
|
||||
parents: HashMap::new(),
|
||||
font_cache,
|
||||
text_layout_cache,
|
||||
|
@ -55,15 +56,23 @@ impl Presenter {
|
|||
path
|
||||
}
|
||||
|
||||
pub fn invalidate(&mut self, mut invalidation: WindowInvalidation, cx: &AppContext) {
|
||||
pub fn invalidate(
|
||||
&mut self,
|
||||
mut invalidation: WindowInvalidation,
|
||||
titlebar_height: f32,
|
||||
cx: &AppContext,
|
||||
) {
|
||||
for view_id in invalidation.removed {
|
||||
invalidation.updated.remove(&view_id);
|
||||
self.rendered_views.remove(&view_id);
|
||||
self.parents.remove(&view_id);
|
||||
}
|
||||
for view_id in invalidation.updated {
|
||||
self.rendered_views
|
||||
.insert(view_id, cx.render_view(self.window_id, view_id).unwrap());
|
||||
self.rendered_views.insert(
|
||||
view_id,
|
||||
cx.render_view(self.window_id, view_id, titlebar_height)
|
||||
.unwrap(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue