sync radius
This commit is contained in:
@@ -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.),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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] {
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user