gpui: Rework overlay element (#9911)
There was a problem using deferred draws with `overlay` and tooltips at the same time. The `overlay` element was removed and was split up into two separate elements - `deferred` - `anchored` - Mimics the `overlay` behavior but does not render its children as deferred `tooltip_container` does not defer its drawing anymore and only uses `anchored`. /cc @as-cii Release Notes: - Fixed tooltip for the recent projects popover not showing anymore --------- Co-authored-by: Antonio <antonio@zed.dev>
This commit is contained in:
parent
49144d94bf
commit
77f1cc95b8
12 changed files with 144 additions and 136 deletions
|
@ -356,6 +356,11 @@ impl<'a> ElementContext<'a> {
|
|||
let mut root_element = self.window.root_view.as_ref().unwrap().clone().into_any();
|
||||
root_element.layout(Point::default(), self.window.viewport_size.into(), self);
|
||||
|
||||
let mut sorted_deferred_draws =
|
||||
(0..self.window.next_frame.deferred_draws.len()).collect::<SmallVec<[_; 8]>>();
|
||||
sorted_deferred_draws.sort_by_key(|ix| self.window.next_frame.deferred_draws[*ix].priority);
|
||||
self.layout_deferred_draws(&sorted_deferred_draws);
|
||||
|
||||
let mut prompt_element = None;
|
||||
let mut active_drag_element = None;
|
||||
let mut tooltip_element = None;
|
||||
|
@ -380,17 +385,14 @@ impl<'a> ElementContext<'a> {
|
|||
tooltip_element = Some(element);
|
||||
}
|
||||
|
||||
let mut sorted_deferred_draws =
|
||||
(0..self.window.next_frame.deferred_draws.len()).collect::<SmallVec<[_; 8]>>();
|
||||
sorted_deferred_draws.sort_by_key(|ix| self.window.next_frame.deferred_draws[*ix].priority);
|
||||
self.layout_deferred_draws(&sorted_deferred_draws);
|
||||
|
||||
self.window.mouse_hit_test = self.window.next_frame.hit_test(self.window.mouse_position);
|
||||
|
||||
// Now actually paint the elements.
|
||||
self.window.draw_phase = DrawPhase::Paint;
|
||||
root_element.paint(self);
|
||||
|
||||
self.paint_deferred_draws(&sorted_deferred_draws);
|
||||
|
||||
if let Some(mut prompt_element) = prompt_element {
|
||||
prompt_element.paint(self)
|
||||
} else if let Some(mut drag_element) = active_drag_element {
|
||||
|
@ -398,8 +400,6 @@ impl<'a> ElementContext<'a> {
|
|||
} else if let Some(mut tooltip_element) = tooltip_element {
|
||||
tooltip_element.paint(self);
|
||||
}
|
||||
|
||||
self.paint_deferred_draws(&sorted_deferred_draws);
|
||||
}
|
||||
|
||||
fn layout_deferred_draws(&mut self, deferred_draw_indices: &[usize]) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue