mirror of
https://github.com/zed-industries/zed.git
synced 2025-02-06 02:37:21 +00:00
Add icon_button
This commit is contained in:
parent
6b23f74636
commit
8dd6fcc186
4 changed files with 71 additions and 3 deletions
54
crates/storybook/src/component/icon_button.rs
Normal file
54
crates/storybook/src/component/icon_button.rs
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
use crate::theme::theme;
|
||||||
|
use gpui2::elements::svg;
|
||||||
|
use gpui2::style::{StyleHelpers, Styleable};
|
||||||
|
use gpui2::{elements::div, IntoElement};
|
||||||
|
use gpui2::{Element, ParentElement, ViewContext};
|
||||||
|
|
||||||
|
#[derive(Element)]
|
||||||
|
struct IconButton {
|
||||||
|
path: &'static str,
|
||||||
|
variant: Variant,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(PartialEq)]
|
||||||
|
pub enum Variant {
|
||||||
|
Ghost,
|
||||||
|
Filled,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn icon_button<V: 'static>(path: &'static str, variant: Variant) -> impl Element<V> {
|
||||||
|
IconButton { path, variant }
|
||||||
|
}
|
||||||
|
|
||||||
|
impl IconButton {
|
||||||
|
fn render<V: 'static>(&mut self, _: &mut V, cx: &mut ViewContext<V>) -> impl IntoElement<V> {
|
||||||
|
let theme = theme(cx);
|
||||||
|
let mut div = div();
|
||||||
|
|
||||||
|
if self.variant == Variant::Filled {
|
||||||
|
div = div.fill(theme.middle.base.default.background);
|
||||||
|
}
|
||||||
|
|
||||||
|
div.w_7()
|
||||||
|
.h_6()
|
||||||
|
.flex()
|
||||||
|
.items_center()
|
||||||
|
.justify_center()
|
||||||
|
.rounded_md()
|
||||||
|
.border()
|
||||||
|
.border_color(theme.middle.base.default.background)
|
||||||
|
.hover()
|
||||||
|
.fill(theme.middle.base.hovered.background)
|
||||||
|
.border_color(theme.middle.variant.hovered.border)
|
||||||
|
.active()
|
||||||
|
.fill(theme.middle.base.pressed.background)
|
||||||
|
.border_color(theme.middle.variant.pressed.border)
|
||||||
|
.child(
|
||||||
|
svg()
|
||||||
|
.path(self.path)
|
||||||
|
.w_4()
|
||||||
|
.h_4()
|
||||||
|
.fill(theme.middle.variant.default.foreground),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
1
crates/storybook/src/component/mod.rs
Normal file
1
crates/storybook/src/component/mod.rs
Normal file
|
@ -0,0 +1 @@
|
||||||
|
pub(crate) mod icon_button;
|
|
@ -10,6 +10,7 @@ use settings::{default_settings, SettingsStore};
|
||||||
use simplelog::SimpleLogger;
|
use simplelog::SimpleLogger;
|
||||||
|
|
||||||
mod collab_panel;
|
mod collab_panel;
|
||||||
|
mod component;
|
||||||
mod components;
|
mod components;
|
||||||
mod element_ext;
|
mod element_ext;
|
||||||
mod theme;
|
mod theme;
|
||||||
|
@ -40,7 +41,7 @@ fn main() {
|
||||||
},
|
},
|
||||||
|cx| {
|
|cx| {
|
||||||
view(|cx| {
|
view(|cx| {
|
||||||
cx.enable_inspector();
|
// cx.enable_inspector();
|
||||||
storybook(&mut ViewContext::new(cx))
|
storybook(&mut ViewContext::new(cx))
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
use crate::{collab_panel::collab_panel, theme::theme};
|
use crate::{
|
||||||
|
collab_panel::collab_panel,
|
||||||
|
component::icon_button::{icon_button, Variant},
|
||||||
|
theme::theme,
|
||||||
|
};
|
||||||
use gpui2::{
|
use gpui2::{
|
||||||
elements::{div, div::ScrollState, img, svg},
|
elements::{div, div::ScrollState, img, svg},
|
||||||
style::{StyleHelpers, Styleable},
|
style::{StyleHelpers, Styleable},
|
||||||
|
@ -38,7 +42,15 @@ impl WorkspaceElement {
|
||||||
.flex_row()
|
.flex_row()
|
||||||
.overflow_hidden()
|
.overflow_hidden()
|
||||||
.child(collab_panel(self.left_scroll_state.clone()))
|
.child(collab_panel(self.left_scroll_state.clone()))
|
||||||
.child(div().h_full().flex_1())
|
.child(
|
||||||
|
div().h_full().flex_1().child(
|
||||||
|
div()
|
||||||
|
.w_24()
|
||||||
|
.h_24()
|
||||||
|
.child(icon_button("icons/plus.svg", Variant::Ghost))
|
||||||
|
.child(icon_button("icons/x.svg", Variant::Filled)),
|
||||||
|
),
|
||||||
|
)
|
||||||
.child(collab_panel(self.right_scroll_state.clone())),
|
.child(collab_panel(self.right_scroll_state.clone())),
|
||||||
)
|
)
|
||||||
.child(statusbar())
|
.child(statusbar())
|
||||||
|
|
Loading…
Reference in a new issue