Use Refineable for ThemeStyles (#3196)

This PR updates the `ThemeStyles` struct to use the `Refineable` trait
instead of a custom declarative macro for generating refinements.

Release Notes:

- N/A
This commit is contained in:
Marshall Bowers 2023-11-01 04:33:51 +01:00 committed by GitHub
parent 36a73d657a
commit 272f856460
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 17 additions and 60 deletions

View file

@ -1,8 +1,9 @@
use gpui2::Hsla; use gpui2::Hsla;
use refineable::Refineable; use refineable::Refineable;
use crate::{generate_struct_with_overrides, SyntaxTheme}; use crate::SyntaxTheme;
#[derive(Clone)]
pub struct SystemColors { pub struct SystemColors {
pub transparent: Hsla, pub transparent: Hsla,
pub mac_os_traffic_light_red: Hsla, pub mac_os_traffic_light_red: Hsla,
@ -17,6 +18,7 @@ pub struct PlayerColor {
pub selection: Hsla, pub selection: Hsla,
} }
#[derive(Clone)]
pub struct PlayerColors(pub Vec<PlayerColor>); pub struct PlayerColors(pub Vec<PlayerColor>);
#[derive(Refineable, Clone, Debug)] #[derive(Refineable, Clone, Debug)]
@ -46,7 +48,7 @@ pub struct GitStatusColors {
pub renamed: Hsla, pub renamed: Hsla,
} }
#[derive(Refineable, Clone, Debug)] #[derive(Refineable, Clone, Debug, Default)]
#[refineable(debug)] #[refineable(debug)]
pub struct ThemeColors { pub struct ThemeColors {
pub border: Hsla, pub border: Hsla,
@ -86,15 +88,14 @@ pub struct ThemeColors {
pub editor_active_line: Hsla, pub editor_active_line: Hsla,
} }
generate_struct_with_overrides! { #[derive(Refineable, Clone)]
ThemeStyle, pub struct ThemeStyles {
ThemeStyleOverrides, pub system: SystemColors,
system: SystemColors, pub colors: ThemeColors,
colors: ThemeColors, pub status: StatusColors,
status: StatusColors, pub git: GitStatusColors,
git: GitStatusColors, pub player: PlayerColors,
player: PlayerColors, pub syntax: SyntaxTheme,
syntax: SyntaxTheme
} }
#[cfg(test)] #[cfg(test)]

View file

@ -1,5 +1,5 @@
use crate::{ use crate::{
colors::{GitStatusColors, PlayerColors, StatusColors, SystemColors, ThemeColors, ThemeStyle}, colors::{GitStatusColors, PlayerColors, StatusColors, SystemColors, ThemeColors, ThemeStyles},
default_color_scales, Appearance, SyntaxTheme, ThemeFamily, ThemeVariant, default_color_scales, Appearance, SyntaxTheme, ThemeFamily, ThemeVariant,
}; };
@ -8,7 +8,7 @@ fn zed_pro_daylight() -> ThemeVariant {
id: "zed_pro_daylight".to_string(), id: "zed_pro_daylight".to_string(),
name: "Zed Pro Daylight".into(), name: "Zed Pro Daylight".into(),
appearance: Appearance::Light, appearance: Appearance::Light,
styles: ThemeStyle { styles: ThemeStyles {
system: SystemColors::default(), system: SystemColors::default(),
colors: ThemeColors::default_light(), colors: ThemeColors::default_light(),
status: StatusColors::default(), status: StatusColors::default(),
@ -24,7 +24,7 @@ pub(crate) fn zed_pro_moonlight() -> ThemeVariant {
id: "zed_pro_moonlight".to_string(), id: "zed_pro_moonlight".to_string(),
name: "Zed Pro Moonlight".into(), name: "Zed Pro Moonlight".into(),
appearance: Appearance::Dark, appearance: Appearance::Dark,
styles: ThemeStyle { styles: ThemeStyles {
system: SystemColors::default(), system: SystemColors::default(),
colors: ThemeColors::default_dark(), colors: ThemeColors::default_dark(),
status: StatusColors::default(), status: StatusColors::default(),

View file

@ -1,6 +1,6 @@
use gpui2::{HighlightStyle, Hsla}; use gpui2::{HighlightStyle, Hsla};
#[derive(Clone)] #[derive(Clone, Default)]
pub struct SyntaxTheme { pub struct SyntaxTheme {
pub highlights: Vec<(String, HighlightStyle)>, pub highlights: Vec<(String, HighlightStyle)>,
} }

View file

@ -5,7 +5,6 @@ mod registry;
mod scale; mod scale;
mod settings; mod settings;
mod syntax; mod syntax;
mod utils;
pub use colors::*; pub use colors::*;
pub use default_colors::*; pub use default_colors::*;
@ -55,7 +54,7 @@ pub struct ThemeVariant {
pub(crate) id: String, pub(crate) id: String,
pub name: SharedString, pub name: SharedString,
pub appearance: Appearance, pub appearance: Appearance,
pub styles: ThemeStyle, pub styles: ThemeStyles,
} }
impl ThemeVariant { impl ThemeVariant {

View file

@ -1,43 +0,0 @@
/// This macro generates a struct and a corresponding struct with optional fields.
///
/// It takes as input the name of the struct to be generated, the name of the struct with optional fields,
/// and a list of field names along with their types.
///
/// # Example
/// ```
/// generate_struct_with_overrides!(
/// MyStruct,
/// MyStructOverride,
/// field1: i32,
/// field2: String
/// );
/// ```
/// This will generate the following structs:
/// ```
/// pub struct MyStruct {
/// pub field1: i32,
/// pub field2: String,
/// }
///
/// pub struct MyStructOverride {
/// pub field1: Option<i32>,
/// pub field2: Option<String>,
/// }
/// ```
#[macro_export]
macro_rules! generate_struct_with_overrides {
($struct_name:ident, $struct_override_name:ident, $($field:ident: $type:ty),*) => {
pub struct $struct_name {
$(
pub $field: $type,
)*
}
#[allow(dead_code)]
pub struct $struct_override_name {
$(
pub $field: Option<$type>,
)*
}
};
}