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
|
@ -1,9 +1,10 @@
|
|||
use std::{cell::RefCell, rc::Rc};
|
||||
|
||||
use gpui::{
|
||||
div, overlay, AnchorCorner, AnyElement, Bounds, DismissEvent, DispatchPhase, Element,
|
||||
ElementContext, ElementId, Hitbox, InteractiveElement, IntoElement, LayoutId, ManagedView,
|
||||
MouseButton, MouseDownEvent, ParentElement, Pixels, Point, View, VisualContext, WindowContext,
|
||||
anchored, deferred, div, AnchorCorner, AnyElement, Bounds, DismissEvent, DispatchPhase,
|
||||
Element, ElementContext, ElementId, Hitbox, InteractiveElement, IntoElement, LayoutId,
|
||||
ManagedView, MouseButton, MouseDownEvent, ParentElement, Pixels, Point, View, VisualContext,
|
||||
WindowContext,
|
||||
};
|
||||
|
||||
pub struct RightClickMenu<M: ManagedView> {
|
||||
|
@ -103,15 +104,15 @@ impl<M: ManagedView> Element for RightClickMenu<M> {
|
|||
let mut menu_layout_id = None;
|
||||
|
||||
let menu_element = element_state.menu.borrow_mut().as_mut().map(|menu| {
|
||||
let mut overlay = overlay().snap_to_window();
|
||||
let mut anchored = anchored().snap_to_window();
|
||||
if let Some(anchor) = this.anchor {
|
||||
overlay = overlay.anchor(anchor);
|
||||
anchored = anchored.anchor(anchor);
|
||||
}
|
||||
overlay = overlay.position(*element_state.position.borrow());
|
||||
anchored = anchored.position(*element_state.position.borrow());
|
||||
|
||||
let mut element =
|
||||
deferred(anchored.child(div().occlude().child(menu.clone()))).into_any();
|
||||
|
||||
let mut element = overlay
|
||||
.child(div().occlude().child(menu.clone()))
|
||||
.into_any();
|
||||
menu_layout_id = Some(element.before_layout(cx));
|
||||
element
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue