Route domain WallpaperTheme through render_wallpaper
The shell now reads snapshot.appearance.wallpaper and feeds the domain WallpaperTheme directly into render_wallpaper. The chrome enum is deleted; the four design themes (Dawn / Violet / Mint / Slate) all map to base + upper-blob + lower-blob HSLA palettes that approximate the design's radial gradients with GPUI's 2-stop linear gradient pair. Switching themes via core.set_wallpaper_theme now propagates through snapshots into the next render.
This commit is contained in:
@@ -20,4 +20,4 @@ pub(crate) use split_pane::{
|
|||||||
render_split_pane_header,
|
render_split_pane_header,
|
||||||
};
|
};
|
||||||
pub(crate) use topbar::render_topbar;
|
pub(crate) use topbar::render_topbar;
|
||||||
pub(crate) use wallpaper::{WallpaperTheme, render_wallpaper};
|
pub(crate) use wallpaper::render_wallpaper;
|
||||||
|
|||||||
@@ -1,48 +1,23 @@
|
|||||||
|
use ely_domain::WallpaperTheme;
|
||||||
use gpui::{
|
use gpui::{
|
||||||
Hsla, IntoElement, ParentElement, Styled, div, hsla, linear_color_stop, linear_gradient, rgb,
|
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 {
|
pub(crate) fn render_wallpaper(theme: WallpaperTheme) -> impl IntoElement {
|
||||||
let upper = theme.upper_blob();
|
let palette = palette_for(theme);
|
||||||
let lower = theme.lower_blob();
|
|
||||||
|
|
||||||
div()
|
div()
|
||||||
.absolute()
|
.absolute()
|
||||||
.inset_0()
|
.inset_0()
|
||||||
.bg(rgb(theme.base()))
|
.bg(rgb(palette.base))
|
||||||
.child(
|
.child(
|
||||||
div()
|
div()
|
||||||
.absolute()
|
.absolute()
|
||||||
.inset_0()
|
.inset_0()
|
||||||
.bg(linear_gradient(
|
.bg(linear_gradient(
|
||||||
225.0,
|
225.0,
|
||||||
linear_color_stop(upper, 0.0),
|
linear_color_stop(palette.upper, 0.0),
|
||||||
linear_color_stop(transparent_like(upper), 0.55),
|
linear_color_stop(transparent_like(palette.upper), 0.55),
|
||||||
)),
|
)),
|
||||||
)
|
)
|
||||||
.child(
|
.child(
|
||||||
@@ -51,12 +26,43 @@ pub(crate) fn render_wallpaper(theme: WallpaperTheme) -> impl IntoElement {
|
|||||||
.inset_0()
|
.inset_0()
|
||||||
.bg(linear_gradient(
|
.bg(linear_gradient(
|
||||||
45.0,
|
45.0,
|
||||||
linear_color_stop(lower, 0.0),
|
linear_color_stop(palette.lower, 0.0),
|
||||||
linear_color_stop(transparent_like(lower), 0.62),
|
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 {
|
fn transparent_like(color: Hsla) -> Hsla {
|
||||||
hsla(color.h, color.s, color.l, 0.0)
|
hsla(color.h, color.s, color.l, 0.0)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ use gpui::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
use super::chrome::{
|
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,
|
render_topbar as render_topbar_chrome, render_wallpaper,
|
||||||
};
|
};
|
||||||
use super::sidebar::collapsed_sidebar_active;
|
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_in))
|
||||||
.on_action(cx.listener(Self::on_zoom_out))
|
.on_action(cx.listener(Self::on_zoom_out))
|
||||||
.text_color(rgb(colors::INK))
|
.text_color(rgb(colors::INK))
|
||||||
.child(render_wallpaper(WallpaperTheme::Dawn))
|
.child(render_wallpaper(snapshot.appearance.wallpaper()))
|
||||||
.child(
|
.child(
|
||||||
div()
|
div()
|
||||||
.absolute()
|
.absolute()
|
||||||
|
|||||||
Reference in New Issue
Block a user