Skip to content

Commit 672004d

Browse files
Material Engcopybara-github
authored andcommitted
Updated libraries with new schemes.
PiperOrigin-RevId: 542530597
1 parent cbfeaf3 commit 672004d

30 files changed

+3269
-9
lines changed

cpp/cam/hct.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,11 @@ class Hct {
113113
*/
114114
void set_tone(double new_tone);
115115

116+
/**
117+
* For using HCT as a key in a ordered map.
118+
*/
119+
bool operator<(const Hct& a) const { return hue_ < a.hue_; }
120+
116121
private:
117122
/**
118123
* Sets the Hct object to represent an sRGB color.

cpp/cam/viewing_conditions.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,12 @@ ViewingConditions CreateViewingConditions(const double white_point[3],
9494
return viewingConditions;
9595
}
9696

97+
ViewingConditions DefaultWithBackgroundLstar(const double background_lstar) {
98+
return CreateViewingConditions(kWhitePointD65,
99+
(200.0 / kPi * YFromLstar(50.0) / 100.0),
100+
background_lstar, 2.0, 0);
101+
}
102+
97103
void PrintDefaultFrame() {
98104
ViewingConditions frame = CreateViewingConditions(
99105
kWhitePointD65, (200.0 / kPi * YFromLstar(50.0) / 100.0), 50.0, 2.0, 0);

cpp/cam/viewing_conditions.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ ViewingConditions CreateViewingConditions(const double white_point[3],
4444
const double surround,
4545
const bool discounting_illuminant);
4646

47+
ViewingConditions DefaultWithBackgroundLstar(const double background_lstar);
48+
4749
static const ViewingConditions kDefaultViewingConditions = (ViewingConditions){
4850
11.725676537,
4951
50.000000000,

cpp/dynamiccolor/material_dynamic_colors.cc

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -113,12 +113,7 @@ Hct InViewingConditions(Hct hct, ViewingConditions vc) {
113113
}
114114

115115
ViewingConditions ViewingConditionsForAlbers(const DynamicScheme& scheme) {
116-
return CreateViewingConditions(
117-
/*white_point=*/new double[]{95.047, 100.0, 108.883},
118-
/*adapting_luminance=*/-1.0,
119-
/*background_lstar=*/scheme.is_dark ? 30.0 : 80.0,
120-
/*surround=*/2.0,
121-
/*discounting_illuminant=*/false);
116+
return DefaultWithBackgroundLstar(scheme.is_dark ? 30.0 : 80.0);
122117
}
123118

124119
double PerformAlbers(Hct pre_albers, const DynamicScheme& scheme) {

cpp/scheme/scheme_content.cc

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/*
2+
* Copyright 2023 Google LLC
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
#include "cpp/scheme/scheme_content.h"
18+
19+
#include "cpp/cam/hct.h"
20+
#include "cpp/dislike/dislike.h"
21+
#include "cpp/palettes/tones.h"
22+
#include "cpp/scheme/dynamic_scheme.h"
23+
#include "cpp/scheme/variant.h"
24+
#include "cpp/temperature/temperature_cache.h"
25+
26+
namespace material_color_utilities {
27+
28+
SchemeContent::SchemeContent(Hct set_source_color_hct, bool set_is_dark,
29+
double set_contrast_level)
30+
: DynamicScheme(
31+
/*source_color_argb:*/ set_source_color_hct.ToInt(),
32+
/*variant:*/ Variant::kContent,
33+
/*contrast_level:*/ set_contrast_level,
34+
/*is_dark:*/ set_is_dark,
35+
/*primary_palette:*/
36+
TonalPalette(set_source_color_hct.get_hue(),
37+
set_source_color_hct.get_chroma()),
38+
/*secondary_palette:*/
39+
TonalPalette(set_source_color_hct.get_hue(),
40+
fmax(set_source_color_hct.get_chroma() - 32.0,
41+
set_source_color_hct.get_chroma() * 0.5)),
42+
/*tertiary_palette:*/
43+
TonalPalette(FixIfDisliked(TemperatureCache(set_source_color_hct)
44+
.GetAnalogousColors(3, 6)
45+
.at(2))),
46+
/*neutral_palette:*/
47+
TonalPalette(set_source_color_hct.get_hue(),
48+
set_source_color_hct.get_chroma() / 8.0),
49+
/*neutral_variant_palette:*/
50+
TonalPalette(set_source_color_hct.get_hue(),
51+
set_source_color_hct.get_chroma() / 8.0 + 4.0)) {}
52+
53+
SchemeContent::SchemeContent(Hct set_source_color_hct, bool set_is_dark)
54+
: SchemeContent::SchemeContent(set_source_color_hct, set_is_dark, 0.0) {}
55+
56+
} // namespace material_color_utilities

