From 225a306169a20230dd6cf94c5731cf497c017e40 Mon Sep 17 00:00:00 2001 From: Jason Lee Date: Wed, 16 Apr 2025 15:25:32 +0800 Subject: [PATCH] theme: Improve ThemeMode to add more features. --- Cargo.lock | 19 ++++++++++--------- crates/ui/Cargo.toml | 1 + crates/ui/src/theme.rs | 13 ++++++++++++- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index aa51d750..cbb04593 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -611,7 +611,7 @@ dependencies = [ "bitflags 2.6.0", "cexpr", "clang-sys", - "itertools 0.10.5", + "itertools 0.12.1", "lazy_static", "lazycell", "log", @@ -634,7 +634,7 @@ dependencies = [ "bitflags 2.6.0", "cexpr", "clang-sys", - "itertools 0.10.5", + "itertools 0.13.0", "log", "prettyplease", "proc-macro2", @@ -2837,6 +2837,7 @@ dependencies = [ "regex", "resvg", "rust-i18n", + "schemars", "serde", "serde_json", "smallvec", @@ -3652,7 +3653,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" dependencies = [ "cfg-if", - "windows-targets 0.48.5", + "windows-targets 0.52.6", ] [[package]] @@ -4289,7 +4290,7 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ - "proc-macro-crate 1.3.1", + "proc-macro-crate 3.2.0", "proc-macro2", "quote", "syn 2.0.96", @@ -6067,9 +6068,9 @@ dependencies = [ [[package]] name = "schemars" -version = "0.8.21" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" +checksum = "3fbf2ae1b8bc8e02df939598064d22402220cd5bbcca1c76f7d6a310974d5615" dependencies = [ "dyn-clone", "indexmap 2.7.1", @@ -6080,9 +6081,9 @@ dependencies = [ [[package]] name = "schemars_derive" -version = "0.8.21" +version = "0.8.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" +checksum = "32e265784ad618884abaea0600a9adf15393368d840e0222d101a072f3f7534d" dependencies = [ "proc-macro2", "quote", @@ -7963,7 +7964,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.59.0", ] [[package]] diff --git a/crates/ui/Cargo.toml b/crates/ui/Cargo.toml index 4ed1e6e0..8156a665 100644 --- a/crates/ui/Cargo.toml +++ b/crates/ui/Cargo.toml @@ -41,6 +41,7 @@ minify-html = "0.15.0" # Calendar chrono = "0.4.38" syntect = { version = "5.2", features = ["plist-load"] } +schemars = "0.8.22" [dev-dependencies] indoc = "2" diff --git a/crates/ui/src/theme.rs b/crates/ui/src/theme.rs index 9d5b2902..7966629c 100644 --- a/crates/ui/src/theme.rs +++ b/crates/ui/src/theme.rs @@ -3,6 +3,7 @@ use std::ops::{Deref, DerefMut}; use gpui::{ hsla, point, px, App, BoxShadow, Global, Hsla, Pixels, SharedString, Window, WindowAppearance, }; +use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use crate::{scroll::ScrollbarShow, Colorize as _}; @@ -630,7 +631,9 @@ impl From for Theme { } } -#[derive(Debug, Clone, Copy, Default, PartialEq, PartialOrd, Eq, Hash, Serialize, Deserialize)] +#[derive( + Debug, Clone, Copy, Default, PartialEq, PartialOrd, Eq, Hash, Serialize, Deserialize, JsonSchema, +)] #[serde(rename_all = "snake_case")] pub enum ThemeMode { Light, @@ -643,6 +646,14 @@ impl ThemeMode { pub fn is_dark(&self) -> bool { matches!(self, Self::Dark) } + + /// Return lower_case theme name: `light`, `dark`. + pub fn name(&self) -> &'static str { + match self { + ThemeMode::Light => "light", + ThemeMode::Dark => "dark", + } + } } impl From for ThemeMode {