Add more view tracking (#24683)

This should fix a panic in `Window::current_view()`

Release Notes:

- N/A
This commit is contained in:
Mikayla Maki 2025-02-11 11:18:54 -08:00 committed by GitHub
parent 0a146793ea
commit 477cec0ef1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 97 additions and 91 deletions

View file

@ -477,6 +477,7 @@ pub(crate) struct TooltipRequest {
}
pub(crate) struct DeferredDraw {
current_view: EntityId,
priority: usize,
parent_node: DispatchNodeId,
element_id_stack: SmallVec<[ElementId; 32]>,
@ -1750,9 +1751,11 @@ impl Window {
let prepaint_start = self.prepaint_index();
if let Some(element) = deferred_draw.element.as_mut() {
self.with_absolute_element_offset(deferred_draw.absolute_offset, |window| {
element.prepaint(window, cx)
});
self.with_rendered_view(deferred_draw.current_view, |window| {
window.with_absolute_element_offset(deferred_draw.absolute_offset, |window| {
element.prepaint(window, cx)
});
})
} else {
self.reuse_prepaint(deferred_draw.prepaint_range.clone());
}
@ -1783,7 +1786,9 @@ impl Window {
let paint_start = self.paint_index();
if let Some(element) = deferred_draw.element.as_mut() {
element.paint(self, cx);
self.with_rendered_view(deferred_draw.current_view, |window| {
element.paint(window, cx);
})
} else {
self.reuse_paint(deferred_draw.paint_range.clone());
}
@ -1841,6 +1846,7 @@ impl Window {
[range.start.deferred_draws_index..range.end.deferred_draws_index]
.iter()
.map(|deferred_draw| DeferredDraw {
current_view: deferred_draw.current_view,
parent_node: reused_subtree.refresh_node_id(deferred_draw.parent_node),
element_id_stack: deferred_draw.element_id_stack.clone(),
text_style_stack: deferred_draw.text_style_stack.clone(),
@ -2247,6 +2253,7 @@ impl Window {
self.invalidator.debug_assert_prepaint();
let parent_node = self.next_frame.dispatch_tree.active_node_id().unwrap();
self.next_frame.deferred_draws.push(DeferredDraw {
current_view: self.current_view(),
parent_node,
element_id_stack: self.element_id_stack.clone(),
text_style_stack: self.text_style_stack.clone(),