blob: 771069f2e864385e10b41cdaf869afac2748ecef [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/color/material_ui_color_mixer.h"
#include <utility>
#include "base/logging.h"
#include "ui/color/color_id.h"
#include "ui/color/color_mixer.h"
#include "ui/color/color_provider.h"
#include "ui/color/color_provider_manager.h"
#include "ui/color/color_recipe.h"
#include "ui/color/color_transform.h"
namespace ui {
void AddMaterialUiColorMixer(ColorProvider* provider,
const ColorProviderManager::Key& key) {
const bool dark_mode =
key.color_mode == ColorProviderManager::ColorMode::kDark;
DVLOG(2) << "Adding MaterialUiColorMixer to ColorProvider for "
<< (dark_mode ? "Dark" : "Light") << " window.";
ColorMixer& mixer = provider->AddMixer();
mixer[kColorBadgeBackground] = {kColorSysTonalContainer};
mixer[kColorBadgeForeground] = {kColorSysOnTonalContainer};
mixer[kColorButtonBackground] = {kColorSysSurface};
mixer[kColorButtonBackgroundPressed] =
GetResultingPaintColor({kColorSysStatePressed}, {kColorButtonBackground});
mixer[kColorButtonBackgroundProminent] = {kColorSysPrimary};
mixer[kColorButtonBackgroundProminentDisabled] = {GetResultingPaintColor(
{kColorSysStateDisabledContainer}, {kColorButtonBackground})};
mixer[kColorButtonBackgroundProminentFocused] = {GetResultingPaintColor(
{kColorSysStateFocus}, {kColorButtonBackgroundProminent})};
mixer[kColorButtonBorder] = {kColorSysOutline};
mixer[kColorButtonBorderDisabled] = {kColorSysStateDisabled};
mixer[kColorButtonForeground] = {kColorSysPrimary};
mixer[kColorButtonForegroundDisabled] = {kColorSysStateDisabled};
mixer[kColorButtonForegroundProminent] = {kColorSysOnPrimary};
mixer[kColorCheckboxBackgroundDisabled] = {kColorSysStateDisabledContainer};
mixer[kColorCheckboxForegroundChecked] = {kColorSysOnSurfacePrimary};
mixer[kColorCheckboxForegroundDisabled] = {kColorSysStateDisabled};
mixer[kColorCheckboxForegroundUnchecked] = {kColorSysOutline};
mixer[kColorComboboxBackground] = {kColorSysSurface};
mixer[kColorComboboxBackgroundDisabled] = {GetResultingPaintColor(
{kColorSysStateDisabledContainer}, {kColorComboboxBackground})};
mixer[kColorFocusableBorderFocused] = {kColorSysStateFocusRing};
mixer[kColorFocusableBorderUnfocused] = {kColorSysOutline};
mixer[kColorFrameActive] = {kColorSysHeader};
mixer[kColorFrameActiveUnthemed] = {kColorSysHeader};
mixer[kColorFrameInactive] = {kColorSysHeaderInactive};
mixer[kColorListItemFolderIconBackground] = {kColorSysTonalContainer};
mixer[kColorListItemFolderIconForeground] = {kColorSysOnTonalContainer};
mixer[kColorListItemUrlFaviconBackground] = {kColorSysNeutralContainer};
mixer[kColorRadioButtonForegroundChecked] = {kColorSysOnSurfacePrimary};
mixer[kColorRadioButtonForegroundDisabled] = {
kColorSysStateDisabledContainer};
mixer[kColorRadioButtonForegroundUnchecked] = {kColorSysOutline};
mixer[kColorSliderThumb] = {kColorSysPrimary};
mixer[kColorSliderThumbMinimal] = {kColorSysSecondary};
mixer[kColorSliderTrack] = {kColorSysOnPrimary};
mixer[kColorSliderTrackMinimal] = {kColorSysOnSecondary};
mixer[kColorSuggestionChipBorder] = {kColorSysTonalOutline};
mixer[kColorSuggestionChipIcon] = {kColorSysPrimary};
mixer[kColorTextfieldBackground] = {kColorSysSurface};
mixer[kColorTextfieldBackgroundDisabled] = {GetResultingPaintColor(
{kColorSysStateDisabledContainer}, {kColorTextfieldBackground})};
mixer[kColorTextfieldForeground] = {kColorSysOnSurface};
mixer[kColorTextfieldForegroundPlaceholderInvalid] = {
BlendForMinContrast(kColorSysError, kColorTextfieldBackground)};
mixer[kColorTextfieldForegroundDisabled] = {kColorSysStateDisabled};
mixer[kColorTextfieldForegroundPlaceholder] = {kColorSysOnSurfaceSubtle};
mixer[kColorTextfieldInvalidOutline] = {
kColorTextfieldForegroundPlaceholderInvalid};
mixer[kColorTextfieldSelectionBackground] = {kColorSysTonalContainer};
mixer[kColorToggleButtonHover] = {kColorSysStateHover};
mixer[kColorToggleButtonPressed] = {kColorSysStatePressed};
mixer[kColorToggleButtonShadow] = {kColorSysOutline};
mixer[kColorToggleButtonThumbOff] = {kColorSysOutline};
mixer[kColorToggleButtonThumbOffDisabled] = {kColorSysStateDisabled};
mixer[kColorToggleButtonThumbOn] = {kColorSysOnPrimary};
mixer[kColorToggleButtonThumbOnDisabled] = {kColorSysSurface};
mixer[kColorToggleButtonThumbOnHover] = {kColorSysPrimaryContainer};
mixer[kColorToggleButtonTrackOff] = {kColorSysSurfaceVariant};
mixer[kColorToggleButtonTrackOffDisabled] = {kColorSysSurfaceVariant};
mixer[kColorToggleButtonTrackOn] = {kColorSysPrimary};
mixer[kColorToggleButtonTrackOnDisabled] = {kColorSysStateDisabledContainer};
mixer[kColorToolbarSearchFieldBackground] = {kColorSysBaseContainerElevated};
mixer[kColorToolbarSearchFieldBackgroundHover] = {kColorSysStateHoverCutout};
mixer[kColorToolbarSearchFieldBackgroundPressed] = {
kColorSysStateRippleNeutralOnSubtle};
mixer[kColorToolbarSearchFieldForeground] = {kColorSysOnSurface};
mixer[kColorToolbarSearchFieldForegroundPlaceholder] = {
kColorSysOnSurfaceSubtle};
mixer[kColorToolbarSearchFieldIcon] = {kColorSysOnSurfaceSubtle};
}
} // namespace ui