pub struct PopupOptions {
pub parent: AnyWindowHandle,
pub anchor_rect: Bounds<Pixels>,
pub anchor: PopupAnchor,
pub gravity: PopupGravity,
pub constraint_adjustment: PopupConstraintAdjustment,
pub offset: Point<Pixels>,
pub grab: bool,
}Expand description
Describes where a native popup goes, relative to a rectangle on its parent window.
Use a popup for menus, comboboxes, context menus and tooltips that should be able to leave
the parent window’s bounds. Use an in-window element for everything else. Pass the popup to
WindowKind::AnchoredPopup in WindowOptions::kind.
The popup is placed relative to anchor_rect rather than at an absolute screen position.
The platform resolves the final position. That works on Wayland, where the compositor places
windows, and on platforms with absolute coordinates.
The popup’s size comes from window_bounds in WindowOptions.
Wayland uses only the size, not the origin. All coordinates are in logical pixels.
Native popups are available on Wayland only. On macOS, Windows, X11 and the web, opening one
returns a PopupNotSupportedError and you can draw the same content in the window instead.
Pass the parent window and anchor rectangle to PopupOptions::new, then chain setters to
configure placement and input grabbing.
§Examples
use gpui::popup::{PopupAnchor, PopupGravity, PopupOptions};
// A dropdown below a button whose bounds are `anchor_rect`.
let anchor_rect = Bounds::new(point(px(10.), px(20.)), size(px(80.), px(24.)));
let options = PopupOptions::new(parent, anchor_rect)
.anchor(PopupAnchor::BottomLeft)
.gravity(PopupGravity::BottomRight)
.grab(true);
assert_eq!(options.anchor, PopupAnchor::BottomLeft);
assert_eq!(options.gravity, PopupGravity::BottomRight);
assert!(options.grab);Fields§
§parent: AnyWindowHandleThe window the popup is anchored to.
anchor_rect: Bounds<Pixels>The rectangle the popup is positioned relative to, in the parent window’s coordinate space (the same space element bounds are in). For example, a dropdown menu uses the bounds of the button that opened it.
anchor: PopupAnchorWhich point of Self::anchor_rect the popup is anchored to.
gravity: PopupGravityThe direction in which the popup extends away from the anchor point. A dropdown that
drops below its button anchors to PopupAnchor::BottomLeft with a gravity of
PopupGravity::BottomRight so it grows down and to the right.
constraint_adjustment: PopupConstraintAdjustmentHow the platform may adjust the popup if the requested placement would put it off-screen.
offset: Point<Pixels>An additional offset applied to the popup after anchoring.
grab: boolWhether the popup should take an explicit input grab.
Grabbing popups behave like menus: they take keyboard focus and are dismissed when the user clicks outside of them or presses a dismissing key. Use it for menus and comboboxes, not for tooltips or other passive popups.
On Wayland, the grab uses the serial of the most recent mouse or key press, so open a grabbing popup in response to a press. If the window hasn’t received a press yet, the popup opens without a grab.
Automatic dismissal only covers input aimed at other applications. A click elsewhere in your own application still reaches it as usual, so closing the popup in that case is up to you. Nested grabbing popups must be closed in the reverse order they were opened.
Implementations§
Source§impl PopupOptions
impl PopupOptions
Sourcepub fn parent(self, value: impl Into<AnyWindowHandle>) -> Self
pub fn parent(self, value: impl Into<AnyWindowHandle>) -> Self
Sets the parent field of this struct.
Sourcepub fn anchor_rect(self, value: impl Into<Bounds<Pixels>>) -> Self
pub fn anchor_rect(self, value: impl Into<Bounds<Pixels>>) -> Self
Sets the anchor_rect field of this struct.
Sourcepub fn anchor(self, value: impl Into<PopupAnchor>) -> Self
pub fn anchor(self, value: impl Into<PopupAnchor>) -> Self
Sets the anchor field of this struct.
Sourcepub fn gravity(self, value: impl Into<PopupGravity>) -> Self
pub fn gravity(self, value: impl Into<PopupGravity>) -> Self
Sets the gravity field of this struct.
Sourcepub fn constraint_adjustment(
self,
value: impl Into<PopupConstraintAdjustment>,
) -> Self
pub fn constraint_adjustment( self, value: impl Into<PopupConstraintAdjustment>, ) -> Self
Sets the constraint_adjustment field of this struct.
Source§impl PopupOptions
impl PopupOptions
Trait Implementations§
Source§impl Clone for PopupOptions
impl Clone for PopupOptions
Source§impl Debug for PopupOptions
impl Debug for PopupOptions
impl Eq for PopupOptions
Source§impl FluentBuilder for PopupOptions
impl FluentBuilder for PopupOptions
Source§fn map<U>(self, f: impl FnOnce(Self) -> U) -> Uwhere
Self: Sized,
fn map<U>(self, f: impl FnOnce(Self) -> U) -> Uwhere
Self: Sized,
self to f, and returns the result. Use it to continue a chain with a
closure.Source§fn when(self, condition: bool, then: impl FnOnce(Self) -> Self) -> Selfwhere
Self: Sized,
fn when(self, condition: bool, then: impl FnOnce(Self) -> Self) -> Selfwhere
Self: Sized,
then with self if condition is true. Otherwise returns self
unchanged.Source§fn when_else(
self,
condition: bool,
then: impl FnOnce(Self) -> Self,
else_fn: impl FnOnce(Self) -> Self,
) -> Selfwhere
Self: Sized,
fn when_else(
self,
condition: bool,
then: impl FnOnce(Self) -> Self,
else_fn: impl FnOnce(Self) -> Self,
) -> Selfwhere
Self: Sized,
then with self if condition is true, and else_fn with self
otherwise.Source§impl PartialEq for PopupOptions
impl PartialEq for PopupOptions
impl StructuralPartialEq for PopupOptions
Auto Trait Implementations§
impl Freeze for PopupOptions
impl RefUnwindSafe for PopupOptions
impl Send for PopupOptions
impl Sync for PopupOptions
impl Unpin for PopupOptions
impl UnsafeUnpin for PopupOptions
impl UnwindSafe for PopupOptions
Blanket Implementations§
Source§impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
Source§fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
replaced by palette::chromatic_adaptation::AdaptIntoUnclamped
Source§fn adapt_into(self) -> D
fn adapt_into(self) -> D
replaced by palette::chromatic_adaptation::AdaptIntoUnclamped
Source§impl<T, C> AdaptIntoUnclamped<T> for Cwhere
T: AdaptFromUnclamped<C>,
impl<T, C> AdaptIntoUnclamped<T> for Cwhere
T: AdaptFromUnclamped<C>,
Source§type Scalar = <T as AdaptFromUnclamped<C>>::Scalar
type Scalar = <T as AdaptFromUnclamped<C>>::Scalar
Source§fn adapt_into_unclamped_with<M>(self) -> Twhere
M: LmsToXyz<<C as AdaptIntoUnclamped<T>>::Scalar> + XyzToLms<<C as AdaptIntoUnclamped<T>>::Scalar>,
fn adapt_into_unclamped_with<M>(self) -> Twhere
M: LmsToXyz<<C as AdaptIntoUnclamped<T>>::Scalar> + XyzToLms<<C as AdaptIntoUnclamped<T>>::Scalar>,
Source§impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
Source§fn arrays_from(colors: C) -> T
fn arrays_from(colors: C) -> T
Source§impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
Source§fn arrays_into(self) -> C
fn arrays_into(self) -> C
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
Source§type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
parameters when converting.Source§fn cam16_into_unclamped(
self,
parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>,
) -> T
fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T
self into C, using the provided parameters.impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
Source§fn components_from(colors: C) -> T
fn components_from(colors: C) -> T
Source§impl<T, C> ComponentsInto<C> for T
impl<T, C> ComponentsInto<C> for T
Source§fn components_into(self) -> C
fn components_into(self) -> C
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> FromAngle<T> for T
impl<T> FromAngle<T> for T
Source§fn from_angle(angle: T) -> T
fn from_angle(angle: T) -> T
angle.Source§impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
Source§fn from_stimulus(other: U) -> T
fn from_stimulus(other: U) -> T
other into Self, while performing the appropriate scaling,
rounding and clamping.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
Source§fn into_angle(self) -> U
fn into_angle(self) -> U
T.Source§impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
Source§type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
parameters when converting.Source§fn into_cam16_unclamped(
self,
parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>,
) -> T
fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T
self into C, using the provided parameters.Source§impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
Source§fn into_color(self) -> U
fn into_color(self) -> U
Source§impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
Source§fn into_color_unclamped(self) -> U
fn into_color_unclamped(self) -> U
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoStimulus<T> for T
impl<T> IntoStimulus<T> for T
Source§fn into_stimulus(self) -> T
fn into_stimulus(self) -> T
self into T, while performing the appropriate scaling,
rounding and clamping.Source§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
Source§type Error = <C as TryFromComponents<T>>::Error
type Error = <C as TryFromComponents<T>>::Error
try_into_colors fails to cast.Source§fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
Source§impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
Source§fn try_into_color(self) -> Result<U, OutOfBounds<U>>
fn try_into_color(self) -> Result<U, OutOfBounds<U>>
OutOfBounds error is returned which contains
the unclamped color. Read more