blob: caf9f6098a45b272704534d1bc53afdf422419e6 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/color/color_transform.h"
#include "base/bind.h"
#include "ui/color/color_mixer.h"
namespace ui {
ColorTransform BlendForMinContrast(
ColorId background_id,
base::Optional<ColorId> high_contrast_foreground_id,
float contrast_ratio) {
DCHECK_COLOR_ID_VALID(background_id);
const auto generator = [](ColorId background_id,
base::Optional<ColorId> high_contrast_foreground_id,
float contrast_ratio, SkColor input_color,
const ColorMixer& mixer) {
const SkColor background_color = mixer.GetResultColor(background_id);
const base::Optional<SkColor> foreground_color =
high_contrast_foreground_id.has_value()
? base::make_optional(
mixer.GetResultColor(high_contrast_foreground_id.value()))
: base::nullopt;
return color_utils::BlendForMinContrast(input_color, background_color,
foreground_color, contrast_ratio)
.color;
};
return base::Bind(generator, background_id, high_contrast_foreground_id,
contrast_ratio);
}
ColorTransform BlendTowardMaxContrast(SkAlpha alpha) {
const auto generator = [](SkAlpha alpha, SkColor input_color,
const ColorMixer& mixer) {
return color_utils::BlendTowardMaxContrast(input_color, alpha);
};
return base::Bind(generator, alpha);
}
ColorTransform DeriveDefaultIconColor() {
const auto generator = [](SkColor input_color, const ColorMixer& mixer) {
return color_utils::DeriveDefaultIconColor(input_color);
};
return base::Bind(generator);
}
ColorTransform FromColor(SkColor color) {
const auto generator = [](SkColor color, SkColor input_color,
const ColorMixer& mixer) { return color; };
return base::Bind(generator, color);
}
ColorTransform FromOriginalColorFromSet(ColorId id, ColorSetId set_id) {
DCHECK_COLOR_ID_VALID(id);
DCHECK_COLOR_SET_ID_VALID(set_id);
const auto generator = [](ColorId id, ColorSetId set_id, SkColor input_color,
const ColorMixer& mixer) {
return mixer.GetOriginalColorFromSet(id, set_id);
};
return base::Bind(generator, id, set_id);
}
ColorTransform FromInputColor(ColorId id) {
DCHECK_COLOR_ID_VALID(id);
const auto generator = [](ColorId id, SkColor input_color,
const ColorMixer& mixer) {
return mixer.GetInputColor(id);
};
return base::Bind(generator, id);
}
ColorTransform GetColorWithMaxContrast() {
const auto generator = [](SkColor input_color, const ColorMixer& mixer) {
return color_utils::GetColorWithMaxContrast(input_color);
};
return base::Bind(generator);
}
} // namespace ui