sync radius

This commit is contained in:
2026-10-28 17:30:54 +07:00
parent 0b8b619342
commit 5cbffe8172
6 changed files with 43 additions and 8 deletions
+6 -1
View File
@@ -56,11 +56,16 @@ impl Global for Theme {}
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct Radius {
pub control: Pixels,
/// Pill and circle shapes.
pub full: Pixels,
}
impl Default for Radius {
fn default() -> Self {
Self { control: px(6.) }
Self {
control: px(6.),
full: px(9999.),
}
}
}
+20 -2
View File
@@ -138,8 +138,12 @@ pub(crate) fn resolve(
}
let mut radius = Radius::default();
if let Some(control) = preset.and_then(|def| def.control_radius) {
radius.control = px(control);
if let Some(control) = preset
.and_then(|def| def.control_radius)
.map(px)
.or(system.control_radius)
{
radius.control = control;
}
ResolvedTheme {
@@ -182,11 +186,25 @@ mod tests {
variant,
accent,
palette,
control_radius: None,
accessibility: AccessibilityPreferences::default(),
source: SourceKind::Macos,
}
}
#[test]
fn metric_priority_is_definition_then_system_then_fallback() {
let mut stated = system(ThemeVariant::Dark, PartialPalette::default(), None);
stated.control_radius = Some(px(4.));
let resolved = resolve(&stated, None, None);
assert_eq!(resolved.radius.control, px(4.));
let def = ThemeDefinition::parse_toml("control_radius = 12.0\n").unwrap();
let overridden = resolve(&stated, Some(&def), None);
assert_eq!(overridden.radius.control, px(12.));
}
#[test]
fn empty_system_resolves_to_the_neutral_fallback() {
for variant in [ThemeVariant::Light, ThemeVariant::Dark] {
+4
View File
@@ -18,6 +18,9 @@ use super::ThemeSource;
use crate::ThemeVariant;
use crate::system::{AccessibilityPreferences, PartialPalette, SourceKind, SystemTheme};
/// Default control radius for macOS controls.
const CONTROL_RADIUS_PTS: f32 = 6.0;
#[derive(Default)]
pub(crate) struct MacosSource {
_observers: Vec<Retained<ProtocolObject<dyn NSObjectProtocol>>>,
@@ -98,6 +101,7 @@ impl ThemeSource for MacosSource {
variant,
accent: Self::color_to_hsla(&NSColor::controlAccentColor()),
palette,
control_radius: Some(gpui::px(CONTROL_RADIUS_PTS)),
accessibility,
source: SourceKind::Macos,
}
+3 -1
View File
@@ -1,6 +1,6 @@
//! The normalized snapshot a platform adapter produces.
use gpui::Hsla;
use gpui::{Hsla, Pixels};
use crate::ThemeVariant;
@@ -55,6 +55,7 @@ pub struct SystemTheme {
pub variant: ThemeVariant,
pub accent: Option<Hsla>,
pub palette: PartialPalette,
pub control_radius: Option<Pixels>,
pub accessibility: AccessibilityPreferences,
pub source: SourceKind,
}
@@ -65,6 +66,7 @@ impl SystemTheme {
variant,
accent: None,
palette: PartialPalette::default(),
control_radius: None,
accessibility: AccessibilityPreferences::default(),
source: SourceKind::Fallback,
}