
This PR reworks the way we define our third-party themes to make them work as overlays on top of a base theme. We introduce the concept of a `UserThemeFamily` that contains `UserTheme`s. Rather than being an entire theme definition on their own, a `UserTheme` just contains optional overrides for the values in a `Theme`. When resolving a `UserTheme`, we apply it on top of the base theme. Any values not overridden in the `UserTheme` will fall back to the `Theme` defaults. Right now we are just using `UserTheme` to model third-party themes that we distribute with the Zed binary. However, this same structure can also be used to import arbitrary user themes (such as from a theme registry, or even a theme blob from the settings file). Release Notes: - N/A
25 lines
528 B
Rust
25 lines
528 B
Rust
use refineable::Refineable;
|
|
use serde::Deserialize;
|
|
|
|
use crate::{Appearance, ThemeColors, ThemeColorsRefinement};
|
|
|
|
#[derive(Deserialize)]
|
|
pub struct UserThemeFamily {
|
|
pub name: String,
|
|
pub author: String,
|
|
pub themes: Vec<UserTheme>,
|
|
}
|
|
|
|
#[derive(Deserialize)]
|
|
pub struct UserTheme {
|
|
pub name: String,
|
|
pub appearance: Appearance,
|
|
pub styles: UserThemeStylesRefinement,
|
|
}
|
|
|
|
#[derive(Refineable, Clone)]
|
|
#[refineable(deserialize)]
|
|
pub struct UserThemeStyles {
|
|
#[refineable]
|
|
pub colors: ThemeColors,
|
|
}
|