diff --git a/crates/collab_ui2/src/collab_titlebar_item.rs b/crates/collab_ui2/src/collab_titlebar_item.rs index 2c08840691..94db2f4d9f 100644 --- a/crates/collab_ui2/src/collab_titlebar_item.rs +++ b/crates/collab_ui2/src/collab_titlebar_item.rs @@ -37,7 +37,7 @@ use gpui::{ }; use project::Project; use theme::ActiveTheme; -use ui::{h_stack, Button, ButtonVariant, KeyBinding, Label, TextColor, Tooltip}; +use ui::{h_stack, Button, ButtonVariant, Color, KeyBinding, Label, Tooltip}; use workspace::Workspace; // const MAX_PROJECT_NAME_LENGTH: usize = 40; @@ -115,7 +115,7 @@ impl Render for CollabTitlebarItem { .child( Button::new("player") .variant(ButtonVariant::Ghost) - .color(Some(TextColor::Player(0))), + .color(Some(Color::Player(0))), ) .tooltip(move |cx| Tooltip::text("Toggle following", cx)), ) @@ -133,7 +133,7 @@ impl Render for CollabTitlebarItem { .child( Button::new("branch_name") .variant(ButtonVariant::Ghost) - .color(Some(TextColor::Muted)), + .color(Some(Color::Muted)), ) .tooltip(move |cx| { cx.build_view(|_| { diff --git a/crates/diagnostics2/src/diagnostics.rs b/crates/diagnostics2/src/diagnostics.rs index 9cd049597d..7ff8cd84db 100644 --- a/crates/diagnostics2/src/diagnostics.rs +++ b/crates/diagnostics2/src/diagnostics.rs @@ -36,7 +36,7 @@ use std::{ }; use theme::ActiveTheme; pub use toolbar_controls::ToolbarControls; -use ui::{h_stack, HighlightedLabel, Icon, IconElement, Label, TextColor}; +use ui::{h_stack, Color, HighlightedLabel, Icon, IconElement, Label}; use util::TryFutureExt; use workspace::{ item::{BreadcrumbText, Item, ItemEvent, ItemHandle}, @@ -778,15 +778,15 @@ fn diagnostic_header_renderer(diagnostic: Diagnostic) -> RenderBlock { .bg(gpui::red()) .map(|stack| { let icon = if diagnostic.severity == DiagnosticSeverity::ERROR { - IconElement::new(Icon::XCircle).color(TextColor::Error) + IconElement::new(Icon::XCircle).color(Color::Error) } else { - IconElement::new(Icon::ExclamationTriangle).color(TextColor::Warning) + IconElement::new(Icon::ExclamationTriangle).color(Color::Warning) }; stack.child(div().pl_8().child(icon)) }) .when_some(diagnostic.source.as_ref(), |stack, source| { - stack.child(Label::new(format!("{source}:")).color(TextColor::Accent)) + stack.child(Label::new(format!("{source}:")).color(Color::Accent)) }) .child(HighlightedLabel::new(message.clone(), highlights.clone())) .when_some(diagnostic.code.as_ref(), |stack, code| { diff --git a/crates/diagnostics2/src/items.rs b/crates/diagnostics2/src/items.rs index 730927a79e..bbcfa748d4 100644 --- a/crates/diagnostics2/src/items.rs +++ b/crates/diagnostics2/src/items.rs @@ -7,7 +7,7 @@ use gpui::{ use language::Diagnostic; use lsp::LanguageServerId; use theme::ActiveTheme; -use ui::{h_stack, Icon, IconElement, Label, TextColor, Tooltip}; +use ui::{h_stack, Color, Icon, IconElement, Label, Tooltip}; use workspace::{item::ItemHandle, StatusItemView, ToolbarItemEvent, Workspace}; use crate::ProjectDiagnosticsEditor; @@ -26,20 +26,20 @@ impl Render for DiagnosticIndicator { fn render(&mut self, cx: &mut ViewContext) -> Self::Element { let diagnostic_indicator = match (self.summary.error_count, self.summary.warning_count) { - (0, 0) => h_stack().child(IconElement::new(Icon::Check).color(TextColor::Success)), + (0, 0) => h_stack().child(IconElement::new(Icon::Check).color(Color::Success)), (0, warning_count) => h_stack() .gap_1() - .child(IconElement::new(Icon::ExclamationTriangle).color(TextColor::Warning)) + .child(IconElement::new(Icon::ExclamationTriangle).color(Color::Warning)) .child(Label::new(warning_count.to_string())), (error_count, 0) => h_stack() .gap_1() - .child(IconElement::new(Icon::XCircle).color(TextColor::Error)) + .child(IconElement::new(Icon::XCircle).color(Color::Error)) .child(Label::new(error_count.to_string())), (error_count, warning_count) => h_stack() .gap_1() - .child(IconElement::new(Icon::XCircle).color(TextColor::Error)) + .child(IconElement::new(Icon::XCircle).color(Color::Error)) .child(Label::new(error_count.to_string())) - .child(IconElement::new(Icon::ExclamationTriangle).color(TextColor::Warning)) + .child(IconElement::new(Icon::ExclamationTriangle).color(Color::Warning)) .child(Label::new(warning_count.to_string())), }; diff --git a/crates/editor2/src/editor.rs b/crates/editor2/src/editor.rs index a4482af6af..fa7bfd77cc 100644 --- a/crates/editor2/src/editor.rs +++ b/crates/editor2/src/editor.rs @@ -4408,7 +4408,7 @@ impl Editor { editor.fold_at(&FoldAt { buffer_row }, cx); } })) - .color(ui::TextColor::Muted) + .color(ui::Color::Muted) }) }) .flatten() diff --git a/crates/editor2/src/items.rs b/crates/editor2/src/items.rs index cdb15329d3..eca3b99d78 100644 --- a/crates/editor2/src/items.rs +++ b/crates/editor2/src/items.rs @@ -30,7 +30,7 @@ use std::{ }; use text::Selection; use theme::{ActiveTheme, Theme}; -use ui::{Label, TextColor}; +use ui::{Color, Label}; use util::{paths::PathExt, ResultExt, TryFutureExt}; use workspace::item::{BreadcrumbText, FollowEvent, FollowableEvents, FollowableItemHandle}; use workspace::{ @@ -604,7 +604,7 @@ impl Item for Editor { &description, MAX_TAB_TITLE_LEN, )) - .color(TextColor::Muted), + .color(Color::Muted), ), ) })), diff --git a/crates/go_to_line2/src/go_to_line.rs b/crates/go_to_line2/src/go_to_line.rs index 4ba605c3c9..61f5742750 100644 --- a/crates/go_to_line2/src/go_to_line.rs +++ b/crates/go_to_line2/src/go_to_line.rs @@ -5,7 +5,7 @@ use gpui::{ }; use text::{Bias, Point}; use theme::ActiveTheme; -use ui::{h_stack, v_stack, Label, StyledExt, TextColor}; +use ui::{h_stack, v_stack, Color, Label, StyledExt}; use util::paths::FILE_ROW_COLUMN_DELIMITER; use workspace::Workspace; @@ -176,7 +176,7 @@ impl Render for GoToLine { .justify_between() .px_2() .py_1() - .child(Label::new(self.current_text.clone()).color(TextColor::Muted)), + .child(Label::new(self.current_text.clone()).color(Color::Muted)), ), ) } diff --git a/crates/picker2/src/picker2.rs b/crates/picker2/src/picker2.rs index 786e641ee8..e58b7782ef 100644 --- a/crates/picker2/src/picker2.rs +++ b/crates/picker2/src/picker2.rs @@ -4,7 +4,7 @@ use gpui::{ MouseDownEvent, Render, Task, UniformListScrollHandle, View, ViewContext, WindowContext, }; use std::{cmp, sync::Arc}; -use ui::{prelude::*, v_stack, Divider, Label, TextColor}; +use ui::{prelude::*, v_stack, Color, Divider, Label}; pub struct Picker { pub delegate: D, @@ -250,7 +250,7 @@ impl Render for Picker { v_stack().p_1().grow().child( div() .px_1() - .child(Label::new("No matches").color(TextColor::Muted)), + .child(Label::new("No matches").color(Color::Muted)), ), ) }) diff --git a/crates/ui2/src/components.rs b/crates/ui2/src/components.rs index 2b1df6dacc..4d7e3c14b6 100644 --- a/crates/ui2/src/components.rs +++ b/crates/ui2/src/components.rs @@ -2,6 +2,7 @@ mod avatar; mod button; mod checkbox; mod context_menu; +mod disclosure; mod divider; mod icon; mod icon_button; @@ -19,6 +20,7 @@ pub use avatar::*; pub use button::*; pub use checkbox::*; pub use context_menu::*; +pub use disclosure::*; pub use divider::*; pub use icon::*; pub use icon_button::*; diff --git a/crates/ui2/src/components/button.rs b/crates/ui2/src/components/button.rs index b2b5aebea5..a5176be52e 100644 --- a/crates/ui2/src/components/button.rs +++ b/crates/ui2/src/components/button.rs @@ -6,7 +6,7 @@ use gpui::{ }; use crate::prelude::*; -use crate::{h_stack, Icon, IconButton, IconElement, Label, LineHeightStyle, TextColor}; +use crate::{h_stack, Color, Icon, IconButton, IconElement, Label, LineHeightStyle}; /// Provides the flexibility to use either a standard /// button or an icon button in a given context. @@ -73,7 +73,7 @@ pub struct Button { label: SharedString, variant: ButtonVariant, width: Option, - color: Option, + color: Option, } impl Component for Button { @@ -81,9 +81,9 @@ impl Component for Button { fn render(self, cx: &mut WindowContext) -> Self::Rendered { let (icon_color, label_color) = match (self.disabled, self.color) { - (true, _) => (TextColor::Disabled, TextColor::Disabled), - (_, None) => (TextColor::Default, TextColor::Default), - (_, Some(color)) => (TextColor::from(color), color), + (true, _) => (Color::Disabled, Color::Disabled), + (_, None) => (Color::Default, Color::Default), + (_, Some(color)) => (Color::from(color), color), }; let mut button = h_stack() @@ -181,14 +181,14 @@ impl Button { self } - pub fn color(mut self, color: Option) -> Self { + pub fn color(mut self, color: Option) -> Self { self.color = color; self } - pub fn label_color(&self, color: Option) -> TextColor { + pub fn label_color(&self, color: Option) -> Color { if self.disabled { - TextColor::Disabled + Color::Disabled } else if let Some(color) = color { color } else { @@ -196,13 +196,13 @@ impl Button { } } - fn render_label(&self, color: TextColor) -> Label { + fn render_label(&self, color: Color) -> Label { Label::new(self.label.clone()) .color(color) .line_height_style(LineHeightStyle::UILabel) } - fn render_icon(&self, icon_color: TextColor) -> Option { + fn render_icon(&self, icon_color: Color) -> Option { self.icon.map(|i| IconElement::new(i).color(icon_color)) } } diff --git a/crates/ui2/src/components/checkbox.rs b/crates/ui2/src/components/checkbox.rs index e94c0c863d..497b40bda7 100644 --- a/crates/ui2/src/components/checkbox.rs +++ b/crates/ui2/src/components/checkbox.rs @@ -2,7 +2,7 @@ use gpui::{div, prelude::*, Div, Element, ElementId, RenderOnce, Styled, WindowC use theme2::ActiveTheme; -use crate::{Icon, IconElement, Selection, TextColor}; +use crate::{Color, Icon, IconElement, Selection}; pub type CheckHandler = Box; @@ -34,9 +34,9 @@ impl Component for Checkbox { .color( // If the checkbox is disabled we change the color of the icon. if self.disabled { - TextColor::Disabled + Color::Disabled } else { - TextColor::Selected + Color::Selected }, ), ) @@ -49,9 +49,9 @@ impl Component for Checkbox { .color( // If the checkbox is disabled we change the color of the icon. if self.disabled { - TextColor::Disabled + Color::Disabled } else { - TextColor::Selected + Color::Selected }, ), ) @@ -176,9 +176,9 @@ impl Checkbox { .color( // If the checkbox is disabled we change the color of the icon. if self.disabled { - TextColor::Disabled + Color::Disabled } else { - TextColor::Selected + Color::Selected }, ), ) @@ -191,9 +191,9 @@ impl Checkbox { .color( // If the checkbox is disabled we change the color of the icon. if self.disabled { - TextColor::Disabled + Color::Disabled } else { - TextColor::Selected + Color::Selected }, ), ) diff --git a/crates/ui2/src/components/disclosure.rs b/crates/ui2/src/components/disclosure.rs new file mode 100644 index 0000000000..3ec8c1953e --- /dev/null +++ b/crates/ui2/src/components/disclosure.rs @@ -0,0 +1,19 @@ +use gpui::{div, Element, ParentElement}; + +use crate::{Color, Icon, IconElement, IconSize, Toggle}; + +pub fn disclosure_control(toggle: Toggle) -> impl Element { + match (toggle.is_toggleable(), toggle.is_toggled()) { + (false, _) => div(), + (_, true) => div().child( + IconElement::new(Icon::ChevronDown) + .color(Color::Muted) + .size(IconSize::Small), + ), + (_, false) => div().child( + IconElement::new(Icon::ChevronRight) + .color(Color::Muted) + .size(IconSize::Small), + ), + } +} diff --git a/crates/ui2/src/components/icon.rs b/crates/ui2/src/components/icon.rs index d3f6e5d905..67a4f0aac6 100644 --- a/crates/ui2/src/components/icon.rs +++ b/crates/ui2/src/components/icon.rs @@ -23,6 +23,7 @@ pub enum Icon { BellOff, BellRing, Bolt, + CaseSensitive, Check, ChevronDown, ChevronLeft, @@ -65,9 +66,8 @@ pub enum Icon { Split, SplitMessage, Terminal, - XCircle, WholeWord, - CaseSensitive, + XCircle, } impl Icon { @@ -84,6 +84,7 @@ impl Icon { Icon::BellOff => "icons/bell-off.svg", Icon::BellRing => "icons/bell-ring.svg", Icon::Bolt => "icons/bolt.svg", + Icon::CaseSensitive => "icons/case_insensitive.svg", Icon::Check => "icons/check.svg", Icon::ChevronDown => "icons/chevron_down.svg", Icon::ChevronLeft => "icons/chevron_left.svg", @@ -126,9 +127,8 @@ impl Icon { Icon::Split => "icons/split.svg", Icon::SplitMessage => "icons/split_message.svg", Icon::Terminal => "icons/terminal.svg", - Icon::XCircle => "icons/error.svg", Icon::WholeWord => "icons/word_search.svg", - Icon::CaseSensitive => "icons/case_insensitive.svg", + Icon::XCircle => "icons/error.svg", } } } @@ -136,7 +136,7 @@ impl Icon { #[derive(RenderOnce)] pub struct IconElement { path: SharedString, - color: TextColor, + color: Color, size: IconSize, } @@ -161,7 +161,7 @@ impl IconElement { pub fn new(icon: Icon) -> Self { Self { path: icon.path().into(), - color: TextColor::default(), + color: Color::default(), size: IconSize::default(), } } @@ -169,12 +169,12 @@ impl IconElement { pub fn from_path(path: impl Into) -> Self { Self { path: path.into(), - color: TextColor::default(), + color: Color::default(), size: IconSize::default(), } } - pub fn color(mut self, color: TextColor) -> Self { + pub fn color(mut self, color: Color) -> Self { self.color = color; self } diff --git a/crates/ui2/src/components/icon_button.rs b/crates/ui2/src/components/icon_button.rs index d2b816eb6d..32848264c5 100644 --- a/crates/ui2/src/components/icon_button.rs +++ b/crates/ui2/src/components/icon_button.rs @@ -5,7 +5,7 @@ use gpui::{prelude::*, Action, AnyView, Div, MouseButton, MouseDownEvent, Statef pub struct IconButton { id: ElementId, icon: Icon, - color: TextColor, + color: Color, variant: ButtonVariant, state: InteractionState, selected: bool, @@ -18,8 +18,8 @@ impl Component for IconButton { fn render(self, cx: &mut WindowContext) -> Self::Rendered { let icon_color = match (self.state, self.color) { - (InteractionState::Disabled, _) => TextColor::Disabled, - (InteractionState::Active, _) => TextColor::Selected, + (InteractionState::Disabled, _) => Color::Disabled, + (InteractionState::Active, _) => Color::Selected, _ => self.color, }; @@ -76,7 +76,7 @@ impl IconButton { Self { id: id.into(), icon, - color: TextColor::default(), + color: Color::default(), variant: ButtonVariant::default(), state: InteractionState::default(), selected: false, @@ -90,7 +90,7 @@ impl IconButton { self } - pub fn color(mut self, color: TextColor) -> Self { + pub fn color(mut self, color: Color) -> Self { self.color = color; self } diff --git a/crates/ui2/src/components/input.rs b/crates/ui2/src/components/input.rs index f04186ff79..524e7a266e 100644 --- a/crates/ui2/src/components/input.rs +++ b/crates/ui2/src/components/input.rs @@ -36,15 +36,15 @@ impl Component for Input { }; let placeholder_label = Label::new(self.placeholder.clone()).color(if self.disabled { - TextColor::Disabled + Color::Disabled } else { - TextColor::Placeholder + Color::Placeholder }); let label = Label::new(self.value.clone()).color(if self.disabled { - TextColor::Disabled + Color::Disabled } else { - TextColor::Default + Color::Default }); div() diff --git a/crates/ui2/src/components/label.rs b/crates/ui2/src/components/label.rs index 6647d5d658..ca301134f4 100644 --- a/crates/ui2/src/components/label.rs +++ b/crates/ui2/src/components/label.rs @@ -9,48 +9,6 @@ pub enum LabelSize { Small, } -#[derive(Default, PartialEq, Copy, Clone)] -pub enum TextColor { - #[default] - Default, - Accent, - Created, - Deleted, - Disabled, - Error, - Hidden, - Info, - Modified, - Muted, - Placeholder, - Player(u32), - Selected, - Success, - Warning, -} - -impl TextColor { - pub fn color(&self, cx: &WindowContext) -> Hsla { - match self { - TextColor::Default => cx.theme().colors().text, - TextColor::Muted => cx.theme().colors().text_muted, - TextColor::Created => cx.theme().status().created, - TextColor::Modified => cx.theme().status().modified, - TextColor::Deleted => cx.theme().status().deleted, - TextColor::Disabled => cx.theme().colors().text_disabled, - TextColor::Hidden => cx.theme().status().hidden, - TextColor::Info => cx.theme().status().info, - TextColor::Placeholder => cx.theme().colors().text_placeholder, - TextColor::Accent => cx.theme().colors().text_accent, - TextColor::Player(i) => cx.theme().styles.player.0[i.clone() as usize].cursor, - TextColor::Error => cx.theme().status().error, - TextColor::Selected => cx.theme().colors().text_accent, - TextColor::Success => cx.theme().status().success, - TextColor::Warning => cx.theme().status().warning, - } - } -} - #[derive(Default, PartialEq, Copy, Clone)] pub enum LineHeightStyle { #[default] @@ -64,7 +22,7 @@ pub struct Label { label: SharedString, size: LabelSize, line_height_style: LineHeightStyle, - color: TextColor, + color: Color, strikethrough: bool, } @@ -80,7 +38,7 @@ impl Component for Label { .top_1_2() .w_full() .h_px() - .bg(TextColor::Hidden.color(cx)), + .bg(Color::Hidden.color(cx)), ) }) .map(|this| match self.size { @@ -101,7 +59,7 @@ impl Label { label: label.into(), size: LabelSize::Default, line_height_style: LineHeightStyle::default(), - color: TextColor::Default, + color: Color::Default, strikethrough: false, } } @@ -111,7 +69,7 @@ impl Label { self } - pub fn color(mut self, color: TextColor) -> Self { + pub fn color(mut self, color: Color) -> Self { self.color = color; self } @@ -131,7 +89,7 @@ impl Label { pub struct HighlightedLabel { label: SharedString, size: LabelSize, - color: TextColor, + color: Color, highlight_indices: Vec, strikethrough: bool, } @@ -185,7 +143,7 @@ impl Component for HighlightedLabel { .my_auto() .w_full() .h_px() - .bg(TextColor::Hidden.color(cx)), + .bg(Color::Hidden.color(cx)), ) }) .map(|this| match self.size { @@ -203,7 +161,7 @@ impl HighlightedLabel { Self { label: label.into(), size: LabelSize::Default, - color: TextColor::Default, + color: Color::Default, highlight_indices, strikethrough: false, } @@ -214,7 +172,7 @@ impl HighlightedLabel { self } - pub fn color(mut self, color: TextColor) -> Self { + pub fn color(mut self, color: Color) -> Self { self.color = color; self } diff --git a/crates/ui2/src/components/list.rs b/crates/ui2/src/components/list.rs index 54758b3803..b054a568fc 100644 --- a/crates/ui2/src/components/list.rs +++ b/crates/ui2/src/components/list.rs @@ -47,7 +47,7 @@ impl Component for ListHeader { .items_center() .children(icons.into_iter().map(|i| { IconElement::new(i) - .color(TextColor::Muted) + .color(Color::Muted) .size(IconSize::Small) })), ), @@ -80,10 +80,10 @@ impl Component for ListHeader { .items_center() .children(self.left_icon.map(|i| { IconElement::new(i) - .color(TextColor::Muted) + .color(Color::Muted) .size(IconSize::Small) })) - .child(Label::new(self.label.clone()).color(TextColor::Muted)), + .child(Label::new(self.label.clone()).color(Color::Muted)), ) .child(disclosure_control), ) @@ -222,10 +222,10 @@ impl Component for ListSubHeader { .items_center() .children(self.left_icon.map(|i| { IconElement::new(i) - .color(TextColor::Muted) + .color(Color::Muted) .size(IconSize::Small) })) - .child(Label::new(self.label.clone()).color(TextColor::Muted)), + .child(Label::new(self.label.clone()).color(Color::Muted)), ), ) } @@ -337,7 +337,7 @@ impl Component for ListItem { h_stack().child( IconElement::new(i) .size(IconSize::Small) - .color(TextColor::Muted), + .color(Color::Muted), ), ), Some(GraphicSlot::Avatar(src)) => Some(h_stack().child(Avatar::new(src))), @@ -432,9 +432,7 @@ impl Component for List { let list_content = match (self.children.is_empty(), self.toggle) { (false, _) => div().children(self.children), (true, Toggle::Toggled(false)) => div(), - (true, _) => { - div().child(Label::new(self.empty_message.clone()).color(TextColor::Muted)) - } + (true, _) => div().child(Label::new(self.empty_message.clone()).color(Color::Muted)), }; v_stack() diff --git a/crates/ui2/src/components/stories/button.rs b/crates/ui2/src/components/stories/button.rs index 819978945e..a18f9d6b0c 100644 --- a/crates/ui2/src/components/stories/button.rs +++ b/crates/ui2/src/components/stories/button.rs @@ -4,7 +4,7 @@ pub use stories::*; #[cfg(feature = "stories")] mod stories { use super::*; - use crate::{h_stack, v_stack, Story, TextColor}; + use crate::{h_stack, v_stack, Color, Story}; use gpui::{rems, Div, Render}; use strum::IntoEnumIterator; diff --git a/crates/ui2/src/components/toggle.rs b/crates/ui2/src/components/toggle.rs index fc086aea90..2d56c06e55 100644 --- a/crates/ui2/src/components/toggle.rs +++ b/crates/ui2/src/components/toggle.rs @@ -1,7 +1,3 @@ -use gpui::{div, Element, ParentElement}; - -use crate::{Icon, IconElement, IconSize, TextColor}; - /// Whether the entry is toggleable, and if so, whether it is currently toggled. /// /// To make an element toggleable, simply add a `Toggle::Toggled(_)` and handle it's cases. @@ -43,19 +39,3 @@ impl From for Toggle { Toggle::Toggled(toggled) } } - -pub fn disclosure_control(toggle: Toggle) -> impl Element { - match (toggle.is_toggleable(), toggle.is_toggled()) { - (false, _) => div(), - (_, true) => div().child( - IconElement::new(Icon::ChevronDown) - .color(TextColor::Muted) - .size(IconSize::Small), - ), - (_, false) => div().child( - IconElement::new(Icon::ChevronRight) - .color(TextColor::Muted) - .size(IconSize::Small), - ), - } -} diff --git a/crates/ui2/src/components/tooltip.rs b/crates/ui2/src/components/tooltip.rs index 4a44bf81ef..10816dc7cd 100644 --- a/crates/ui2/src/components/tooltip.rs +++ b/crates/ui2/src/components/tooltip.rs @@ -3,7 +3,7 @@ use settings2::Settings; use theme2::{ActiveTheme, ThemeSettings}; use crate::prelude::*; -use crate::{h_stack, v_stack, KeyBinding, Label, LabelSize, StyledExt, TextColor}; +use crate::{h_stack, v_stack, Color, KeyBinding, Label, LabelSize, StyledExt}; pub struct Tooltip { title: SharedString, @@ -90,11 +90,7 @@ impl Render for Tooltip { }), ) .when_some(self.meta.clone(), |this, meta| { - this.child( - Label::new(meta) - .size(LabelSize::Small) - .color(TextColor::Muted), - ) + this.child(Label::new(meta).size(LabelSize::Small).color(Color::Muted)) }), ), ) diff --git a/crates/ui2/src/prelude.rs b/crates/ui2/src/prelude.rs index fdd8af74da..c3b52de84a 100644 --- a/crates/ui2/src/prelude.rs +++ b/crates/ui2/src/prelude.rs @@ -4,7 +4,7 @@ pub use gpui::{ }; pub use crate::StyledExt; -pub use crate::{ButtonVariant, TextColor}; +pub use crate::{ButtonVariant, Color}; pub use theme2::ActiveTheme; use strum::EnumIter; diff --git a/crates/ui2/src/styles.rs b/crates/ui2/src/styles.rs index 210cb79b13..6caddc2cdb 100644 --- a/crates/ui2/src/styles.rs +++ b/crates/ui2/src/styles.rs @@ -1,4 +1,7 @@ +mod color; mod elevation; mod typography; + +pub use color::*; pub use elevation::*; pub use typography::*; diff --git a/crates/ui2/src/styles/color.rs b/crates/ui2/src/styles/color.rs new file mode 100644 index 0000000000..7d6e329003 --- /dev/null +++ b/crates/ui2/src/styles/color.rs @@ -0,0 +1,44 @@ +use gpui::{Hsla, WindowContext}; +use theme2::ActiveTheme; + +#[derive(Default, PartialEq, Copy, Clone)] +pub enum Color { + #[default] + Default, + Accent, + Created, + Deleted, + Disabled, + Error, + Hidden, + Info, + Modified, + Muted, + Placeholder, + Player(u32), + Selected, + Success, + Warning, +} + +impl Color { + pub fn color(&self, cx: &WindowContext) -> Hsla { + match self { + Color::Default => cx.theme().colors().text, + Color::Muted => cx.theme().colors().text_muted, + Color::Created => cx.theme().status().created, + Color::Modified => cx.theme().status().modified, + Color::Deleted => cx.theme().status().deleted, + Color::Disabled => cx.theme().colors().text_disabled, + Color::Hidden => cx.theme().status().hidden, + Color::Info => cx.theme().status().info, + Color::Placeholder => cx.theme().colors().text_placeholder, + Color::Accent => cx.theme().colors().text_accent, + Color::Player(i) => cx.theme().styles.player.0[i.clone() as usize].cursor, + Color::Error => cx.theme().status().error, + Color::Selected => cx.theme().colors().text_accent, + Color::Success => cx.theme().status().success, + Color::Warning => cx.theme().status().warning, + } + } +} diff --git a/crates/workspace2/src/pane.rs b/crates/workspace2/src/pane.rs index 1c558daa31..cdc341d7dc 100644 --- a/crates/workspace2/src/pane.rs +++ b/crates/workspace2/src/pane.rs @@ -26,7 +26,7 @@ use std::{ }; use ui::v_stack; -use ui::{prelude::*, Icon, IconButton, IconElement, TextColor, Tooltip}; +use ui::{prelude::*, Color, Icon, IconButton, IconElement, Tooltip}; use util::truncate_and_remove_front; #[derive(PartialEq, Clone, Copy, Deserialize, Debug)] @@ -1425,12 +1425,12 @@ impl Pane { .then(|| { IconElement::new(Icon::ExclamationTriangle) .size(ui::IconSize::Small) - .color(TextColor::Warning) + .color(Color::Warning) }) .or(item.is_dirty(cx).then(|| { IconElement::new(Icon::ExclamationTriangle) .size(ui::IconSize::Small) - .color(TextColor::Info) + .color(Color::Info) })), ) .children((!close_right).then(|| close_icon())) diff --git a/crates/workspace2/src/toolbar.rs b/crates/workspace2/src/toolbar.rs index 298a7bee05..f69f096a3f 100644 --- a/crates/workspace2/src/toolbar.rs +++ b/crates/workspace2/src/toolbar.rs @@ -4,7 +4,7 @@ use gpui::{ ViewContext, WindowContext, }; use theme2::ActiveTheme; -use ui::{h_stack, v_stack, Button, Icon, IconButton, Label, TextColor}; +use ui::{h_stack, v_stack, Button, Color, Icon, IconButton, Label}; pub enum ToolbarItemEvent { ChangeLocation(ToolbarItemLocation), @@ -92,7 +92,7 @@ impl Render for Toolbar { h_stack() .p_1() .child(Button::new("crates")) - .child(Label::new("/").color(TextColor::Muted)) + .child(Label::new("/").color(Color::Muted)) .child(Button::new("workspace2")), ) // Toolbar right side