forked from GyulyVGC/sniffnet
-
Notifications
You must be signed in to change notification settings - Fork 0
/
custom_styles.rs
116 lines (105 loc) · 3.63 KB
/
custom_styles.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
mod dracula;
mod gruvbox;
mod nord;
mod solarized;
use std::fmt;
use iced::Color;
use serde::{Deserialize, Serialize};
use super::palette::Palette;
/// Custom style with any relevant metadata
pub struct CustomPalette {
/// Color scheme's palette
palette: Palette,
/// Extra colors such as the favorites star
extension: PaletteExtension,
}
/// Extension color for themes.
pub struct PaletteExtension {
/// Color of favorites star
pub starred: Color,
/// Badge/logo alpha
pub chart_badge_alpha: f32,
/// Round borders alpha
pub round_borders_alpha: f32,
/// Round containers alpha
pub round_containers_alpha: f32,
}
/// Built in extra styles
#[derive(Clone, Copy, Serialize, Deserialize, Debug, Hash, PartialEq)]
#[serde(tag = "custom")]
pub enum ExtraStyles {
Dracula,
GruvboxDark,
GruvboxLight,
NordLight,
NordDark,
SolarizedDark,
SolarizedLight,
}
impl ExtraStyles {
/// [`Palette`] of the [`ExtraStyles`] variant
#[inline]
pub fn to_palette(self) -> Palette {
match self {
ExtraStyles::Dracula => dracula::dracula().palette,
ExtraStyles::GruvboxDark => gruvbox::gruvbox_dark().palette,
ExtraStyles::GruvboxLight => gruvbox::gruvbox_light().palette,
ExtraStyles::NordLight => nord::nord_day().palette,
ExtraStyles::NordDark => nord::nord_night().palette,
ExtraStyles::SolarizedDark => solarized::solarized_dark().palette,
ExtraStyles::SolarizedLight => solarized::solarized_light().palette,
}
}
/// Extension colors for the current [`ExtraStyles`] variant
#[inline]
pub fn to_ext(self) -> PaletteExtension {
match self {
ExtraStyles::Dracula => dracula::dracula().extension,
ExtraStyles::GruvboxDark => gruvbox::gruvbox_dark().extension,
ExtraStyles::GruvboxLight => gruvbox::gruvbox_light().extension,
ExtraStyles::NordLight => nord::nord_day().extension,
ExtraStyles::NordDark => nord::nord_night().extension,
ExtraStyles::SolarizedDark => solarized::solarized_dark().extension,
ExtraStyles::SolarizedLight => solarized::solarized_light().extension,
}
}
/// Theme is a night/dark style
#[inline]
pub const fn is_nightly(self) -> bool {
match self {
ExtraStyles::Dracula
| ExtraStyles::GruvboxDark
| ExtraStyles::NordDark
| ExtraStyles::SolarizedDark => true,
ExtraStyles::GruvboxLight | ExtraStyles::NordLight | ExtraStyles::SolarizedLight => {
false
}
}
}
/// Slice of all implemented custom styles
#[inline]
pub const fn all_styles() -> &'static [Self] {
&[
ExtraStyles::Dracula,
ExtraStyles::GruvboxDark,
ExtraStyles::GruvboxLight,
ExtraStyles::NordLight,
ExtraStyles::NordDark,
ExtraStyles::SolarizedDark,
ExtraStyles::SolarizedLight,
]
}
}
impl fmt::Display for ExtraStyles {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match *self {
ExtraStyles::Dracula => write!(f, "Dracula"),
ExtraStyles::GruvboxDark => write!(f, "Gruvbox (Night)"),
ExtraStyles::GruvboxLight => write!(f, "Gruvbox (Day)"),
ExtraStyles::NordLight => write!(f, "Nord (Day)"),
ExtraStyles::NordDark => write!(f, "Nord (Night)"),
ExtraStyles::SolarizedLight => write!(f, "Solarized (Day)"),
ExtraStyles::SolarizedDark => write!(f, "Solarized (Night)"),
}
}
}