cpp/scheme/scheme_content.h

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
* Copyright 2023 Google LLC
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
#ifndef CPP_SCHEME_SCHEME_CONTENT_H_
18+
#define CPP_SCHEME_SCHEME_CONTENT_H_
19+
20+
#include "cpp/cam/hct.h"
21+
#include "cpp/scheme/dynamic_scheme.h"
22+
23+
namespace material_color_utilities {
24+
25+
struct SchemeContent : public DynamicScheme {
26+
SchemeContent(Hct set_source_color_hct, bool set_is_dark,
27+
double set_contrast_level);
28+
SchemeContent(Hct set_source_color_hct, bool set_is_dark);
29+
};
30+
31+
} // namespace material_color_utilities
32+
33+
#endif // CPP_SCHEME_SCHEME_CONTENT_H_

cpp/scheme/scheme_content_test.cc

Lines changed: 231 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,231 @@
1+
/*
2+
* Copyright 2023 Google LLC
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
#include "cpp/scheme/scheme_content.h"
18+
19+
#include "testing/base/public/gunit.h"
20+
#include "cpp/cam/hct.h"
21+
#include "cpp/dynamiccolor/material_dynamic_colors.h"
22+
23+
namespace material_color_utilities {
24+
25+
namespace {
26+
TEST(SchemeContentTest, KeyColors) {
27+
SchemeContent scheme = SchemeContent(Hct(0xff0000ff), false, 0.0);
28+
EXPECT_EQ(MaterialDynamicColors::PrimaryPaletteKeyColor().GetArgb(scheme),
29+
0xff080cff);
30+
EXPECT_EQ(MaterialDynamicColors::SecondaryPaletteKeyColor().GetArgb(scheme),
31+
0xff656dd3);
32+
EXPECT_EQ(MaterialDynamicColors::TertiaryPaletteKeyColor().GetArgb(scheme),
33+
0xff81009f);
34+
EXPECT_EQ(MaterialDynamicColors::NeutralPaletteKeyColor().GetArgb(scheme),
35+
0xff767684);
36+
EXPECT_EQ(
37+
MaterialDynamicColors::NeutralVariantPaletteKeyColor().GetArgb(scheme),
38+
0xff757589);
39+
}
40+
41+
TEST(SchemeContentTest, lightTheme_minContrast_primary) {
42+
SchemeContent scheme = SchemeContent(Hct(0xff0000ff), false, -1.0);
43+
EXPECT_EQ(MaterialDynamicColors::Primary().GetArgb(scheme), 0xff5660ff);
44+
}
45+
46+
TEST(SchemeContentTest, lightTheme_standardContrast_primary) {
47+
SchemeContent scheme = SchemeContent(Hct(0xff0000ff), false, 0.0);
48+
EXPECT_EQ(MaterialDynamicColors::Primary().GetArgb(scheme), 0xff0001c3);
49+
}
50+
51+
TEST(SchemeContentTest, lightTheme_maxContrast_primary) {
52+
SchemeContent scheme = SchemeContent(Hct(0xff0000ff), false, 1.0);
53+
EXPECT_EQ(MaterialDynamicColors::Primary().GetArgb(scheme), 0xff000181);
54+
}
55+
56+
TEST(SchemeContentTest, lightTheme_minContrast_primaryContainer) {
57+
SchemeContent scheme = SchemeContent(Hct(0xff0000ff), false, -1.0);
58+
EXPECT_EQ(MaterialDynamicColors::PrimaryContainer().GetArgb(scheme),
59+
0xffd5d6ff);
60+
}
61+
62+
TEST(SchemeContentTest, lightTheme_standardContrast_primaryContainer) {
63+
SchemeContent scheme = SchemeContent(Hct(0xff0000ff), false, 0.0);
64+
EXPECT_EQ(MaterialDynamicColors::PrimaryContainer().GetArgb(scheme),
65+
0xff2d36ff);
66+
}
67+
68+
TEST(SchemeContentTest, lightTheme_maxContrast_primaryContainer) {
69+
SchemeContent scheme = SchemeContent(Hct(0xff0000ff), false, 1.0);
70+
EXPECT_EQ(MaterialDynamicColors::PrimaryContainer().GetArgb(scheme),
71+
0xff0000e3);
72+
}
73+
74+
TEST(SchemeContentTest, lightTheme_minContrast_tertiaryContainer) {
75+
SchemeContent scheme = SchemeContent(Hct(0xff0000ff), false, -1.0);
76+
EXPECT_EQ(MaterialDynamicColors::TertiaryContainer().GetArgb(scheme),
77+
0xfffac9ff);
78+
}
79+
80+
TEST(SchemeContentTest, lightTheme_standardContrast_tertiaryContainer) {
81+
SchemeContent scheme = SchemeContent(Hct(0xff0000ff), false, 0.0);
82+
EXPECT_EQ(MaterialDynamicColors::TertiaryContainer().GetArgb(scheme),
83+
0xff9221af);
84+
}
85+
86+
TEST(SchemeContentTest, lightTheme_maxContrast_tertiaryContainer) {
87+
SchemeContent scheme = SchemeContent(Hct(0xff0000ff), false, 1.0);
88+
EXPECT_EQ(MaterialDynamicColors::TertiaryContainer().GetArgb(scheme),
89+
0xff73008e);
90+
}
91+
92+
TEST(SchemeContentTest,
93+
lightTheme_minContrast_objectionableTertiaryContainerLightens) {
94+
SchemeContent scheme = SchemeContent(Hct(0xff850096), false, -1.0);
95+
EXPECT_EQ(MaterialDynamicColors::TertiaryContainer().GetArgb(scheme),
96+
0xffffccd7);
97+
}
98+
99+
TEST(SchemeContentTest,
100+
lightTheme_standardContrast_objectionableTertiaryContainerLightens) {
101+
SchemeContent scheme = SchemeContent(Hct(0xff850096), false, 0.0);
102+
EXPECT_EQ(MaterialDynamicColors::TertiaryContainer().GetArgb(scheme),
103+
0xffac1b57);
104+
}
105+
106+
TEST(SchemeContentTest,
107+
lightTheme_maxContrast_objectionableTertiaryContainerDarkens) {
108+
SchemeContent scheme = SchemeContent(Hct(0xff850096), false, 1.0);
109+
EXPECT_EQ(MaterialDynamicColors::TertiaryContainer().GetArgb(scheme),
110+
0xff870040);
111+
}
112+
113+
TEST(SchemeContentTest, lightTheme_minContrast_onPrimaryContainer) {
114+
SchemeContent scheme = SchemeContent(Hct(0xff0000ff), false, -1.0);
115+
EXPECT_EQ(MaterialDynamicColors::OnPrimaryContainer().GetArgb(scheme),
116+
0xff333dff);
117+
}
118+
119+
TEST(SchemeContentTest, lightTheme_standardContrast_onPrimaryContainer) {
120+
SchemeContent scheme = SchemeContent(Hct(0xff0000ff), false, 0.0);
121+
EXPECT_EQ(MaterialDynamicColors::OnPrimaryContainer().GetArgb(scheme),
122+
0xffffffff);
123+
}
124+
125+
TEST(SchemeContentTest, lightTheme_maxContrast_onPrimaryContainer) {
126+
SchemeContent scheme = SchemeContent(Hct(0xff0000ff), false, 1.0);
127+
EXPECT_EQ(MaterialDynamicColors::OnPrimaryContainer().GetArgb(scheme),
128+
0xffffffff);
129+
}
130+
131+
TEST(SchemeContentTest, lightTheme_minContrast_surface) {
132+
SchemeContent scheme = SchemeContent(Hct(0xff0000ff), false, -1);
133+
EXPECT_EQ(MaterialDynamicColors::Surface().GetArgb(scheme), 0xfffbf8ff);
134+
}
135+
136+
TEST(SchemeContentTest, lightTheme_standardContrast_surface) {
137+
SchemeContent scheme = SchemeContent(Hct(0xff0000ff), false, 0.0);
138+
EXPECT_EQ(MaterialDynamicColors::Surface().GetArgb(scheme), 0xfffbf8ff);
139+
}
140+
141+
TEST(SchemeContentTest, lightTheme_maxContrast_surface) {
142+
SchemeContent scheme = SchemeContent(Hct(0xff0000ff), false, 1.0);
143+
EXPECT_EQ(MaterialDynamicColors::Surface().GetArgb(scheme), 0xfffbf8ff);
144+
}
145+
146+
TEST(SchemeContentTest, darkTheme_minContrast_primary) {
147+
SchemeContent scheme = SchemeContent(Hct(0xff0000ff), true, -1.0);
148+
EXPECT_EQ(MaterialDynamicColors::Primary().GetArgb(scheme), 0xff7c84ff);
149+
}
150+
151+
TEST(SchemeContentTest, darkTheme_standardContrast_primary) {
152+
SchemeContent scheme = SchemeContent(Hct(0xff0000ff), true, 0.0);
153+
EXPECT_EQ(MaterialDynamicColors::Primary().GetArgb(scheme), 0xffbec2ff);
154+
}
155+
156+
TEST(SchemeContentTest, darkTheme_maxContrast_primary) {
157+
SchemeContent scheme = SchemeContent(Hct(0xff0000ff), true, 1.0);
158+
EXPECT_EQ(MaterialDynamicColors::Primary().GetArgb(scheme), 0xfffdf9ff);
159+
}
160+
161+
TEST(SchemeContentTest, darkTheme_minContrast_primaryContainer) {
162+
SchemeContent scheme = SchemeContent(Hct(0xff0000ff), true, -1.0);
163+
EXPECT_EQ(MaterialDynamicColors::PrimaryContainer().GetArgb(scheme),
164+
0xff0001c9);
165+
}
166+
167+
TEST(SchemeContentTest, darkTheme_standardContrast_primaryContainer) {
168+
SchemeContent scheme = SchemeContent(Hct(0xff0000ff), true, 0.0);
169+
EXPECT_EQ(MaterialDynamicColors::PrimaryContainer().GetArgb(scheme),
170+
0xff0000e6);
171+
}
172+
173+
TEST(SchemeContentTest, darkTheme_maxContrast_primaryContainer) {
174+
SchemeContent scheme = SchemeContent(Hct(0xff0000ff), true, 1.0);
175+
EXPECT_EQ(MaterialDynamicColors::PrimaryContainer().GetArgb(scheme),
176+
0xffc4c6ff);
177+
}
178+
179+
TEST(SchemeContentTest, darkTheme_minContrast_onPrimaryContainer) {
180+
SchemeContent scheme = SchemeContent(Hct(0xff0000ff), true, -1.0);
181+
EXPECT_EQ(MaterialDynamicColors::OnPrimaryContainer().GetArgb(scheme),
182+
0xff949bff);
183+
}
184+
185+
TEST(SchemeContentTest, darkTheme_standardContrast_onPrimaryContainer) {
186+
SchemeContent scheme = SchemeContent(Hct(0xff0000ff), true, 0.0);
187+
EXPECT_EQ(MaterialDynamicColors::OnPrimaryContainer().GetArgb(scheme),
188+
0xffd7d8ff);
189+
}
190+
191+
TEST(SchemeContentTest, darkTheme_maxContrast_onPrimaryContainer) {
192+
SchemeContent scheme = SchemeContent(Hct(0xff0000ff), true, 1.0);
193+
EXPECT_EQ(MaterialDynamicColors::OnPrimaryContainer().GetArgb(scheme),
194+
0xff000000);
195+
}
196+
197+
TEST(SchemeContentTest, darkTheme_minContrast_onTertiaryContainer) {
198+
SchemeContent scheme = SchemeContent(Hct(0xff0000ff), true, -1.0);
199+
EXPECT_EQ(MaterialDynamicColors::OnTertiaryContainer().GetArgb(scheme),
200+
0xffe577ff);
201+
}
202+
203+
TEST(SchemeContentTest, darkTheme_standardContrast_onTertiaryContainer) {
204+
SchemeContent scheme = SchemeContent(Hct(0xff0000ff), true, 0.0);
205+
EXPECT_EQ(MaterialDynamicColors::OnTertiaryContainer().GetArgb(scheme),
206+
0xfffbccff);
207+
}
208+
209+
TEST(SchemeContentTest, darkTheme_maxContrast_onTertiaryContainer) {
210+
SchemeContent scheme = SchemeContent(Hct(0xff0000ff), true, 1.0);
211+
EXPECT_EQ(MaterialDynamicColors::OnTertiaryContainer().GetArgb(scheme),
212+
0xff000000);
213+
}
214+
215+
TEST(SchemeContentTest, darkTheme_minContrast_surface) {
216+
SchemeContent scheme = SchemeContent(Hct(0xff0000ff), true, -1.0);
217+
EXPECT_EQ(MaterialDynamicColors::Surface().GetArgb(scheme), 0xff12121d);
218+
}
219+
220+
TEST(SchemeContentTest, darkTheme_standardContrast_surface) {
221+
SchemeContent scheme = SchemeContent(Hct(0xff0000ff), true, 0.0);
222+
EXPECT_EQ(MaterialDynamicColors::Surface().GetArgb(scheme), 0xff12121d);
223+
}
224+
225+
TEST(SchemeContentTest, darkTheme_maxContrast_surface) {
226+
SchemeContent scheme = SchemeContent(Hct(0xff0000ff), true, 1.0);
227+
EXPECT_EQ(MaterialDynamicColors::Surface().GetArgb(scheme), 0xff12121d);
228+
}
229+
230+
} // namespace
231+
} // namespace material_color_utilities

0 commit comments

Comments
 (0)