diff --git a/crates/ely_app/src/shell/chrome/mod.rs b/crates/ely_app/src/shell/chrome/mod.rs index 084abf7..a366e22 100644 --- a/crates/ely_app/src/shell/chrome/mod.rs +++ b/crates/ely_app/src/shell/chrome/mod.rs @@ -20,4 +20,4 @@ pub(crate) use split_pane::{ render_split_pane_header, }; pub(crate) use topbar::render_topbar; -pub(crate) use wallpaper::{WallpaperTheme, render_wallpaper}; +pub(crate) use wallpaper::render_wallpaper; diff --git a/crates/ely_app/src/shell/chrome/wallpaper.rs b/crates/ely_app/src/shell/chrome/wallpaper.rs index cd15f8b..2c2c423 100644 --- a/crates/ely_app/src/shell/chrome/wallpaper.rs +++ b/crates/ely_app/src/shell/chrome/wallpaper.rs @@ -1,48 +1,23 @@ +use ely_domain::WallpaperTheme; use gpui::{ Hsla, IntoElement, ParentElement, Styled, div, hsla, linear_color_stop, linear_gradient, rgb, }; -#[derive(Clone, Copy, Debug, Eq, PartialEq)] -pub(crate) enum WallpaperTheme { - Dawn, -} - -impl WallpaperTheme { - fn base(self) -> u32 { - match self { - Self::Dawn => 0xefe8e1, - } - } - - fn upper_blob(self) -> Hsla { - match self { - Self::Dawn => hsla(351.0 / 360.0, 1.0, 0.91, 0.85), - } - } - - fn lower_blob(self) -> Hsla { - match self { - Self::Dawn => hsla(228.0 / 360.0, 1.0, 0.86, 0.65), - } - } -} - pub(crate) fn render_wallpaper(theme: WallpaperTheme) -> impl IntoElement { - let upper = theme.upper_blob(); - let lower = theme.lower_blob(); + let palette = palette_for(theme); div() .absolute() .inset_0() - .bg(rgb(theme.base())) + .bg(rgb(palette.base)) .child( div() .absolute() .inset_0() .bg(linear_gradient( 225.0, - linear_color_stop(upper, 0.0), - linear_color_stop(transparent_like(upper), 0.55), + linear_color_stop(palette.upper, 0.0), + linear_color_stop(transparent_like(palette.upper), 0.55), )), ) .child( @@ -51,12 +26,43 @@ pub(crate) fn render_wallpaper(theme: WallpaperTheme) -> impl IntoElement { .inset_0() .bg(linear_gradient( 45.0, - linear_color_stop(lower, 0.0), - linear_color_stop(transparent_like(lower), 0.62), + linear_color_stop(palette.lower, 0.0), + linear_color_stop(transparent_like(palette.lower), 0.62), )), ) } +struct WallpaperPalette { + base: u32, + upper: Hsla, + lower: Hsla, +} + +fn palette_for(theme: WallpaperTheme) -> WallpaperPalette { + match theme { + WallpaperTheme::Dawn => WallpaperPalette { + base: 0xefe8e1, + upper: hsla(351.0 / 360.0, 1.0, 0.91, 0.85), + lower: hsla(228.0 / 360.0, 1.0, 0.86, 0.65), + }, + WallpaperTheme::Violet => WallpaperPalette { + base: 0xe9e2ee, + upper: hsla(263.0 / 360.0, 1.0, 0.88, 0.78), + lower: hsla(33.0 / 360.0, 1.0, 0.87, 0.60), + }, + WallpaperTheme::Mint => WallpaperPalette { + base: 0xe6ece2, + upper: hsla(146.0 / 360.0, 0.69, 0.85, 0.82), + lower: hsla(40.0 / 360.0, 1.0, 0.86, 0.65), + }, + WallpaperTheme::Slate => WallpaperPalette { + base: 0xd6dae3, + upper: hsla(218.0 / 360.0, 0.20, 0.85, 0.75), + lower: hsla(20.0 / 360.0, 0.0, 0.10, 0.18), + }, + } +} + fn transparent_like(color: Hsla) -> Hsla { hsla(color.h, color.s, color.l, 0.0) } diff --git a/crates/ely_app/src/shell/render.rs b/crates/ely_app/src/shell/render.rs index 1a829b3..427723e 100644 --- a/crates/ely_app/src/shell/render.rs +++ b/crates/ely_app/src/shell/render.rs @@ -7,7 +7,7 @@ use gpui::{ }; use super::chrome::{ - PANEL_BG, WallpaperTheme, panel_shadow, render_command_overlay, + PANEL_BG, panel_shadow, render_command_overlay, render_topbar as render_topbar_chrome, render_wallpaper, }; use super::sidebar::collapsed_sidebar_active; @@ -64,7 +64,7 @@ impl ElyShell { .on_action(cx.listener(Self::on_zoom_in)) .on_action(cx.listener(Self::on_zoom_out)) .text_color(rgb(colors::INK)) - .child(render_wallpaper(WallpaperTheme::Dawn)) + .child(render_wallpaper(snapshot.appearance.wallpaper())) .child( div() .absolute()