Preserve stacking order ID order when reusing cached view state
Co-Authored-By: Antonio Scandurra <antonio@zed.dev>
This commit is contained in:
parent
831769ce8c
commit
455d5eeb89
2 changed files with 8 additions and 2 deletions
|
@ -23,6 +23,7 @@ impl<V> Sealed for View<V> {}
|
||||||
#[doc(hidden)]
|
#[doc(hidden)]
|
||||||
pub struct AnyViewState {
|
pub struct AnyViewState {
|
||||||
root_style: Style,
|
root_style: Style,
|
||||||
|
next_stacking_order_id: u16,
|
||||||
cache_key: Option<ViewCacheKey>,
|
cache_key: Option<ViewCacheKey>,
|
||||||
element: Option<AnyElement>,
|
element: Option<AnyElement>,
|
||||||
}
|
}
|
||||||
|
@ -292,6 +293,7 @@ impl Element for AnyView {
|
||||||
let root_style = cx.layout_style(layout_id).unwrap().clone();
|
let root_style = cx.layout_style(layout_id).unwrap().clone();
|
||||||
let state = AnyViewState {
|
let state = AnyViewState {
|
||||||
root_style,
|
root_style,
|
||||||
|
next_stacking_order_id: 0,
|
||||||
cache_key: None,
|
cache_key: None,
|
||||||
element: Some(element),
|
element: Some(element),
|
||||||
};
|
};
|
||||||
|
@ -314,7 +316,7 @@ impl Element for AnyView {
|
||||||
&& !cx.window.dirty_views.contains(&self.entity_id())
|
&& !cx.window.dirty_views.contains(&self.entity_id())
|
||||||
&& !cx.window.refreshing
|
&& !cx.window.refreshing
|
||||||
{
|
{
|
||||||
cx.reuse_view();
|
cx.reuse_view(state.next_stacking_order_id);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -326,6 +328,7 @@ impl Element for AnyView {
|
||||||
element.draw(bounds.origin, bounds.size.into(), cx);
|
element.draw(bounds.origin, bounds.size.into(), cx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
state.next_stacking_order_id = cx.window.next_frame.next_stacking_order_id;
|
||||||
state.cache_key = Some(ViewCacheKey {
|
state.cache_key = Some(ViewCacheKey {
|
||||||
bounds,
|
bounds,
|
||||||
stacking_order: cx.stacking_order().clone(),
|
stacking_order: cx.stacking_order().clone(),
|
||||||
|
|
|
@ -292,7 +292,7 @@ impl<'a> VisualContext for ElementContext<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> ElementContext<'a> {
|
impl<'a> ElementContext<'a> {
|
||||||
pub(crate) fn reuse_view(&mut self) {
|
pub(crate) fn reuse_view(&mut self, next_stacking_order_id: u16) {
|
||||||
let view_id = self.parent_view_id();
|
let view_id = self.parent_view_id();
|
||||||
let grafted_view_ids = self
|
let grafted_view_ids = self
|
||||||
.cx
|
.cx
|
||||||
|
@ -333,6 +333,9 @@ impl<'a> ElementContext<'a> {
|
||||||
self.window.next_frame.requested_cursor_style = Some(style);
|
self.window.next_frame.requested_cursor_style = Some(style);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
debug_assert!(next_stacking_order_id >= self.window.next_frame.next_stacking_order_id);
|
||||||
|
self.window.next_frame.next_stacking_order_id = next_stacking_order_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn with_text_style<F, R>(&mut self, style: Option<TextStyleRefinement>, f: F) -> R
|
pub fn with_text_style<F, R>(&mut self, style: Option<TextStyleRefinement>, f: F) -> R
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue