Commit 277c6078 authored by James MacLean's avatar James MacLean Committed by Commit Bot

Revert "Added access operator to color mixers."

This reverts commit 1d267524.

Reason for revert: Suespect that this broke the build on Windows.

Original change's description:
> Added access operator to color mixers.
> 
> Added the access operator to the color mixer class, updated existing
> code and tests. Changed AddMixer() to return a mixer by reference.
> 
> Bug: 1887666
> Change-Id: I2ae180f77d73e3ce4567d061b5505d920677c450
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1910521
> Commit-Queue: Peter Kasting <pkasting@chromium.org>
> Reviewed-by: Peter Kasting <pkasting@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#714528}

TBR=pkasting@chromium.org,tluk@chromium.org

Change-Id: I7eae3b7e1824b31adaa04c5e998c883da05eea96
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: 1887666
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1911709Reviewed-by: default avatarJames MacLean <wjmaclean@chromium.org>
Commit-Queue: James MacLean <wjmaclean@chromium.org>
Cr-Commit-Position: refs/heads/master@{#714543}
parent 18117437
...@@ -1035,7 +1035,7 @@ void BrowserThemePack::AddCustomThemeColorMixers( ...@@ -1035,7 +1035,7 @@ void BrowserThemePack::AddCustomThemeColorMixers(
} }
if (theme_colors.empty()) if (theme_colors.empty())
return; return;
provider->AddMixer().AddSet({kColorSetCustomTheme, std::move(theme_colors)}); provider->AddMixer()->AddSet({kColorSetCustomTheme, std::move(theme_colors)});
} }
// private: // private:
......
...@@ -741,10 +741,10 @@ TEST_F(BrowserThemePackTest, TestCreateColorMixersOmniboxNoValues) { ...@@ -741,10 +741,10 @@ TEST_F(BrowserThemePackTest, TestCreateColorMixersOmniboxNoValues) {
// Tests to make sure that existing colors within the color provider are not // Tests to make sure that existing colors within the color provider are not
// overwritten or lost in the absence of any user provided theme values. // overwritten or lost in the absence of any user provided theme values.
ui::ColorProvider provider; ui::ColorProvider provider;
provider.AddMixer().AddSet({ui::kColorSetTest0, provider.AddMixer()->AddSet({ui::kColorSetTest0,
{{kColorToolbar, SK_ColorRED}, {{kColorToolbar, SK_ColorRED},
{kColorOmniboxText, SK_ColorGREEN}, {kColorOmniboxText, SK_ColorGREEN},
{kColorOmniboxBackground, SK_ColorBLUE}}}); {kColorOmniboxBackground, SK_ColorBLUE}}});
theme_pack().AddCustomThemeColorMixers(&provider); theme_pack().AddCustomThemeColorMixers(&provider);
EXPECT_EQ(SK_ColorRED, provider.GetColor(kColorToolbar)); EXPECT_EQ(SK_ColorRED, provider.GetColor(kColorToolbar));
EXPECT_EQ(SK_ColorGREEN, provider.GetColor(kColorOmniboxText)); EXPECT_EQ(SK_ColorGREEN, provider.GetColor(kColorOmniboxText));
...@@ -755,10 +755,10 @@ TEST_F(BrowserThemePackTest, TestCreateColorMixersOmniboxPartialValues) { ...@@ -755,10 +755,10 @@ TEST_F(BrowserThemePackTest, TestCreateColorMixersOmniboxPartialValues) {
// Tests to make sure that only provided theme values are replicated into the // Tests to make sure that only provided theme values are replicated into the
// color provider. // color provider.
ui::ColorProvider provider; ui::ColorProvider provider;
provider.AddMixer().AddSet({ui::kColorSetTest0, provider.AddMixer()->AddSet({ui::kColorSetTest0,
{{kColorToolbar, SK_ColorRED}, {{kColorToolbar, SK_ColorRED},
{kColorOmniboxText, SK_ColorGREEN}, {kColorOmniboxText, SK_ColorGREEN},
{kColorOmniboxBackground, SK_ColorBLUE}}}); {kColorOmniboxBackground, SK_ColorBLUE}}});
std::string color_json = R"({ "toolbar": [0, 20, 40], std::string color_json = R"({ "toolbar": [0, 20, 40],
"omnibox_text": [60, 80, 100] })"; "omnibox_text": [60, 80, 100] })";
LoadColorJSON(color_json); LoadColorJSON(color_json);
...@@ -772,10 +772,10 @@ TEST_F(BrowserThemePackTest, TestCreateColorMixersOmniboxAllValues) { ...@@ -772,10 +772,10 @@ TEST_F(BrowserThemePackTest, TestCreateColorMixersOmniboxAllValues) {
// Tests to make sure that all available colors are properly loaded into the // Tests to make sure that all available colors are properly loaded into the
// color provider. // color provider.
ui::ColorProvider provider; ui::ColorProvider provider;
provider.AddMixer().AddSet({ui::kColorSetTest0, provider.AddMixer()->AddSet({ui::kColorSetTest0,
{{kColorToolbar, SK_ColorRED}, {{kColorToolbar, SK_ColorRED},
{kColorOmniboxText, SK_ColorGREEN}, {kColorOmniboxText, SK_ColorGREEN},
{kColorOmniboxBackground, SK_ColorBLUE}}}); {kColorOmniboxBackground, SK_ColorBLUE}}});
std::string color_json = R"({ "toolbar": [0, 20, 40], std::string color_json = R"({ "toolbar": [0, 20, 40],
"omnibox_text": [60, 80, 100], "omnibox_text": [60, 80, 100],
"omnibox_background": [120, 140, 160] })"; "omnibox_background": [120, 140, 160] })";
......
...@@ -13,47 +13,55 @@ ...@@ -13,47 +13,55 @@
#include "ui/gfx/color_utils.h" #include "ui/gfx/color_utils.h"
void AddOmniboxColorMixer(ui::ColorProvider* provider, bool high_contrast) { void AddOmniboxColorMixer(ui::ColorProvider* provider, bool high_contrast) {
ui::ColorMixer& mixer = provider->AddMixer(); ui::ColorMixer* mixer = provider->AddMixer();
const float minimum_contrast = const float minimum_contrast =
high_contrast ? 6.0f : color_utils::kMinimumReadableContrastRatio; high_contrast ? 6.0f : color_utils::kMinimumReadableContrastRatio;
// Omnibox background colors. // Omnibox background colors.
mixer[kColorOmniboxBackground].AddTransform(ui::GetResultingPaintColor( mixer->AddRecipe(kColorOmniboxBackground)
ui::FromTransformInput(), ui::FromInputColor(kColorToolbar))); .AddTransform(ui::GetResultingPaintColor(
mixer[kColorOmniboxBackgroundHovered].AddTransform(ui::BlendTowardMaxContrast( ui::FromTransformInput(), ui::FromInputColor(kColorToolbar)));
ui::FromResultColor(kColorOmniboxBackground), 0x0A)); mixer->AddRecipe(kColorOmniboxBackgroundHovered)
.AddTransform(ui::BlendTowardMaxContrast(
ui::FromResultColor(kColorOmniboxBackground), 0x0A));
// Omnibox text colors. // Omnibox text colors.
mixer[kColorOmniboxText].AddTransform(ui::GetResultingPaintColor( mixer->AddRecipe(kColorOmniboxText)
ui::FromTransformInput(), ui::FromResultColor(kColorOmniboxBackground))); .AddTransform(ui::GetResultingPaintColor(
ui::FromTransformInput(),
ui::FromResultColor(kColorOmniboxBackground)));
{ {
auto& selected_text = mixer[kColorOmniboxResultsTextSelected].AddTransform( auto& selected_text =
ui::FromResultColor(kColorOmniboxText)); mixer->AddRecipe(kColorOmniboxResultsTextSelected)
.AddTransform(ui::FromResultColor(kColorOmniboxText));
if (high_contrast) if (high_contrast)
selected_text.AddTransform(ui::ContrastInvert(ui::FromTransformInput())); selected_text.AddTransform(ui::ContrastInvert(ui::FromTransformInput()));
} }
mixer[kColorOmniboxSelectedKeyword].AddTransform( mixer->AddRecipe(kColorOmniboxSelectedKeyword)
ui::SelectBasedOnDarkInput(ui::FromResultColor(kColorOmniboxBackground), .AddTransform(ui::SelectBasedOnDarkInput(
ui::FromColor(gfx::kGoogleGrey100), ui::FromResultColor(kColorOmniboxBackground),
ui::FromResultColor(kColorOmniboxResultsUrl))); ui::FromColor(gfx::kGoogleGrey100),
ui::FromResultColor(kColorOmniboxResultsUrl)));
// Bubble outline colors. // Bubble outline colors.
mixer[kColorOmniboxBubbleOutline].AddTransform(ui::SelectBasedOnDarkInput( mixer->AddRecipe(kColorOmniboxBubbleOutline)
ui::FromResultColor(kColorOmniboxBackground), .AddTransform(ui::SelectBasedOnDarkInput(
ui::FromColor(gfx::kGoogleGrey100), ui::FromResultColor(kColorOmniboxBackground),
ui::FromColor(SkColorSetA(gfx::kGoogleGrey900, 0x24)))); ui::FromColor(gfx::kGoogleGrey100),
mixer[kColorOmniboxBubbleOutlineExperimentalKeywordMode].AddTransform( ui::FromColor(SkColorSetA(gfx::kGoogleGrey900, 0x24))));
ui::FromResultColor(kColorOmniboxSelectedKeyword)); mixer->AddRecipe(kColorOmniboxBubbleOutlineExperimentalKeywordMode)
.AddTransform(ui::FromResultColor(kColorOmniboxSelectedKeyword));
// Results background colors. // Results background colors.
mixer[kColorOmniboxResultsBackground].AddTransform( mixer->AddRecipe(kColorOmniboxResultsBackground)
ui::GetColorWithMaxContrast(ui::FromResultColor(kColorOmniboxText))); .AddTransform(
mixer[kColorOmniboxResultsBackgroundHovered].AddTransform( ui::GetColorWithMaxContrast(ui::FromResultColor(kColorOmniboxText)));
ui::BlendTowardMaxContrast( mixer->AddRecipe(kColorOmniboxResultsBackgroundHovered)
.AddTransform(ui::BlendTowardMaxContrast(
ui::FromResultColor(kColorOmniboxResultsBackground), ui::FromResultColor(kColorOmniboxResultsBackground),
gfx::kGoogleGreyAlpha200)); gfx::kGoogleGreyAlpha200));
mixer[kColorOmniboxResultsBackgroundSelected].AddTransform( mixer->AddRecipe(kColorOmniboxResultsBackgroundSelected)
ui::BlendTowardMaxContrast( .AddTransform(ui::BlendTowardMaxContrast(
ui::GetColorWithMaxContrast( ui::GetColorWithMaxContrast(
ui::FromResultColor(kColorOmniboxResultsTextSelected)), ui::FromResultColor(kColorOmniboxResultsTextSelected)),
gfx::kGoogleGreyAlpha300)); gfx::kGoogleGreyAlpha300));
...@@ -66,11 +74,12 @@ void AddOmniboxColorMixer(ui::ColorProvider* provider, bool high_contrast) { ...@@ -66,11 +74,12 @@ void AddOmniboxColorMixer(ui::ColorProvider* provider, bool high_contrast) {
ui::DeriveDefaultIconColor(ui::FromResultColor(text_id)), ui::DeriveDefaultIconColor(ui::FromResultColor(text_id)),
ui::FromResultColor(background_id), base::nullopt, minimum_contrast); ui::FromResultColor(background_id), base::nullopt, minimum_contrast);
}; };
mixer[kColorOmniboxResultsIcon].AddTransform( mixer->AddRecipe(kColorOmniboxResultsIcon)
results_icon(kColorOmniboxText, kColorOmniboxResultsBackground)); .AddTransform(
mixer[kColorOmniboxResultsIconSelected].AddTransform( results_icon(kColorOmniboxText, kColorOmniboxResultsBackground));
results_icon(kColorOmniboxResultsTextSelected, mixer->AddRecipe(kColorOmniboxResultsIconSelected)
kColorOmniboxResultsBackgroundSelected)); .AddTransform(results_icon(kColorOmniboxResultsTextSelected,
kColorOmniboxResultsBackgroundSelected));
} }
// Dimmed text colors. // Dimmed text colors.
...@@ -86,14 +95,16 @@ void AddOmniboxColorMixer(ui::ColorProvider* provider, bool high_contrast) { ...@@ -86,14 +95,16 @@ void AddOmniboxColorMixer(ui::ColorProvider* provider, bool high_contrast) {
base::nullopt, minimum_contrast), base::nullopt, minimum_contrast),
minimum_contrast); minimum_contrast);
}; };
mixer[kColorOmniboxResultsTextDimmed].AddTransform( mixer->AddRecipe(kColorOmniboxResultsTextDimmed)
blend_with_clamped_contrast(kColorOmniboxText, .AddTransform(blend_with_clamped_contrast(
kColorOmniboxResultsBackgroundHovered)); kColorOmniboxText, kColorOmniboxResultsBackgroundHovered));
mixer[kColorOmniboxResultsTextDimmedSelected].AddTransform( mixer->AddRecipe(kColorOmniboxResultsTextDimmedSelected)
blend_with_clamped_contrast(kColorOmniboxResultsTextSelected, .AddTransform(blend_with_clamped_contrast(
kColorOmniboxResultsBackgroundSelected)); kColorOmniboxResultsTextSelected,
mixer[kColorOmniboxTextDimmed].AddTransform(blend_with_clamped_contrast( kColorOmniboxResultsBackgroundSelected));
kColorOmniboxText, kColorOmniboxBackgroundHovered)); mixer->AddRecipe(kColorOmniboxTextDimmed)
.AddTransform(blend_with_clamped_contrast(
kColorOmniboxText, kColorOmniboxBackgroundHovered));
} }
// Results URL colors. // Results URL colors.
...@@ -106,10 +117,10 @@ void AddOmniboxColorMixer(ui::ColorProvider* provider, bool high_contrast) { ...@@ -106,10 +117,10 @@ void AddOmniboxColorMixer(ui::ColorProvider* provider, bool high_contrast) {
ui::FromColor(gfx::kGoogleBlue900)), ui::FromColor(gfx::kGoogleBlue900)),
minimum_contrast); minimum_contrast);
}; };
mixer[kColorOmniboxResultsUrl].AddTransform( mixer->AddRecipe(kColorOmniboxResultsUrl)
url_color(kColorOmniboxResultsBackgroundHovered)); .AddTransform(url_color(kColorOmniboxResultsBackgroundHovered));
mixer[kColorOmniboxResultsUrlSelected].AddTransform( mixer->AddRecipe(kColorOmniboxResultsUrlSelected)
url_color(kColorOmniboxResultsBackgroundSelected)); .AddTransform(url_color(kColorOmniboxResultsBackgroundSelected));
} }
// Security chip colors. // Security chip colors.
...@@ -125,11 +136,12 @@ void AddOmniboxColorMixer(ui::ColorProvider* provider, bool high_contrast) { ...@@ -125,11 +136,12 @@ void AddOmniboxColorMixer(ui::ColorProvider* provider, bool high_contrast) {
ui::FromResultColor(kColorOmniboxBackgroundHovered), ui::FromResultColor(kColorOmniboxBackgroundHovered),
base::nullopt, minimum_contrast)); base::nullopt, minimum_contrast));
}; };
mixer[kColorOmniboxSecurityChipDangerous].AddTransform( mixer->AddRecipe(kColorOmniboxSecurityChipDangerous)
security_chip_color(ui::FromColor(gfx::kGoogleRed600))); .AddTransform(security_chip_color(ui::FromColor(gfx::kGoogleRed600)));
mixer[kColorOmniboxSecurityChipSecure].AddTransform(security_chip_color( mixer->AddRecipe(kColorOmniboxSecurityChipSecure)
ui::DeriveDefaultIconColor(ui::FromResultColor(kColorOmniboxText)))); .AddTransform(security_chip_color(ui::DeriveDefaultIconColor(
ui::FromResultColor(kColorOmniboxText))));
} }
mixer[kColorOmniboxSecurityChipDefault].AddTransform( mixer->AddRecipe(kColorOmniboxSecurityChipDefault)
ui::FromResultColor(kColorOmniboxSecurityChipSecure)); .AddTransform(ui::FromResultColor(kColorOmniboxSecurityChipSecure));
} }
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
#include "ui/color/color_mixer.h" #include "ui/color/color_mixer.h"
#include "base/containers/adapters.h"
#include "base/stl_util.h"
#include "ui/color/color_recipe.h" #include "ui/color/color_recipe.h"
#include "ui/gfx/color_palette.h" #include "ui/gfx/color_palette.h"
...@@ -18,16 +20,17 @@ ColorMixer& ColorMixer::operator=(ColorMixer&&) noexcept = default; ...@@ -18,16 +20,17 @@ ColorMixer& ColorMixer::operator=(ColorMixer&&) noexcept = default;
ColorMixer::~ColorMixer() = default; ColorMixer::~ColorMixer() = default;
ColorRecipe& ColorMixer::operator[](ColorId id) {
DCHECK_COLOR_ID_VALID(id);
return recipes_[id];
}
void ColorMixer::AddSet(ColorSet&& set) { void ColorMixer::AddSet(ColorSet&& set) {
DCHECK(FindSetWithId(set.id) == sets_.cend()); DCHECK(FindSetWithId(set.id) == sets_.cend());
sets_.push_front(std::move(set)); sets_.push_front(std::move(set));
} }
ColorRecipe& ColorMixer::AddRecipe(ColorId id) {
DCHECK_COLOR_ID_VALID(id);
DCHECK(!base::Contains(recipes_, id));
return recipes_[id];
}
SkColor ColorMixer::GetInputColor(ColorId id) const { SkColor ColorMixer::GetInputColor(ColorId id) const {
DCHECK_COLOR_ID_VALID(id); DCHECK_COLOR_ID_VALID(id);
for (const auto& set : sets_) { for (const auto& set : sets_) {
......
...@@ -39,14 +39,16 @@ class COMPONENT_EXPORT(COLOR) ColorMixer { ...@@ -39,14 +39,16 @@ class COMPONENT_EXPORT(COLOR) ColorMixer {
ColorMixer& operator=(ColorMixer&&) noexcept; ColorMixer& operator=(ColorMixer&&) noexcept;
~ColorMixer(); ~ColorMixer();
// Adds a recipe for |id| if it does not exist.
ColorRecipe& operator[](ColorId id);
// Adds |set| to |sets_|. |set| must not have the same ID as any previously // Adds |set| to |sets_|. |set| must not have the same ID as any previously
// added sets, though it may contain colors with the same IDs as colors in // added sets, though it may contain colors with the same IDs as colors in
// those sets; in such cases, the last-added set takes priority. // those sets; in such cases, the last-added set takes priority.
void AddSet(ColorSet&& set); void AddSet(ColorSet&& set);
// Adds a recipe for |id|, which must not already have an existing recipe.
// Returns a non-const ref to allow chaining calls to
// ColorRecipe::AddTransform().
ColorRecipe& AddRecipe(ColorId id);
// Returns the input color for |id|. First searches all |sets_| in reverse // Returns the input color for |id|. First searches all |sets_| in reverse
// order; if not found, asks the previous mixer for the result color. If // order; if not found, asks the previous mixer for the result color. If
// there is no previous mixer, returns gfx::kPlaceholderColor. // there is no previous mixer, returns gfx::kPlaceholderColor.
......
...@@ -27,10 +27,10 @@ TEST(ColorMixerTest, AddSet) { ...@@ -27,10 +27,10 @@ TEST(ColorMixerTest, AddSet) {
EXPECT_EQ(SK_ColorGREEN, mixer.GetResultColor(kColorTest0)); EXPECT_EQ(SK_ColorGREEN, mixer.GetResultColor(kColorTest0));
} }
// Tests that the recipe returned by operator[] is respected by the mixer. // Tests that the recipe returned by AddRecipe() is respected by the mixer.
TEST(ColorMixerTest, AccessOperator) { TEST(ColorMixerTest, AddRecipe) {
ColorMixer mixer; ColorMixer mixer;
mixer[kColorTest0].AddTransform(FromColor(SK_ColorGREEN)); mixer.AddRecipe(kColorTest0).AddTransform(FromColor(SK_ColorGREEN));
EXPECT_EQ(SK_ColorGREEN, mixer.GetResultColor(kColorTest0)); EXPECT_EQ(SK_ColorGREEN, mixer.GetResultColor(kColorTest0));
} }
...@@ -86,8 +86,8 @@ TEST(ColorMixerTest, GetInputColorPreviousMixer) { ...@@ -86,8 +86,8 @@ TEST(ColorMixerTest, GetInputColorPreviousMixer) {
TEST(ColorMixerTest, GetInputColorIgnoresRecipe) { TEST(ColorMixerTest, GetInputColorIgnoresRecipe) {
ColorMixer mixer; ColorMixer mixer;
mixer.AddSet({kColorSetTest0, {{kColorTest0, SK_ColorGREEN}}}); mixer.AddSet({kColorSetTest0, {{kColorTest0, SK_ColorGREEN}}});
mixer[kColorTest0].AddTransform( mixer.AddRecipe(kColorTest0)
GetColorWithMaxContrast(FromTransformInput())); .AddTransform(GetColorWithMaxContrast(FromTransformInput()));
EXPECT_EQ(SK_ColorGREEN, mixer.GetInputColor(kColorTest0)); EXPECT_EQ(SK_ColorGREEN, mixer.GetInputColor(kColorTest0));
} }
...@@ -97,8 +97,8 @@ TEST(ColorMixerTest, GetInputColorIgnoresRecipe) { ...@@ -97,8 +97,8 @@ TEST(ColorMixerTest, GetInputColorIgnoresRecipe) {
TEST(ColorMixerTest, GetInputColorRespectsRecipePreviousMixer) { TEST(ColorMixerTest, GetInputColorRespectsRecipePreviousMixer) {
ColorMixer mixer0; ColorMixer mixer0;
mixer0.AddSet({kColorSetTest0, {{kColorTest0, SK_ColorGREEN}}}); mixer0.AddSet({kColorSetTest0, {{kColorTest0, SK_ColorGREEN}}});
mixer0[kColorTest0].AddTransform( mixer0.AddRecipe(kColorTest0)
GetColorWithMaxContrast(FromTransformInput())); .AddTransform(GetColorWithMaxContrast(FromTransformInput()));
ColorMixer mixer1(&mixer0); ColorMixer mixer1(&mixer0);
mixer1.AddSet({kColorSetTest1, {{kColorTest1, SK_ColorRED}}}); mixer1.AddSet({kColorSetTest1, {{kColorTest1, SK_ColorRED}}});
EXPECT_EQ(color_utils::GetColorWithMaxContrast(SK_ColorGREEN), EXPECT_EQ(color_utils::GetColorWithMaxContrast(SK_ColorGREEN),
...@@ -169,8 +169,8 @@ TEST(ColorMixerTest, GetOriginalColorFromSetPreviousMixer) { ...@@ -169,8 +169,8 @@ TEST(ColorMixerTest, GetOriginalColorFromSetPreviousMixer) {
TEST(ColorMixerTest, GetOriginalColorFromSetIgnoresRecipe) { TEST(ColorMixerTest, GetOriginalColorFromSetIgnoresRecipe) {
ColorMixer mixer; ColorMixer mixer;
mixer.AddSet({kColorSetTest0, {{kColorTest0, SK_ColorGREEN}}}); mixer.AddSet({kColorSetTest0, {{kColorTest0, SK_ColorGREEN}}});
mixer[kColorTest0].AddTransform( mixer.AddRecipe(kColorTest0)
GetColorWithMaxContrast(FromTransformInput())); .AddTransform(GetColorWithMaxContrast(FromTransformInput()));
EXPECT_EQ(SK_ColorGREEN, EXPECT_EQ(SK_ColorGREEN,
mixer.GetOriginalColorFromSet(kColorTest0, kColorSetTest0)); mixer.GetOriginalColorFromSet(kColorTest0, kColorSetTest0));
} }
...@@ -181,8 +181,8 @@ TEST(ColorMixerTest, GetOriginalColorFromSetIgnoresRecipe) { ...@@ -181,8 +181,8 @@ TEST(ColorMixerTest, GetOriginalColorFromSetIgnoresRecipe) {
TEST(ColorMixerTest, GetOriginalColorFromSetIgnoresRecipePreviousMixer) { TEST(ColorMixerTest, GetOriginalColorFromSetIgnoresRecipePreviousMixer) {
ColorMixer mixer0; ColorMixer mixer0;
mixer0.AddSet({kColorSetTest0, {{kColorTest0, SK_ColorGREEN}}}); mixer0.AddSet({kColorSetTest0, {{kColorTest0, SK_ColorGREEN}}});
mixer0[kColorTest0].AddTransform( mixer0.AddRecipe(kColorTest0)
GetColorWithMaxContrast(FromTransformInput())); .AddTransform(GetColorWithMaxContrast(FromTransformInput()));
ColorMixer mixer1(&mixer0); ColorMixer mixer1(&mixer0);
mixer1.AddSet({kColorSetTest1, {{kColorTest1, SK_ColorRED}}}); mixer1.AddSet({kColorSetTest1, {{kColorTest1, SK_ColorRED}}});
EXPECT_EQ(SK_ColorGREEN, EXPECT_EQ(SK_ColorGREEN,
...@@ -207,9 +207,9 @@ TEST(ColorMixerTest, GetResultColorNoRecipe) { ...@@ -207,9 +207,9 @@ TEST(ColorMixerTest, GetResultColorNoRecipe) {
// initial value for its requested color. // initial value for its requested color.
TEST(ColorMixerTest, GetResultColorNoSet) { TEST(ColorMixerTest, GetResultColorNoSet) {
ColorMixer mixer; ColorMixer mixer;
mixer[kColorTest0].AddTransform(FromColor(SK_ColorGREEN)); mixer.AddRecipe(kColorTest0).AddTransform(FromColor(SK_ColorGREEN));
mixer[kColorTest1].AddTransform( mixer.AddRecipe(kColorTest1)
GetColorWithMaxContrast(FromTransformInput())); .AddTransform(GetColorWithMaxContrast(FromTransformInput()));
EXPECT_EQ(SK_ColorGREEN, mixer.GetResultColor(kColorTest0)); EXPECT_EQ(SK_ColorGREEN, mixer.GetResultColor(kColorTest0));
EXPECT_NE(gfx::kPlaceholderColor, mixer.GetResultColor(kColorTest1)); EXPECT_NE(gfx::kPlaceholderColor, mixer.GetResultColor(kColorTest1));
} }
...@@ -220,8 +220,8 @@ TEST(ColorMixerTest, GetResultColorIgnoresSet) { ...@@ -220,8 +220,8 @@ TEST(ColorMixerTest, GetResultColorIgnoresSet) {
ColorMixer mixer; ColorMixer mixer;
mixer.AddSet({kColorSetTest0, mixer.AddSet({kColorSetTest0,
{{kColorTest0, SK_ColorWHITE}, {kColorTest1, SK_ColorBLACK}}}); {{kColorTest0, SK_ColorWHITE}, {kColorTest1, SK_ColorBLACK}}});
mixer[kColorTest0].AddTransform(FromColor(SK_ColorGREEN)); mixer.AddRecipe(kColorTest0).AddTransform(FromColor(SK_ColorGREEN));
mixer[kColorTest1].AddTransform(FromColor(SK_ColorGREEN)); mixer.AddRecipe(kColorTest1).AddTransform(FromColor(SK_ColorGREEN));
EXPECT_EQ(SK_ColorGREEN, mixer.GetResultColor(kColorTest0)); EXPECT_EQ(SK_ColorGREEN, mixer.GetResultColor(kColorTest0));
EXPECT_EQ(SK_ColorGREEN, mixer.GetResultColor(kColorTest1)); EXPECT_EQ(SK_ColorGREEN, mixer.GetResultColor(kColorTest1));
} }
...@@ -231,12 +231,14 @@ TEST(ColorMixerTest, GetResultColorIgnoresSet) { ...@@ -231,12 +231,14 @@ TEST(ColorMixerTest, GetResultColorIgnoresSet) {
TEST(ColorMixerTest, GetResultColorChained) { TEST(ColorMixerTest, GetResultColorChained) {
ColorMixer mixer; ColorMixer mixer;
mixer.AddSet({kColorSetTest0, {{kColorTest1, SK_ColorWHITE}}}); mixer.AddSet({kColorSetTest0, {{kColorTest1, SK_ColorWHITE}}});
mixer[kColorTest0].AddTransform(FromColor(gfx::kGoogleBlue050)); mixer.AddRecipe(kColorTest0).AddTransform(FromColor(gfx::kGoogleBlue050));
mixer[kColorTest1].AddTransform(BlendTowardMaxContrast( mixer.AddRecipe(kColorTest1)
GetColorWithMaxContrast(FromTransformInput()), 0x29)); .AddTransform(BlendTowardMaxContrast(
mixer[kColorTest2].AddTransform(BlendForMinContrast( GetColorWithMaxContrast(FromTransformInput()), 0x29));
FromColor(gfx::kGoogleBlue500), FromResultColor(kColorTest1), mixer.AddRecipe(kColorTest2)
FromResultColor(kColorTest0))); .AddTransform(BlendForMinContrast(FromColor(gfx::kGoogleBlue500),
FromResultColor(kColorTest1),
FromResultColor(kColorTest0)));
EXPECT_EQ(SkColorSetRGB(0x89, 0xB3, 0xF8), mixer.GetResultColor(kColorTest2)); EXPECT_EQ(SkColorSetRGB(0x89, 0xB3, 0xF8), mixer.GetResultColor(kColorTest2));
} }
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
namespace ui { namespace ui {
ColorMixer& ColorProvider::AddMixer() { ColorMixer* ColorProvider::AddMixer() {
// Adding a mixer could change any of the result colors. // Adding a mixer could change any of the result colors.
cache_.clear(); cache_.clear();
...@@ -20,7 +20,7 @@ ColorMixer& ColorProvider::AddMixer() { ...@@ -20,7 +20,7 @@ ColorMixer& ColorProvider::AddMixer() {
// mixer for its result, and trust mixers to query each other back up the // mixer for its result, and trust mixers to query each other back up the
// chain as needed. // chain as needed.
mixers_.emplace_front(mixers_.empty() ? nullptr : &mixers_.front()); mixers_.emplace_front(mixers_.empty() ? nullptr : &mixers_.front());
return mixers_.front(); return &mixers_.front();
} }
SkColor ColorProvider::GetColor(ColorId id, ColorVariant variant) const { SkColor ColorProvider::GetColor(ColorId id, ColorVariant variant) const {
......
...@@ -30,9 +30,9 @@ class COMPONENT_EXPORT(COLOR) ColorProvider { ...@@ -30,9 +30,9 @@ class COMPONENT_EXPORT(COLOR) ColorProvider {
ColorProvider& operator=(const ColorProvider&) = delete; ColorProvider& operator=(const ColorProvider&) = delete;
~ColorProvider(); ~ColorProvider();
// Adds a mixer to the end of the current color pipeline. Returns a reference // Adds a mixer to the end of the current color pipeline. Returns a pointer
// to the added mixer so callers can subsequently add sets and/or recipes. // to the added mixer so callers can subsequently add sets and/or recipes.
ColorMixer& AddMixer(); ColorMixer* AddMixer();
// Returns the result color for |id| by applying the effects of each mixer in // Returns the result color for |id| by applying the effects of each mixer in
// order. Returns gfx::kPlaceholderColor if no mixer knows how to construct // order. Returns gfx::kPlaceholderColor if no mixer knows how to construct
......
...@@ -11,6 +11,14 @@ ...@@ -11,6 +11,14 @@
namespace ui { namespace ui {
namespace { namespace {
// Tests that AddMixer() returns non-null pointers, implying addition was
// successful. (Other tests below will verify the mixers have an effect.)
TEST(ColorProviderTest, AddMixer) {
ColorProvider provider;
EXPECT_NE(nullptr, provider.AddMixer());
EXPECT_NE(nullptr, provider.AddMixer());
}
// Tests that when there are no mixers, GetColor() returns a placeholder value. // Tests that when there are no mixers, GetColor() returns a placeholder value.
TEST(ColorProviderTest, GetColorNoMixers) { TEST(ColorProviderTest, GetColorNoMixers) {
EXPECT_EQ(gfx::kPlaceholderColor, ColorProvider().GetColor(kColorTest0)); EXPECT_EQ(gfx::kPlaceholderColor, ColorProvider().GetColor(kColorTest0));
...@@ -20,7 +28,7 @@ TEST(ColorProviderTest, GetColorNoMixers) { ...@@ -20,7 +28,7 @@ TEST(ColorProviderTest, GetColorNoMixers) {
// possible. // possible.
TEST(ColorProviderTest, SingleMixer) { TEST(ColorProviderTest, SingleMixer) {
ColorProvider provider; ColorProvider provider;
provider.AddMixer().AddSet({kColorSetTest0, {{kColorTest0, SK_ColorGREEN}}}); provider.AddMixer()->AddSet({kColorSetTest0, {{kColorTest0, SK_ColorGREEN}}});
EXPECT_EQ(SK_ColorGREEN, provider.GetColor(kColorTest0)); EXPECT_EQ(SK_ColorGREEN, provider.GetColor(kColorTest0));
EXPECT_EQ(gfx::kPlaceholderColor, provider.GetColor(kColorTest1)); EXPECT_EQ(gfx::kPlaceholderColor, provider.GetColor(kColorTest1));
} }
...@@ -29,8 +37,8 @@ TEST(ColorProviderTest, SingleMixer) { ...@@ -29,8 +37,8 @@ TEST(ColorProviderTest, SingleMixer) {
// use of both. // use of both.
TEST(ColorProviderTest, NonOverlappingMixers) { TEST(ColorProviderTest, NonOverlappingMixers) {
ColorProvider provider; ColorProvider provider;
provider.AddMixer().AddSet({kColorSetTest0, {{kColorTest0, SK_ColorGREEN}}}); provider.AddMixer()->AddSet({kColorSetTest0, {{kColorTest0, SK_ColorGREEN}}});
provider.AddMixer().AddSet({kColorSetTest1, {{kColorTest1, SK_ColorRED}}}); provider.AddMixer()->AddSet({kColorSetTest1, {{kColorTest1, SK_ColorRED}}});
EXPECT_EQ(SK_ColorGREEN, provider.GetColor(kColorTest0)); EXPECT_EQ(SK_ColorGREEN, provider.GetColor(kColorTest0));
EXPECT_EQ(SK_ColorRED, provider.GetColor(kColorTest1)); EXPECT_EQ(SK_ColorRED, provider.GetColor(kColorTest1));
} }
...@@ -39,8 +47,8 @@ TEST(ColorProviderTest, NonOverlappingMixers) { ...@@ -39,8 +47,8 @@ TEST(ColorProviderTest, NonOverlappingMixers) {
// added takes priority. // added takes priority.
TEST(ColorProviderTest, OverlappingMixers) { TEST(ColorProviderTest, OverlappingMixers) {
ColorProvider provider; ColorProvider provider;
provider.AddMixer().AddSet({kColorSetTest0, {{kColorTest0, SK_ColorGREEN}}}); provider.AddMixer()->AddSet({kColorSetTest0, {{kColorTest0, SK_ColorGREEN}}});
provider.AddMixer().AddSet({kColorSetTest0, {{kColorTest0, SK_ColorRED}}}); provider.AddMixer()->AddSet({kColorSetTest0, {{kColorTest0, SK_ColorRED}}});
EXPECT_EQ(SK_ColorRED, provider.GetColor(kColorTest0)); EXPECT_EQ(SK_ColorRED, provider.GetColor(kColorTest0));
} }
...@@ -48,10 +56,10 @@ TEST(ColorProviderTest, OverlappingMixers) { ...@@ -48,10 +56,10 @@ TEST(ColorProviderTest, OverlappingMixers) {
// This attempts to verify that nothing is badly wrong with color caching. // This attempts to verify that nothing is badly wrong with color caching.
TEST(ColorProviderTest, Caching) { TEST(ColorProviderTest, Caching) {
ColorProvider provider; ColorProvider provider;
provider.AddMixer().AddSet({kColorSetTest0, {{kColorTest0, SK_ColorGREEN}}}); provider.AddMixer()->AddSet({kColorSetTest0, {{kColorTest0, SK_ColorGREEN}}});
EXPECT_EQ(SK_ColorGREEN, provider.GetColor(kColorTest0)); EXPECT_EQ(SK_ColorGREEN, provider.GetColor(kColorTest0));
EXPECT_EQ(SK_ColorGREEN, provider.GetColor(kColorTest0)); EXPECT_EQ(SK_ColorGREEN, provider.GetColor(kColorTest0));
provider.AddMixer().AddSet({kColorSetTest0, {{kColorTest0, SK_ColorRED}}}); provider.AddMixer()->AddSet({kColorSetTest0, {{kColorTest0, SK_ColorRED}}});
EXPECT_EQ(SK_ColorRED, provider.GetColor(kColorTest0)); EXPECT_EQ(SK_ColorRED, provider.GetColor(kColorTest0));
} }
......
...@@ -156,7 +156,7 @@ TEST(ColorTransformTest, FromResultColor) { ...@@ -156,7 +156,7 @@ TEST(ColorTransformTest, FromResultColor) {
ColorMixer mixer; ColorMixer mixer;
mixer.AddSet({kColorSetTest0, mixer.AddSet({kColorSetTest0,
{{kColorTest0, SK_ColorGREEN}, {kColorTest1, kTest1Color}}}); {{kColorTest0, SK_ColorGREEN}, {kColorTest1, kTest1Color}}});
mixer[kColorTest0].AddTransform(FromInputColor(kColorTest1)); mixer.AddRecipe(kColorTest0).AddTransform(FromInputColor(kColorTest1));
const auto verify_color = [&](SkColor input) { const auto verify_color = [&](SkColor input) {
EXPECT_EQ(kTest1Color, transform.Run(input, mixer)); EXPECT_EQ(kTest1Color, transform.Run(input, mixer));
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment