Skip to content

Commit 44ac6ea

Browse files
author
Johann Dirry
committed
adding a factory method for creating dynamic color schemes
1 parent 18c453d commit 44ac6ea

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
#if WPF
2+
using System.Windows.Media;
3+
4+
namespace MaterialColorUtilities;
5+
6+
/// <summary>
7+
/// Factory for creating a dynamic color scheme.
8+
/// </summary>
9+
public static class DynamicSchemeFactory
10+
{
11+
/// <summary>
12+
/// Factory method for creating a dynamic color scheme.
13+
/// </summary>
14+
/// <remarks>
15+
/// The colors are optional. If any of them are null,
16+
/// the color will be automatically generated based on the source color.
17+
/// </remarks>
18+
public static DynamicScheme Create(
19+
Color sourceColor,
20+
Variant variant,
21+
bool isDark,
22+
double contrastLevel,
23+
Platform platform,
24+
SpecVersion specVersion,
25+
Color? primary,
26+
Color? secondary,
27+
Color? tertiary,
28+
Color? neutral,
29+
Color? neutralVariant,
30+
Color? error)
31+
{
32+
var sourceColorHct = Hct.FromInt(ColorUtils.ArgbFromColor(sourceColor));
33+
34+
TonalPalette primaryPalette = primary == null
35+
? ColorSpecs.Get(specVersion).GetPrimaryPalette(variant, sourceColorHct, isDark, platform, contrastLevel)
36+
: ColorSpecs.Get(specVersion).GetPrimaryPalette(variant, Hct.FromInt(ColorUtils.ArgbFromColor(primary.Value)), isDark, platform, contrastLevel);
37+
38+
TonalPalette secondaryPalette = secondary == null
39+
? ColorSpecs.Get(specVersion).GetSecondaryPalette(variant, sourceColorHct, isDark, platform, contrastLevel)
40+
: ColorSpecs.Get(specVersion).GetSecondaryPalette(variant, Hct.FromInt(ColorUtils.ArgbFromColor(secondary.Value)), isDark, platform, contrastLevel);
41+
42+
TonalPalette tertiaryPalette = tertiary == null
43+
? ColorSpecs.Get(specVersion).GetTertiaryPalette(variant, sourceColorHct, isDark, platform, contrastLevel)
44+
: ColorSpecs.Get(specVersion).GetTertiaryPalette(variant, Hct.FromInt(ColorUtils.ArgbFromColor(tertiary.Value)), isDark, platform, contrastLevel);
45+
46+
TonalPalette neutralPalette = neutral == null
47+
? ColorSpecs.Get(specVersion).GetNeutralPalette(variant, sourceColorHct, isDark, platform, contrastLevel)
48+
: ColorSpecs.Get(specVersion).GetNeutralPalette(variant, Hct.FromInt(ColorUtils.ArgbFromColor(neutral.Value)), isDark, platform, contrastLevel);
49+
50+
TonalPalette neutralVariantPalette = neutralVariant == null
51+
? ColorSpecs.Get(specVersion).GetNeutralVariantPalette(variant, sourceColorHct, isDark, platform, contrastLevel)
52+
: ColorSpecs.Get(specVersion).GetNeutralVariantPalette(variant, Hct.FromInt(ColorUtils.ArgbFromColor(neutralVariant.Value)), isDark, platform, contrastLevel);
53+
54+
TonalPalette? errorPalette = error == null
55+
? ColorSpecs.Get(specVersion).GetErrorPalette(variant, sourceColorHct, isDark, platform, contrastLevel)
56+
: ColorSpecs.Get(specVersion).GetErrorPalette(variant, Hct.FromInt(ColorUtils.ArgbFromColor(error.Value)), isDark, platform, contrastLevel);
57+
58+
return new DynamicScheme(
59+
sourceColorHct,
60+
variant,
61+
isDark,
62+
contrastLevel,
63+
platform,
64+
specVersion,
65+
primaryPalette,
66+
secondaryPalette,
67+
tertiaryPalette,
68+
neutralPalette,
69+
neutralVariantPalette,
70+
errorPalette);
71+
}
72+
}
73+
#endif

0 commit comments

Comments
 (0)