Add standardized colors to Theme

This commit is contained in:
Bu5hm4nn 2024-03-28 21:07:14 -06:00
parent 233d970596
commit b60358357e
3 changed files with 214 additions and 9 deletions

View File

@ -136,15 +136,15 @@ fn unixtime_to_string(timestamp: u64) -> String {
fn manage_style(theme: &Theme, style: &mut Style) {
let (bg_color, text_color, frame_color) = if theme.dark_mode {
(
Color32::from_gray(0x0A),
Color32::from_gray(0xD4),
Color32::from_gray(0x73),
theme.neutral_950(),
theme.neutral_300(),
theme.neutral_500(),
)
} else {
(
Color32::from_gray(0xF5),
Color32::from_gray(0x26),
Color32::from_gray(0xA3),
theme.neutral_100(),
theme.neutral_800(),
theme.neutral_400(),
)
};
style.spacing.button_padding = vec2(16.0, 4.0);
@ -172,9 +172,9 @@ fn manage_style(theme: &Theme, style: &mut Style) {
fn decline_style(theme: &Theme, style: &mut Style) {
let (bg_color, text_color) = if theme.dark_mode {
(Color32::WHITE, Color32::from_gray(0x26))
(Color32::WHITE, theme.neutral_800())
} else {
(Color32::from_gray(0x26), Color32::WHITE)
(theme.neutral_800(), Color32::WHITE)
};
style.spacing.button_padding = vec2(16.0, 4.0);
style.visuals.widgets.noninteractive.weak_bg_fill = bg_color;

View File

@ -16,6 +16,68 @@ impl ThemeDef for DefaultTheme {
"Default"
}
// Palette
fn neutral_50() -> Color32 {
Color32::from_rgb(0xfa, 0xfa, 0xfa)
} // #fafafa
fn neutral_100() -> Color32 {
Color32::from_rgb(0xf5, 0xf5, 0xf5)
} // #f5f5f5
fn neutral_200() -> Color32 {
Color32::from_rgb(0xe5, 0xe5, 0xe5)
} // #e5e5e5
fn neutral_300() -> Color32 {
Color32::from_rgb(0xd4, 0xd4, 0xd4)
} // #d4d4d4
fn neutral_400() -> Color32 {
Color32::from_rgb(0xa3, 0xa3, 0xa3)
} // #a3a3a3
fn neutral_500() -> Color32 {
Color32::from_rgb(0x73, 0x73, 0x73)
} // #737373
fn neutral_600() -> Color32 {
Color32::from_rgb(0x52, 0x52, 0x52)
} // #525252
fn neutral_700() -> Color32 {
Color32::from_rgb(0x40, 0x40, 0x40)
} // #404040
fn neutral_800() -> Color32 {
Color32::from_rgb(0x26, 0x26, 0x26)
} // #262626
fn neutral_900() -> Color32 {
Color32::from_rgb(0x17, 0x17, 0x17)
} // #171717
fn neutral_950() -> Color32 {
Color32::from_rgb(0x0a, 0x0a, 0x0a)
} // #0a0a0a
fn accent_dark() -> Color32 {
Color32::from_rgb(0x74, 0xa7, 0xcc)
} // #74A7CC
fn accent_dark_b20() -> Color32 {
Color32::from_rgb(0x5D, 0x86, 0xa3)
}
fn accent_dark_w20() -> Color32 {
Color32::from_rgb(0x90, 0xb9, 0xd6)
}
fn accent_light() -> Color32 {
Color32::from_rgb(0x55, 0x7a, 0x95)
} // #557A95
fn accent_light_b20() -> Color32 {
Color32::from_rgb(0x45, 0x62, 0x77)
}
fn accent_light_w20() -> Color32 {
Color32::from_rgb(0x77, 0x95, 0xAA)
}
fn red_500() -> Color32 {
Color32::from_rgb(0xef, 0x44, 0x44)
} // #EF4444
fn lime_500() -> Color32 {
Color32::from_rgb(0x22, 0xc5, 0x5e)
} // #22C55E
fn amber_400() -> Color32 {
Color32::from_rgb(0xfb, 0xbf, 0x24)
} // #FBBF24
fn accent_color(dark_mode: bool) -> Color32 {
if dark_mode {
Color32::from_rgb(116, 167, 204)

View File

@ -67,12 +67,133 @@ macro_rules! theme_dispatch {
}
}
#[allow(dead_code)]
impl Theme {
#[allow(dead_code)]
pub fn name(&self) -> &'static str {
self.variant.name()
}
// Palette
pub fn neutral_50(&self) -> Color32 {
match self.variant {
$( $variant => $class::neutral_50(), )+
}
}
pub fn neutral_100(&self) -> Color32 {
match self.variant {
$( $variant => $class::neutral_100(), )+
}
}
pub fn neutral_200(&self) -> Color32 {
match self.variant {
$( $variant => $class::neutral_200(), )+
}
}
pub fn neutral_300(&self) -> Color32 {
match self.variant {
$( $variant => $class::neutral_300(), )+
}
}
pub fn neutral_400(&self) -> Color32 {
match self.variant {
$( $variant => $class::neutral_400(), )+
}
}
pub fn neutral_500(&self) -> Color32 {
match self.variant {
$( $variant => $class::neutral_500(), )+
}
}
pub fn neutral_600(&self) -> Color32 {
match self.variant {
$( $variant => $class::neutral_600(), )+
}
}
pub fn neutral_700(&self) -> Color32 {
match self.variant {
$( $variant => $class::neutral_700(), )+
}
}
pub fn neutral_800(&self) -> Color32 {
match self.variant {
$( $variant => $class::neutral_800(), )+
}
}
pub fn neutral_900(&self) -> Color32 {
match self.variant {
$( $variant => $class::neutral_900(), )+
}
}
pub fn neutral_950(&self) -> Color32 {
match self.variant {
$( $variant => $class::neutral_950(), )+
}
}
pub fn accent_dark(&self) -> Color32 {
match self.variant {
$( $variant => $class::accent_dark(), )+
}
}
pub fn accent_dark_b20(&self) -> Color32 {
match self.variant {
$( $variant => $class::accent_dark_b20(), )+
}
}
pub fn accent_dark_w20(&self) -> Color32 {
match self.variant {
$( $variant => $class::accent_dark_w20(), )+
}
}
pub fn accent_light(&self) -> Color32 {
match self.variant {
$( $variant => $class::accent_light(), )+
}
}
pub fn accent_light_b20(&self) -> Color32 {
match self.variant {
$( $variant => $class::accent_light_b20(), )+
}
}
pub fn accent_light_w20(&self) -> Color32 {
match self.variant {
$( $variant => $class::accent_light_w20(), )+
}
}
pub fn red_500(&self) -> Color32 {
match self.variant {
$( $variant => $class::red_500(), )+
}
}
pub fn lime_500(&self) -> Color32 {
match self.variant {
$( $variant => $class::lime_500(), )+
}
}
pub fn amber_400(&self) -> Color32 {
match self.variant {
$( $variant => $class::amber_400(), )+
}
}
pub fn accent_color(&self) -> Color32 {
match self.variant {
$( $variant => $class::accent_color(self.dark_mode), )+
@ -381,6 +502,28 @@ pub trait ThemeDef: Send + Sync {
// User facing name
fn name() -> &'static str;
// Palette
fn neutral_50() -> Color32;
fn neutral_100() -> Color32;
fn neutral_200() -> Color32;
fn neutral_300() -> Color32;
fn neutral_400() -> Color32;
fn neutral_500() -> Color32;
fn neutral_600() -> Color32;
fn neutral_700() -> Color32;
fn neutral_800() -> Color32;
fn neutral_900() -> Color32;
fn neutral_950() -> Color32;
fn accent_dark() -> Color32;
fn accent_dark_b20() -> Color32; // overlay 20% black
fn accent_dark_w20() -> Color32; // overlay 20% white
fn accent_light() -> Color32;
fn accent_light_b20() -> Color32; // overlay 20% black
fn accent_light_w20() -> Color32; // overlay 20% white
fn red_500() -> Color32;
fn lime_500() -> Color32;
fn amber_400() -> Color32;
// Used for strokes, lines, and text in various places
fn accent_color(dark_mode: bool) -> Color32;