button: Support specified anchor to dropdown button (#1367)
This commit is contained in:
parent
1abb6c2222
commit
47978bc50e
2 changed files with 17 additions and 4 deletions
|
|
@ -1,6 +1,7 @@
|
|||
use gpui::{
|
||||
Action, App, AppContext as _, ClickEvent, Context, Entity, Focusable, InteractiveElement,
|
||||
IntoElement, ParentElement as _, Render, Styled as _, Window, prelude::FluentBuilder, px,
|
||||
Action, App, AppContext as _, ClickEvent, Context, Corner, Entity, Focusable,
|
||||
InteractiveElement, IntoElement, ParentElement as _, Render, Styled as _, Window,
|
||||
prelude::FluentBuilder, px,
|
||||
};
|
||||
|
||||
use gpui_component::{
|
||||
|
|
@ -691,7 +692,7 @@ impl Render for ButtonStory {
|
|||
DropdownButton::new("dropdown-button2")
|
||||
.button(Button::new("btn").label("Click Me"))
|
||||
.selected(selected)
|
||||
.popup_menu(move |this, _, _| {
|
||||
.popup_menu_with_anchor(Corner::BottomRight, move |this, _, _| {
|
||||
this.menu_with_check(
|
||||
"Disabled",
|
||||
disabled,
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ pub struct DropdownButton {
|
|||
variant: Option<ButtonVariant>,
|
||||
size: Option<Size>,
|
||||
rounded: ButtonRounded,
|
||||
anchor: Corner,
|
||||
}
|
||||
|
||||
impl DropdownButton {
|
||||
|
|
@ -40,6 +41,7 @@ impl DropdownButton {
|
|||
variant: None,
|
||||
size: None,
|
||||
rounded: ButtonRounded::default(),
|
||||
anchor: Corner::TopRight,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -56,6 +58,16 @@ impl DropdownButton {
|
|||
self
|
||||
}
|
||||
|
||||
pub fn popup_menu_with_anchor(
|
||||
mut self,
|
||||
anchor: impl Into<Corner>,
|
||||
popup_menu: impl Fn(PopupMenu, &mut Window, &mut Context<PopupMenu>) -> PopupMenu + 'static,
|
||||
) -> Self {
|
||||
self.popup_menu = Some(Box::new(popup_menu));
|
||||
self.anchor = anchor.into();
|
||||
self
|
||||
}
|
||||
|
||||
pub fn rounded(mut self, rounded: impl Into<ButtonRounded>) -> Self {
|
||||
self.rounded = rounded.into();
|
||||
self
|
||||
|
|
@ -158,7 +170,7 @@ impl RenderOnce for DropdownButton {
|
|||
.when_some(self.outline, |this, _| this.outline())
|
||||
.when_some(self.size, |this, size| this.with_size(size))
|
||||
.when_some(self.variant, |this, variant| this.with_variant(variant))
|
||||
.popup_menu_with_anchor(Corner::TopRight, move |this, window, cx| {
|
||||
.popup_menu_with_anchor(self.anchor, move |this, window, cx| {
|
||||
popup_menu(this, window, cx)
|
||||
}),
|
||||
)
|
||||
|
|
|
|||
Loading…
Reference in a new issue