Add ButtonStyle::Outline, ButtonStyle::Glost
This commit is contained in:
parent
acbc029eed
commit
c925a6aa61
3 changed files with 55 additions and 0 deletions
|
|
@ -50,6 +50,18 @@ impl Render for ButtonStory {
|
||||||
.label("Danger Button")
|
.label("Danger Button")
|
||||||
.style(ButtonStyle::Danger)
|
.style(ButtonStyle::Danger)
|
||||||
.on_click(Self::on_click),
|
.on_click(Self::on_click),
|
||||||
|
)
|
||||||
|
.child(
|
||||||
|
Button::new("button-5", cx)
|
||||||
|
.label("Outline Button")
|
||||||
|
.style(ButtonStyle::Outline)
|
||||||
|
.on_click(Self::on_click),
|
||||||
|
)
|
||||||
|
.child(
|
||||||
|
Button::new("button-6", cx)
|
||||||
|
.label("Ghost Button")
|
||||||
|
.style(ButtonStyle::Ghost)
|
||||||
|
.on_click(Self::on_click),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
.child(
|
.child(
|
||||||
|
|
@ -197,6 +209,19 @@ impl Render for ButtonStory {
|
||||||
.size(ButtonSize::Small)
|
.size(ButtonSize::Small)
|
||||||
.style(ButtonStyle::Primary),
|
.style(ButtonStyle::Primary),
|
||||||
)
|
)
|
||||||
|
.child(
|
||||||
|
Button::new("icon-button-0-outline", cx)
|
||||||
|
.icon(IconName::Search)
|
||||||
|
.style(ButtonStyle::Outline),
|
||||||
|
)
|
||||||
|
.child(
|
||||||
|
Button::new("icon-button-1", cx)
|
||||||
|
.icon(IconName::Info)
|
||||||
|
.style(ButtonStyle::Ghost),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
.child(
|
||||||
|
section("Icon Button", cx)
|
||||||
.child(
|
.child(
|
||||||
Button::new("icon-button-4", cx)
|
Button::new("icon-button-4", cx)
|
||||||
.icon(IconName::Info)
|
.icon(IconName::Info)
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,8 @@ pub enum ButtonStyle {
|
||||||
Primary,
|
Primary,
|
||||||
Secondary,
|
Secondary,
|
||||||
Danger,
|
Danger,
|
||||||
|
Outline,
|
||||||
|
Ghost,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(IntoElement)]
|
#[derive(IntoElement)]
|
||||||
|
|
@ -282,6 +284,8 @@ impl ButtonStyle {
|
||||||
ButtonStyle::Primary => cx.theme().primary,
|
ButtonStyle::Primary => cx.theme().primary,
|
||||||
ButtonStyle::Secondary => cx.theme().secondary,
|
ButtonStyle::Secondary => cx.theme().secondary,
|
||||||
ButtonStyle::Danger => cx.theme().destructive,
|
ButtonStyle::Danger => cx.theme().destructive,
|
||||||
|
ButtonStyle::Outline => cx.theme().transparent,
|
||||||
|
ButtonStyle::Ghost => cx.theme().transparent,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -290,6 +294,8 @@ impl ButtonStyle {
|
||||||
ButtonStyle::Primary => cx.theme().primary_foreground,
|
ButtonStyle::Primary => cx.theme().primary_foreground,
|
||||||
ButtonStyle::Secondary => cx.theme().secondary_foreground,
|
ButtonStyle::Secondary => cx.theme().secondary_foreground,
|
||||||
ButtonStyle::Danger => cx.theme().destructive_foreground,
|
ButtonStyle::Danger => cx.theme().destructive_foreground,
|
||||||
|
ButtonStyle::Outline => cx.theme().secondary_foreground,
|
||||||
|
ButtonStyle::Ghost => cx.theme().secondary_foreground,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -298,6 +304,8 @@ impl ButtonStyle {
|
||||||
ButtonStyle::Primary => cx.theme().primary,
|
ButtonStyle::Primary => cx.theme().primary,
|
||||||
ButtonStyle::Secondary => cx.theme().border,
|
ButtonStyle::Secondary => cx.theme().border,
|
||||||
ButtonStyle::Danger => cx.theme().destructive,
|
ButtonStyle::Danger => cx.theme().destructive,
|
||||||
|
ButtonStyle::Outline => cx.theme().border,
|
||||||
|
ButtonStyle::Ghost => cx.theme().transparent,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -314,6 +322,8 @@ impl ButtonStyle {
|
||||||
ButtonStyle::Primary => cx.theme().primary_hover,
|
ButtonStyle::Primary => cx.theme().primary_hover,
|
||||||
ButtonStyle::Secondary => cx.theme().secondary_hover,
|
ButtonStyle::Secondary => cx.theme().secondary_hover,
|
||||||
ButtonStyle::Danger => cx.theme().destructive_hover,
|
ButtonStyle::Danger => cx.theme().destructive_hover,
|
||||||
|
ButtonStyle::Outline => cx.theme().secondary_hover,
|
||||||
|
ButtonStyle::Ghost => cx.theme().secondary_hover,
|
||||||
};
|
};
|
||||||
let border = self.border_color(cx);
|
let border = self.border_color(cx);
|
||||||
let fg = self.text_color(cx);
|
let fg = self.text_color(cx);
|
||||||
|
|
@ -326,6 +336,8 @@ impl ButtonStyle {
|
||||||
ButtonStyle::Primary => cx.theme().primary_active,
|
ButtonStyle::Primary => cx.theme().primary_active,
|
||||||
ButtonStyle::Secondary => cx.theme().secondary_active,
|
ButtonStyle::Secondary => cx.theme().secondary_active,
|
||||||
ButtonStyle::Danger => cx.theme().destructive_active,
|
ButtonStyle::Danger => cx.theme().destructive_active,
|
||||||
|
ButtonStyle::Outline => cx.theme().secondary_active,
|
||||||
|
ButtonStyle::Ghost => cx.theme().secondary_active,
|
||||||
};
|
};
|
||||||
let border = self.border_color(cx);
|
let border = self.border_color(cx);
|
||||||
let fg = self.text_color(cx);
|
let fg = self.text_color(cx);
|
||||||
|
|
@ -338,6 +350,8 @@ impl ButtonStyle {
|
||||||
ButtonStyle::Primary => cx.theme().primary_active,
|
ButtonStyle::Primary => cx.theme().primary_active,
|
||||||
ButtonStyle::Secondary => cx.theme().secondary_active,
|
ButtonStyle::Secondary => cx.theme().secondary_active,
|
||||||
ButtonStyle::Danger => cx.theme().destructive_active,
|
ButtonStyle::Danger => cx.theme().destructive_active,
|
||||||
|
ButtonStyle::Outline => cx.theme().secondary_active,
|
||||||
|
ButtonStyle::Ghost => cx.theme().secondary_active,
|
||||||
};
|
};
|
||||||
let border = self.border_color(cx);
|
let border = self.border_color(cx);
|
||||||
let fg = self.text_color(cx);
|
let fg = self.text_color(cx);
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
use std::ops::Range;
|
use std::ops::Range;
|
||||||
|
|
||||||
use crate::event::InterativeElementExt as _;
|
use crate::event::InterativeElementExt as _;
|
||||||
|
use crate::popover::Popover;
|
||||||
|
use crate::popup_menu::PopupMenu;
|
||||||
use crate::theme::ActiveTheme;
|
use crate::theme::ActiveTheme;
|
||||||
use crate::StyledExt as _;
|
use crate::StyledExt as _;
|
||||||
use blink_cursor::BlinkCursor;
|
use blink_cursor::BlinkCursor;
|
||||||
|
|
@ -369,6 +371,20 @@ impl TextInput {
|
||||||
blink_cursor.pause(cx);
|
blink_cursor.pause(cx);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn render_content_menu(&self, cx: &mut ViewContext<Self>) -> impl IntoElement {
|
||||||
|
let focus_handle = self.focus_handle.clone();
|
||||||
|
|
||||||
|
PopupMenu::build(cx, |mut this, _| {
|
||||||
|
this.content(focus_handle)
|
||||||
|
.menu("Copy", Box::new(Copy))
|
||||||
|
.menu("Cut", Box::new(Cut))
|
||||||
|
.menu("Paste", Box::new(Paste))
|
||||||
|
.separator()
|
||||||
|
.menu("Search", Box::new(SelectAll));
|
||||||
|
this
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ViewInputHandler for TextInput {
|
impl ViewInputHandler for TextInput {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue