1use crate::{
2 color::{ThemeColor, ThemeColorVariant},
3 named_colors::ColorName,
4};
5use std::collections::HashMap;
6
7#[cfg(feature = "serde")]
8use serde::Deserialize;
9
10#[cfg_attr(feature = "serde", derive(Deserialize))]
19#[derive(Debug, Clone)]
20pub struct Theme {
21 pub name: String,
23 #[cfg_attr(feature = "serde", serde(default, skip))]
26 pub is_system: bool,
27 pub colors: HashMap<ColorName, ThemeColor>,
28}
29
30impl Default for Theme {
31 fn default() -> Self {
32 Self {
33 name: "Follow system".into(),
34 is_system: true,
35 colors: HashMap::default(),
36 }
37 }
38}
39
40impl Theme {
41 pub fn new_from_iter<I: IntoIterator<Item = (ColorName, ThemeColor)>>(
42 name: String,
43 colors: I,
44 ) -> Self {
45 Self::new(name, HashMap::from_iter(colors))
46 }
47
48 pub fn new(name: String, colors: HashMap<ColorName, ThemeColor>) -> Self {
49 Self {
50 name,
51 is_system: false,
52 colors,
53 }
54 }
55
56 pub fn to_css(&self, variant: ThemeColorVariant) -> String {
57 self.colors
58 .iter()
59 .map(|(name, tcolor)| format!("@define-color {name} {};\n", tcolor.get(variant)))
60 .collect::<String>()
61 }
62
63 pub fn get_provider(&self, variant: ThemeColorVariant) -> gtk::CssProvider {
64 let provider = gtk::CssProvider::new();
65 provider.load_from_data(&self.to_css(variant));
66 provider
67 }
68
69 pub fn action_row(&self) -> adw::ActionRow {
70 adw::ActionRow::builder()
71 .title_lines(1)
72 .title(&self.name)
73 .build()
74 }
75
76 pub fn default_themes() -> Vec<Self> {
79 vec![
80 #[cfg(feature = "theme_solarized")]
83 Self::new_from_iter(
84 "Solarized".into(),
85 [
86 (ColorName::WindowBg, ThemeColor::new("#eee8d5", "#002b36")),
87 (ColorName::WindowFg, ThemeColor::new("#586e75", "#eee8d5")),
88 (ColorName::Accent, ThemeColor::new("#dbd6c4", "#586e75")),
89 (ColorName::AccentBg, ThemeColor::new("#dbd6c4", "#1f444d")),
90 (ColorName::AccentFg, ThemeColor::new("#073642", "#eee8d5")),
91 (
92 ColorName::HeaderbarBg,
93 ThemeColor::new("#f5efde", "#07313b"),
94 ),
95 (
96 ColorName::HeaderbarFg,
97 ThemeColor::new("#586e75", "#eee8d5"),
98 ),
99 (
100 ColorName::HeaderbarBackdrop,
101 ThemeColor::new("#fdf6e3", "#002b36"),
102 ),
103 (ColorName::PopoverBg, ThemeColor::new("#fdf6e3", "#123a44")),
104 (ColorName::PopoverFg, ThemeColor::new("#073642", "#eee8d5")),
105 (
106 ColorName::DialogBg,
107 ThemeColor::new("@popover_bg_color", "@popover_bg_color"),
108 ),
109 (
110 ColorName::DialogFg,
111 ThemeColor::new("@popover_fg_color", "@popover_fg_color"),
112 ),
113 (ColorName::SidebarBg, ThemeColor::new("#f5efde", "#07313b")),
114 (ColorName::SidebarFg, ThemeColor::new("#586e75", "#eee8d5")),
115 (
116 ColorName::SidebarBackdrop,
117 ThemeColor::new("#fdf6e3", "#002b36"),
118 ),
119 (
120 ColorName::SidebarShade,
121 ThemeColor::new("RGB(0 0 6 / 7%)", "RGB(0 0 6 / 25%)"),
122 ),
123 (
124 ColorName::SidebarBorder,
125 ThemeColor::new("RGB(0 0 6 / 7%)", "RGB(0 0 6 / 36%)"),
126 ),
127 (
128 ColorName::SecondarySidebarBg,
129 ThemeColor::new("@sidebar_backdrop_color", "@sidebar_backdrop_color"),
130 ),
131 (
132 ColorName::SecondarySidebarFg,
133 ThemeColor::new("RGB(0 0 6 / 80%)", "white"),
134 ),
135 (
136 ColorName::SecondarySidebarBackdrop,
137 ThemeColor::new("@sidebar_backdrop_color", "@sidebar_backdrop_color"),
138 ),
139 (
140 ColorName::SecondarySidebarShade,
141 ThemeColor::new("@sidebar_shade_color", "@sidebar_shade_color"),
142 ),
143 (
144 ColorName::SecondarySidebarBorder,
145 ThemeColor::new("@sidebar_border_color", "@sidebar_border_color"),
146 ),
147 (ColorName::ViewBg, ThemeColor::new("#fdf6e3", "#073642")),
148 (ColorName::ViewFg, ThemeColor::new("#073642", "#eee8d5")),
149 (ColorName::CardBg, ThemeColor::new("#eee8d5", "#123a44")),
150 (ColorName::CardFg, ThemeColor::new("#073642", "#fdf6e3")),
151 (ColorName::WarningBg, ThemeColor::new("#CB4B16", "#CB4B16")),
152 (ColorName::WarningFg, ThemeColor::new("#eee8d5", "#eee8d5")),
153 (ColorName::Warning, ThemeColor::new("#CB4B16", "#CB4B16")),
154 (ColorName::ErrorBg, ThemeColor::new("#DC322F", "#DC322F")),
155 (ColorName::ErrorFg, ThemeColor::new("#eee8d5", "#eee8d5")),
156 (ColorName::Error, ThemeColor::new("#DC322F", "#DC322F")),
157 (ColorName::SuccessBg, ThemeColor::new("#859900", "#859900")),
158 (ColorName::SuccessFg, ThemeColor::new("#eee8d5", "#eee8d5")),
159 (ColorName::Success, ThemeColor::new("#859900", "#859900")),
160 (
161 ColorName::DestructiveBg,
162 ThemeColor::new("#D33682", "#D33682"),
163 ),
164 (
165 ColorName::DestructiveFg,
166 ThemeColor::new("#eee8d5", "#eee8d5"),
167 ),
168 (
169 ColorName::Destructive,
170 ThemeColor::new("#D33682", "#D33682"),
171 ),
172 ],
173 ),
174 #[cfg(feature = "theme_catppuccin")]
176 Self::new_from_iter(
177 "Catppuccin Frappe".into(),
178 [
179 (ColorName::Accent, ThemeColor::new("#ca9ee6", "#ca9ee6")),
180 (ColorName::AccentBg, ThemeColor::new("#ca9ee6", "#ca9ee6")),
181 (ColorName::AccentFg, ThemeColor::new("#232634", "#232634")),
182 (ColorName::WindowBg, ThemeColor::new("#303446", "#303446")),
183 (ColorName::WindowFg, ThemeColor::new("#c6d0f5", "#c6d0f5")),
184 (
185 ColorName::HeaderbarBg,
186 ThemeColor::new("#303446", "#303446"),
187 ),
188 (
189 ColorName::HeaderbarFg,
190 ThemeColor::new("#c6d0f5", "#c6d0f5"),
191 ),
192 (ColorName::PopoverBg, ThemeColor::new("#414559", "#414559")),
193 (ColorName::PopoverFg, ThemeColor::new("#c6d0f5", "#c6d0f5")),
194 (
195 ColorName::DialogBg,
196 ThemeColor::new("@popover_bg_color", "@popover_bg_color"),
197 ),
198 (
199 ColorName::DialogFg,
200 ThemeColor::new("@popover_fg_color", "@popover_fg_color"),
201 ),
202 (ColorName::SidebarBg, ThemeColor::new("#303446", "#303446")),
203 (ColorName::SidebarFg, ThemeColor::new("#c6d0f5", "#c6d0f5")),
204 (
205 ColorName::SidebarBackdrop,
206 ThemeColor::new("#303446", "#303446"),
207 ),
208 (
209 ColorName::SidebarShade,
210 ThemeColor::new("RGB(0 0 6 / 25%)", "RGB(0 0 6 / 25%)"),
211 ),
212 (
213 ColorName::SidebarBorder,
214 ThemeColor::new("RGB(0 0 6 / 36%)", "RGB(0 0 6 / 36%)"),
215 ),
216 (
217 ColorName::SecondarySidebarBg,
218 ThemeColor::new("@sidebar_backdrop_color", "@sidebar_backdrop_color"),
219 ),
220 (
221 ColorName::SecondarySidebarFg,
222 ThemeColor::new("#c6d0f5", "#c6d0f5"),
223 ),
224 (
225 ColorName::SecondarySidebarBackdrop,
226 ThemeColor::new("@sidebar_backdrop_color", "@sidebar_backdrop_color"),
227 ),
228 (
229 ColorName::SecondarySidebarShade,
230 ThemeColor::new("@sidebar_shade_color", "@sidebar_shade_color"),
231 ),
232 (
233 ColorName::SecondarySidebarBorder,
234 ThemeColor::new("@sidebar_border_color", "@sidebar_border_color"),
235 ),
236 (ColorName::ViewBg, ThemeColor::new("#303446", "#303446")),
237 (ColorName::ViewFg, ThemeColor::new("#c6d0f5", "#c6d0f5")),
238 (ColorName::CardBg, ThemeColor::new("#414559", "#414559")),
239 (ColorName::CardFg, ThemeColor::new("#c6d0f5", "#c6d0f5")),
240 (
241 ColorName::ThumbnailBg,
242 ThemeColor::new("#414559", "#414559"),
243 ),
244 (
245 ColorName::ThumbnailFg,
246 ThemeColor::new("#c6d0f5", "#c6d0f5"),
247 ),
248 (ColorName::WarningBg, ThemeColor::new("#e78284", "#e78284")),
249 (ColorName::WarningFg, ThemeColor::new("#c6d0f5", "#c6d0f5")),
250 (ColorName::Warning, ThemeColor::new("#e78284", "#e78284")),
251 (ColorName::ErrorBg, ThemeColor::new("#e78284", "#e78284")),
252 (ColorName::ErrorFg, ThemeColor::new("#c6d0f5", "#c6d0f5")),
253 (ColorName::Error, ThemeColor::new("#e78284", "#e78284")),
254 (ColorName::SuccessBg, ThemeColor::new("#a6d189", "#a6d189")),
255 (ColorName::SuccessFg, ThemeColor::new("#c6d0f5", "#c6d0f5")),
256 (ColorName::Success, ThemeColor::new("#a6d189", "#a6d189")),
257 (
258 ColorName::DestructiveBg,
259 ThemeColor::new("#e78284", "#e78284"),
260 ),
261 (
262 ColorName::DestructiveFg,
263 ThemeColor::new("#232634", "#232634"),
264 ),
265 (
266 ColorName::Destructive,
267 ThemeColor::new("#e78284", "#e78284"),
268 ),
269 ],
270 ),
271 #[cfg(feature = "theme_catppuccin")]
272 Self::new_from_iter(
273 "Catppuccin Latte".into(),
274 [
275 (ColorName::Accent, ThemeColor::new("#8839ef", "#8839ef")),
276 (ColorName::AccentBg, ThemeColor::new("#8839ef", "#8839ef")),
277 (ColorName::AccentFg, ThemeColor::new("#4c4f69", "#4c4f69")),
278 (ColorName::WindowBg, ThemeColor::new("#eff1f5", "#eff1f5")),
279 (ColorName::WindowFg, ThemeColor::new("#4c4f69", "#4c4f69")),
280 (
281 ColorName::HeaderbarBg,
282 ThemeColor::new("#eff1f5", "#eff1f5"),
283 ),
284 (
285 ColorName::HeaderbarFg,
286 ThemeColor::new("#4c4f69", "#4c4f69"),
287 ),
288 (ColorName::PopoverBg, ThemeColor::new("#ccd0da", "#ccd0da")),
289 (ColorName::PopoverFg, ThemeColor::new("#4c4f69", "#4c4f69")),
290 (
291 ColorName::DialogBg,
292 ThemeColor::new("@popover_bg_color", "@popover_bg_color"),
293 ),
294 (
295 ColorName::DialogFg,
296 ThemeColor::new("@popover_fg_color", "@popover_fg_color"),
297 ),
298 (ColorName::SidebarBg, ThemeColor::new("#eff1f5", "#eff1f5")),
299 (ColorName::SidebarFg, ThemeColor::new("#4c4f69", "#4c4f69")),
300 (
301 ColorName::SidebarBackdrop,
302 ThemeColor::new("#eff1f5", "#eff1f5"),
303 ),
304 (
305 ColorName::SidebarShade,
306 ThemeColor::new("RGB(0 0 6 / 25%)", "RGB(0 0 6 / 25%)"),
307 ),
308 (
309 ColorName::SidebarBorder,
310 ThemeColor::new("RGB(0 0 6 / 36%)", "RGB(0 0 6 / 36%)"),
311 ),
312 (
313 ColorName::SecondarySidebarBg,
314 ThemeColor::new("@sidebar_backdrop_color", "@sidebar_backdrop_color"),
315 ),
316 (
317 ColorName::SecondarySidebarFg,
318 ThemeColor::new("#4c4f69", "#4c4f69"),
319 ),
320 (
321 ColorName::SecondarySidebarBackdrop,
322 ThemeColor::new("@sidebar_backdrop_color", "@sidebar_backdrop_color"),
323 ),
324 (
325 ColorName::SecondarySidebarShade,
326 ThemeColor::new("@sidebar_shade_color", "@sidebar_shade_color"),
327 ),
328 (
329 ColorName::SecondarySidebarBorder,
330 ThemeColor::new("@sidebar_border_color", "@sidebar_border_color"),
331 ),
332 (ColorName::ViewBg, ThemeColor::new("#eff1f5", "#eff1f5")),
333 (ColorName::ViewFg, ThemeColor::new("#4c4f69", "#4c4f69")),
334 (ColorName::CardBg, ThemeColor::new("#ccd0da", "#ccd0da")),
335 (ColorName::CardFg, ThemeColor::new("#4c4f69", "#4c4f69")),
336 (
337 ColorName::ThumbnailBg,
338 ThemeColor::new("#ccd0da", "#ccd0da"),
339 ),
340 (
341 ColorName::ThumbnailFg,
342 ThemeColor::new("#4c4f69", "#4c4f69"),
343 ),
344 (ColorName::WarningBg, ThemeColor::new("#d20f39", "#d20f39")),
345 (ColorName::WarningFg, ThemeColor::new("#4c4f69", "#4c4f69")),
346 (ColorName::Warning, ThemeColor::new("#d20f39", "#d20f39")),
347 (ColorName::ErrorBg, ThemeColor::new("#d20f39", "#d20f39")),
348 (ColorName::ErrorFg, ThemeColor::new("#4c4f69", "#4c4f69")),
349 (ColorName::Error, ThemeColor::new("#d20f39", "#d20f39")),
350 (ColorName::SuccessBg, ThemeColor::new("#40a02b", "#40a02b")),
351 (ColorName::SuccessFg, ThemeColor::new("#4c4f69", "#4c4f69")),
352 (ColorName::Success, ThemeColor::new("#40a02b", "#40a02b")),
353 (
354 ColorName::DestructiveBg,
355 ThemeColor::new("#d20f39", "#d20f39"),
356 ),
357 (
358 ColorName::DestructiveFg,
359 ThemeColor::new("#dce0e8", "#dce0e8"),
360 ),
361 (
362 ColorName::Destructive,
363 ThemeColor::new("#d20f39", "#d20f39"),
364 ),
365 ],
366 ),
367 #[cfg(feature = "theme_catppuccin")]
368 Self::new_from_iter(
369 "Catppuccin Macchiato".into(),
370 [
371 (ColorName::Accent, ThemeColor::new("#c6a0f6", "#c6a0f6")),
372 (ColorName::AccentBg, ThemeColor::new("#c6a0f6", "#c6a0f6")),
373 (ColorName::AccentFg, ThemeColor::new("#181926", "#181926")),
374 (ColorName::WindowBg, ThemeColor::new("#24273a", "#24273a")),
375 (ColorName::WindowFg, ThemeColor::new("#cad3f5", "#cad3f5")),
376 (
377 ColorName::HeaderbarBg,
378 ThemeColor::new("#24273a", "#24273a"),
379 ),
380 (
381 ColorName::HeaderbarFg,
382 ThemeColor::new("#cad3f5", "#cad3f5"),
383 ),
384 (ColorName::PopoverBg, ThemeColor::new("#363a4f", "#363a4f")),
385 (ColorName::PopoverFg, ThemeColor::new("#cad3f5", "#cad3f5")),
386 (
387 ColorName::DialogBg,
388 ThemeColor::new("@popover_bg_color", "@popover_bg_color"),
389 ),
390 (
391 ColorName::DialogFg,
392 ThemeColor::new("@popover_fg_color", "@popover_fg_color"),
393 ),
394 (ColorName::SidebarBg, ThemeColor::new("#24273a", "#24273a")),
395 (ColorName::SidebarFg, ThemeColor::new("#cad3f5", "#cad3f5")),
396 (
397 ColorName::SidebarBackdrop,
398 ThemeColor::new("#24273a", "#24273a"),
399 ),
400 (
401 ColorName::SidebarShade,
402 ThemeColor::new("RGB(0 0 6 / 25%)", "RGB(0 0 6 / 25%)"),
403 ),
404 (
405 ColorName::SidebarBorder,
406 ThemeColor::new("RGB(0 0 6 / 36%)", "RGB(0 0 6 / 36%)"),
407 ),
408 (
409 ColorName::SecondarySidebarBg,
410 ThemeColor::new("@sidebar_backdrop_color", "@sidebar_backdrop_color"),
411 ),
412 (
413 ColorName::SecondarySidebarFg,
414 ThemeColor::new("#cad3f5", "#cad3f5"),
415 ),
416 (
417 ColorName::SecondarySidebarBackdrop,
418 ThemeColor::new("@sidebar_backdrop_color", "@sidebar_backdrop_color"),
419 ),
420 (
421 ColorName::SecondarySidebarShade,
422 ThemeColor::new("@sidebar_shade_color", "@sidebar_shade_color"),
423 ),
424 (
425 ColorName::SecondarySidebarBorder,
426 ThemeColor::new("@sidebar_border_color", "@sidebar_border_color"),
427 ),
428 (ColorName::ViewBg, ThemeColor::new("#24273a", "#24273a")),
429 (ColorName::ViewFg, ThemeColor::new("#cad3f5", "#cad3f5")),
430 (ColorName::CardBg, ThemeColor::new("#363a4f", "#363a4f")),
431 (ColorName::CardFg, ThemeColor::new("#cad3f5", "#cad3f5")),
432 (
433 ColorName::ThumbnailBg,
434 ThemeColor::new("#363a4f", "#363a4f"),
435 ),
436 (
437 ColorName::ThumbnailFg,
438 ThemeColor::new("#cad3f5", "#cad3f5"),
439 ),
440 (ColorName::WarningBg, ThemeColor::new("#ed8796", "#ed8796")),
441 (ColorName::WarningFg, ThemeColor::new("#cad3f5", "#cad3f5")),
442 (ColorName::Warning, ThemeColor::new("#ed8796", "#ed8796")),
443 (ColorName::ErrorBg, ThemeColor::new("#ed8796", "#ed8796")),
444 (ColorName::ErrorFg, ThemeColor::new("#cad3f5", "#cad3f5")),
445 (ColorName::Error, ThemeColor::new("#ed8796", "#ed8796")),
446 (ColorName::SuccessBg, ThemeColor::new("#a6da95", "#a6da95")),
447 (ColorName::SuccessFg, ThemeColor::new("#cad3f5", "#cad3f5")),
448 (ColorName::Success, ThemeColor::new("#a6da95", "#a6da95")),
449 (
450 ColorName::DestructiveBg,
451 ThemeColor::new("#ed8796", "#ed8796"),
452 ),
453 (
454 ColorName::DestructiveFg,
455 ThemeColor::new("#181926", "#181926"),
456 ),
457 (
458 ColorName::Destructive,
459 ThemeColor::new("#ed8796", "#ed8796"),
460 ),
461 ],
462 ),
463 #[cfg(feature = "theme_catppuccin")]
464 Self::new_from_iter(
465 "Catppuccin Mocha".into(),
466 [
467 (ColorName::Accent, ThemeColor::new("#cba6f7", "#cba6f7")),
468 (ColorName::AccentBg, ThemeColor::new("#cba6f7", "#cba6f7")),
469 (ColorName::AccentFg, ThemeColor::new("#11111b", "#11111b")),
470 (ColorName::WindowBg, ThemeColor::new("#1e1e2e", "#1e1e2e")),
471 (ColorName::WindowFg, ThemeColor::new("#cdd6f4", "#cdd6f4")),
472 (
473 ColorName::HeaderbarBg,
474 ThemeColor::new("#1e1e2e", "#1e1e2e"),
475 ),
476 (
477 ColorName::HeaderbarFg,
478 ThemeColor::new("#cdd6f4", "#cdd6f4"),
479 ),
480 (ColorName::PopoverBg, ThemeColor::new("#313244", "#313244")),
481 (ColorName::PopoverFg, ThemeColor::new("#cdd6f4", "#cdd6f4")),
482 (
483 ColorName::DialogBg,
484 ThemeColor::new("@popover_bg_color", "@popover_bg_color"),
485 ),
486 (
487 ColorName::DialogFg,
488 ThemeColor::new("@popover_fg_color", "@popover_fg_color"),
489 ),
490 (ColorName::SidebarBg, ThemeColor::new("#1e1e2e", "#1e1e2e")),
491 (ColorName::SidebarFg, ThemeColor::new("#cdd6f4", "#cdd6f4")),
492 (
493 ColorName::SidebarBackdrop,
494 ThemeColor::new("#1e1e2e", "#1e1e2e"),
495 ),
496 (
497 ColorName::SidebarShade,
498 ThemeColor::new("RGB(0 0 6 / 25%)", "RGB(0 0 6 / 25%)"),
499 ),
500 (
501 ColorName::SidebarBorder,
502 ThemeColor::new("RGB(0 0 6 / 36%)", "RGB(0 0 6 / 36%)"),
503 ),
504 (
505 ColorName::SecondarySidebarBg,
506 ThemeColor::new("@sidebar_backdrop_color", "@sidebar_backdrop_color"),
507 ),
508 (
509 ColorName::SecondarySidebarFg,
510 ThemeColor::new("#cdd6f4", "#cdd6f4"),
511 ),
512 (
513 ColorName::SecondarySidebarBackdrop,
514 ThemeColor::new("@sidebar_backdrop_color", "@sidebar_backdrop_color"),
515 ),
516 (
517 ColorName::SecondarySidebarShade,
518 ThemeColor::new("@sidebar_shade_color", "@sidebar_shade_color"),
519 ),
520 (
521 ColorName::SecondarySidebarBorder,
522 ThemeColor::new("@sidebar_border_color", "@sidebar_border_color"),
523 ),
524 (ColorName::ViewBg, ThemeColor::new("#1e1e2e", "#1e1e2e")),
525 (ColorName::ViewFg, ThemeColor::new("#cdd6f4", "#cdd6f4")),
526 (ColorName::CardBg, ThemeColor::new("#313244", "#313244")),
527 (ColorName::CardFg, ThemeColor::new("#cdd6f4", "#cdd6f4")),
528 (
529 ColorName::ThumbnailBg,
530 ThemeColor::new("#313244", "#313244"),
531 ),
532 (
533 ColorName::ThumbnailFg,
534 ThemeColor::new("#cdd6f4", "#cdd6f4"),
535 ),
536 (ColorName::WarningBg, ThemeColor::new("#f38ba8", "#f38ba8")),
537 (ColorName::WarningFg, ThemeColor::new("#cdd6f4", "#cdd6f4")),
538 (ColorName::Warning, ThemeColor::new("#f38ba8", "#f38ba8")),
539 (ColorName::ErrorBg, ThemeColor::new("#f38ba8", "#f38ba8")),
540 (ColorName::ErrorFg, ThemeColor::new("#cdd6f4", "#cdd6f4")),
541 (ColorName::Error, ThemeColor::new("#f38ba8", "#f38ba8")),
542 (ColorName::SuccessBg, ThemeColor::new("#a6e3a1", "#a6e3a1")),
543 (ColorName::SuccessFg, ThemeColor::new("#cdd6f4", "#cdd6f4")),
544 (ColorName::Success, ThemeColor::new("#a6e3a1", "#a6e3a1")),
545 (
546 ColorName::DestructiveBg,
547 ThemeColor::new("#f38ba8", "#f38ba8"),
548 ),
549 (
550 ColorName::DestructiveFg,
551 ThemeColor::new("#11111b", "#11111b"),
552 ),
553 (
554 ColorName::Destructive,
555 ThemeColor::new("#f38ba8", "#f38ba8"),
556 ),
557 ],
558 ),
559 #[cfg(feature = "theme_everforest")]
561 Self::new_from_iter(
562 "Everforest".into(),
563 [
564 (ColorName::AccentBg, ThemeColor::new("#3a94c5", "#7fbbb3")),
565 (
566 ColorName::AccentFg,
567 ThemeColor::new("#fffbef", "rgba(39, 46, 51, 0.87)"),
568 ),
569 (ColorName::Accent, ThemeColor::new("#3a94c5", "#7fbbb3")),
570 (
571 ColorName::DestructiveBg,
572 ThemeColor::new("#e67e80", "#f85552"),
573 ),
574 (
575 ColorName::DestructiveFg,
576 ThemeColor::new("rgba(39, 46, 51, 0.87)", "#fffbef"),
577 ),
578 (
579 ColorName::Destructive,
580 ThemeColor::new("#e67e80", "#f85552"),
581 ),
582 (ColorName::SuccessBg, ThemeColor::new("#a7c080", "#8da101")),
583 (
584 ColorName::SuccessFg,
585 ThemeColor::new("rgba(39, 46, 51, 0.87)", "#fffbef"),
586 ),
587 (ColorName::Success, ThemeColor::new("#a7c080", "#8da101")),
588 (ColorName::WarningBg, ThemeColor::new("#dbbc7f", "#dfa000")),
589 (
590 ColorName::WarningFg,
591 ThemeColor::new("rgba(39, 46, 51, 0.87)", "rgba(39, 46, 51, 0.87)"),
592 ),
593 (ColorName::Warning, ThemeColor::new("#dbbc7f", "#dfa000")),
594 (ColorName::ErrorBg, ThemeColor::new("#e67e80", "#f85552")),
595 (
596 ColorName::ErrorFg,
597 ThemeColor::new("rgba(39, 46, 51, 0.87)", "#fffbef"),
598 ),
599 (ColorName::Error, ThemeColor::new("#e67e80", "#f85552")),
600 (ColorName::WindowBg, ThemeColor::new("#fffbef", "#272e33")),
601 (
602 ColorName::WindowFg,
603 ThemeColor::new("rgba(39, 46, 51, 0.87)", "#fffbef"),
604 ),
605 (ColorName::ViewBg, ThemeColor::new("#e8e5d5", "#293136")),
606 (
607 ColorName::ViewFg,
608 ThemeColor::new("rgba(39, 46, 51, 0.87)", "#fffbef"),
609 ),
610 (
611 ColorName::HeaderbarBg,
612 ThemeColor::new("#fffbef", "#272e33"),
613 ),
614 (
615 ColorName::HeaderbarFg,
616 ThemeColor::new("rgba(39, 46, 51, 0.87)", "#fffbef"),
617 ),
618 (
619 ColorName::HeaderbarBorder,
620 ThemeColor::new("rgba(39, 46, 51, 0.12)", "rgba(255, 251, 239, 0.12)"),
621 ),
622 (
623 ColorName::HeaderbarBackdrop,
624 ThemeColor::new("#fffbef", "#272e33"),
625 ),
626 (
627 ColorName::HeaderbarShade,
628 ThemeColor::new("rgba(39, 46, 51, 0.12)", "rgba(255, 251, 239, 0.12)"),
629 ),
630 (ColorName::CardBg, ThemeColor::new("#e8e5d5", "#293136")),
631 (
632 ColorName::CardFg,
633 ThemeColor::new("rgba(39, 46, 51, 0.87)", "#fffbef"),
634 ),
635 (
636 ColorName::CardShade,
637 ThemeColor::new("rgba(39, 46, 51, 0.12)", "rgba(255, 251, 239, 0.12)"),
638 ),
639 (ColorName::DialogBg, ThemeColor::new("#e0dcc7", "#293136")),
640 (
641 ColorName::DialogFg,
642 ThemeColor::new("rgba(39, 46, 51, 0.87)", "#fffbef"),
643 ),
644 (ColorName::PopoverBg, ThemeColor::new("#fffbef", "#232a2e")),
645 (
646 ColorName::PopoverFg,
647 ThemeColor::new("rgba(39, 46, 51, 0.87)", "#fffbef"),
648 ),
649 (
650 ColorName::Shade,
651 ThemeColor::new("rgba(39, 46, 51, 0.12)", "rgba(255, 251, 239, 0.12)"),
652 ),
653 (
654 ColorName::SidebarBg,
655 ThemeColor::new("@popover_bg_color", "@popover_bg_color"),
656 ),
657 (
658 ColorName::SidebarFg,
659 ThemeColor::new("@popover_fg_color", "@popover_fg_color"),
660 ),
661 (
662 ColorName::SidebarShade,
663 ThemeColor::new("@popover_shade_color", "@popover_shade_color"),
664 ),
665 (
666 ColorName::SidebarBackdrop,
667 ThemeColor::new("@window_bg_color", "@window_bg_color"),
668 ),
669 (
670 ColorName::SecondarySidebarBg,
671 ThemeColor::new("@popover_bg_color", "@popover_bg_color"),
672 ),
673 (
674 ColorName::SecondarySidebarFg,
675 ThemeColor::new("@popover_fg_color", "@popover_fg_color"),
676 ),
677 (
678 ColorName::SecondarySidebarShade,
679 ThemeColor::new("@popover_shade_color", "@popover_shade_color"),
680 ),
681 (
682 ColorName::SecondarySidebarBackdrop,
683 ThemeColor::new("@window_bg_color", "@window_bg_color"),
684 ),
685 (
686 ColorName::ScrollbarOutline,
687 ThemeColor::new("rgba(39, 46, 51, 0.12)", "rgba(255, 251, 239, 0.12)"),
688 ),
689 (
690 ColorName::SidebarBorder,
691 ThemeColor::new("@scrollbar_outline_color", "@scrollbar_outline_color"),
692 ),
693 (
694 ColorName::SecondarySidebarBorder,
695 ThemeColor::new("@scrollbar_outline_color", "@scrollbar_outline_color"),
696 ),
697 ],
698 ),
699 ]
700 }
701}
702
703#[cfg(test)]
704mod tests {
705 #[cfg(feature = "serde")]
706 #[test]
707 fn deserialize_json_theme() {
708 use super::Theme;
709 use crate::named_colors::ColorName;
710
711 let theme: Theme = serde_json::from_str(
712 r###"{
713 "name": "Example",
714 "colors": {
715 "Accent": {
716 "light": "#ff0000",
717 "dark": "#aa0000"
718 }
719 }
720 }"###,
721 )
722 .unwrap();
723 assert_eq!(theme.colors.len(), 1);
724 assert_eq!(
725 theme
726 .colors
727 .get(&ColorName::Accent)
728 .unwrap()
729 .get(crate::color::ThemeColorVariant::Light),
730 "#ff0000"
731 );
732 }
733}