Add theme preview (#20039)
This PR adds a theme preview tab to help get an at a glance overview of the styles in a theme.  You can open it using `debug: open theme preview`. The next major theme preview PR will move this into it's own crate, as it will grow substantially as we add content. Next for theme preview: - Update layout to two columns, with controls on the right for selecting theme, layer/elevation-index, etc. - Cover more UI elements in preview - Display theme colors in a more helpful way - Add syntax & markdown previews Release Notes: - Added a way to preview the current theme's styles with the `debug: open theme preview` command.
This commit is contained in:
@@ -1,5 +1,8 @@
|
||||
use gpui::{hsla, point, px, BoxShadow};
|
||||
use std::fmt::{self, Display, Formatter};
|
||||
|
||||
use gpui::{hsla, point, px, BoxShadow, Hsla, WindowContext};
|
||||
use smallvec::{smallvec, SmallVec};
|
||||
use theme::ActiveTheme;
|
||||
|
||||
/// Today, elevation is primarily used to add shadows to elements, and set the correct background for elements like buttons.
|
||||
///
|
||||
@@ -15,6 +18,8 @@ pub enum ElevationIndex {
|
||||
Background,
|
||||
/// The primary surface – Contains panels, panes, containers, etc.
|
||||
Surface,
|
||||
/// The same elevation as the primary surface, but used for the editable areas, like buffers
|
||||
EditorSurface,
|
||||
/// A surface that is elevated above the primary surface. but below washes, models, and dragged elements.
|
||||
ElevatedSurface,
|
||||
/// A surface that is above all non-modal surfaces, and separates the app from focused intents, like dialogs, alerts, modals, etc.
|
||||
@@ -25,11 +30,26 @@ pub enum ElevationIndex {
|
||||
DraggedElement,
|
||||
}
|
||||
|
||||
impl Display for ElevationIndex {
|
||||
fn fmt(&self, f: &mut Formatter) -> fmt::Result {
|
||||
match self {
|
||||
ElevationIndex::Background => write!(f, "Background"),
|
||||
ElevationIndex::Surface => write!(f, "Surface"),
|
||||
ElevationIndex::EditorSurface => write!(f, "Editor Surface"),
|
||||
ElevationIndex::ElevatedSurface => write!(f, "Elevated Surface"),
|
||||
ElevationIndex::Wash => write!(f, "Wash"),
|
||||
ElevationIndex::ModalSurface => write!(f, "Modal Surface"),
|
||||
ElevationIndex::DraggedElement => write!(f, "Dragged Element"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl ElevationIndex {
|
||||
/// Returns an appropriate shadow for the given elevation index.
|
||||
pub fn shadow(self) -> SmallVec<[BoxShadow; 2]> {
|
||||
match self {
|
||||
ElevationIndex::Surface => smallvec![],
|
||||
ElevationIndex::EditorSurface => smallvec![],
|
||||
|
||||
ElevationIndex::ElevatedSurface => smallvec![BoxShadow {
|
||||
color: hsla(0., 0., 0., 0.12),
|
||||
@@ -62,4 +82,17 @@ impl ElevationIndex {
|
||||
_ => smallvec![],
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns the background color for the given elevation index.
|
||||
pub fn bg(&self, cx: &WindowContext) -> Hsla {
|
||||
match self {
|
||||
ElevationIndex::Background => cx.theme().colors().background,
|
||||
ElevationIndex::Surface => cx.theme().colors().surface_background,
|
||||
ElevationIndex::EditorSurface => cx.theme().colors().editor_background,
|
||||
ElevationIndex::ElevatedSurface => cx.theme().colors().elevated_surface_background,
|
||||
ElevationIndex::Wash => gpui::transparent_black(),
|
||||
ElevationIndex::ModalSurface => cx.theme().colors().elevated_surface_background,
|
||||
ElevationIndex::DraggedElement => gpui::transparent_black(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user