material_colors/scheme/variant/
neutral.rs1use 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}