Skip to main content

material_colors/scheme/variant/
neutral.rs

1use crate::{
2    dynamic_color::{DynamicScheme, Variant},
3    hct::Hct,
4    palette::{Palette, TonalPalette},
5};
6
7pub struct SchemeNeutral {
8    pub scheme: DynamicScheme,
9}
10
11impl SchemeNeutral {
12    pub fn new(source_color_hct: Hct, is_dark: bool, contrast_level: Option<f64>) -> Self {
13        Self {
14            scheme: DynamicScheme::new(
15                source_color_hct.into(),
16                None,
17                Variant::Neutral,
18                is_dark,
19                contrast_level,
20                Self::palette(&source_color_hct, &Palette::Primary),
21                Self::palette(&source_color_hct, &Palette::Secondary),
22                Self::palette(&source_color_hct, &Palette::Tertiary),
23                Self::palette(&source_color_hct, &Palette::Neutral),
24                Self::palette(&source_color_hct, &Palette::NeutralVariant),
25                None,
26            ),
27        }
28    }
29
30    pub fn palette(source_color_hct: &Hct, variant: &Palette) -> TonalPalette {
31        match variant {
32            Palette::Primary => TonalPalette::of(source_color_hct.get_hue(), 12.0),
33            Palette::Secondary => TonalPalette::of(source_color_hct.get_hue(), 8.0),
34            Palette::Tertiary => TonalPalette::of(source_color_hct.get_hue(), 16.0),
35            Palette::Error => TonalPalette::of(25.0, 84.0),
36            Palette::Neutral | Palette::NeutralVariant => {
37                TonalPalette::of(source_color_hct.get_hue(), 2.0)
38            }
39        }
40    }
41}