Add translucency setting + apply to runtime panel alpha
Domain: - AppearanceSettings gains translucency_pct (u8, 0..=100, default 40) with a clamping setter and serde round-trip coverage. - DEFAULT_TRANSLUCENCY_PCT and MAX_TRANSLUCENCY_PCT exported for the shell. Core: - BrowserCore::set_translucency_pct delegates to the appearance struct; the existing reset_appearance covers the reset path. - Integration test covers persistence into snapshot.appearance. Render: - chrome::sidebar::panel_bg(snapshot) replaces the static PANEL_BG constant, mapping the user's translucency_pct linearly into the alpha byte 0xff..0xb3. Sidebar (expanded + compact) and main pane consume the helper so changing the setting at runtime updates every glass surface in lock-step. Form: - Translucency row in chrome::appearance_form mirrors the design's static track + thumb visual driven by the persisted percentage, plus three preset chips (Solid 0 / Default 40 / Glassy 75) that mutate the setting through shell.set_translucency_pct. Strict UX rule preserved: alpha never drops below 0xb3 so panels stay readable without backdrop blur (which GPUI 0.2.2 doesn't expose).
This commit is contained in:
@@ -18,13 +18,14 @@ impl ElyShell {
|
||||
sidebar_width: f32,
|
||||
cx: &mut Context<Self>,
|
||||
) -> AnyElement {
|
||||
let panel_color = panel_bg(snapshot);
|
||||
div()
|
||||
.w(px(sidebar_width))
|
||||
.h_full()
|
||||
.flex()
|
||||
.flex_col()
|
||||
.rounded(px(spacing::RADIUS_CARD))
|
||||
.bg(rgba(PANEL_BG))
|
||||
.bg(rgba(panel_color))
|
||||
.shadow(panel_shadow())
|
||||
.overflow_hidden()
|
||||
.child(render_sidebar_header(snapshot, cx))
|
||||
@@ -408,9 +409,21 @@ fn section_label(label: &'static str) -> impl IntoElement {
|
||||
}
|
||||
|
||||
pub(crate) const ACTIVE_NAV_BG: u32 = 0xffffffd9;
|
||||
pub(crate) const PANEL_BG: u32 = 0xffffffe0;
|
||||
const UNREAD_BADGE_BG: u32 = 0x281e140f;
|
||||
|
||||
/// Maps appearance translucency_pct to a panel rgba u32.
|
||||
///
|
||||
/// translucency_pct 0 → alpha 0xff (fully opaque)
|
||||
/// translucency_pct 100 → alpha 0xb3 (mostly opaque, ~70%) so panels stay
|
||||
/// readable without backdrop blur.
|
||||
pub(crate) fn panel_bg(snapshot: &BrowserSnapshot) -> u32 {
|
||||
let pct = snapshot.appearance.translucency_pct().min(100) as u32;
|
||||
let max_alpha: u32 = 0xff;
|
||||
let min_alpha: u32 = 0xb3;
|
||||
let alpha = max_alpha - (pct * (max_alpha - min_alpha)) / 100;
|
||||
0xffffff00 | alpha
|
||||
}
|
||||
|
||||
pub(crate) fn panel_shadow() -> Vec<BoxShadow> {
|
||||
vec![
|
||||
BoxShadow {
|
||||
|
||||
Reference in New Issue
Block a user