blob: 2e51a2527f26a20697432825e2d78426463bf345 [file] [log] [blame]
// Copyright 2024 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/css_system_color_mixer.h"
#include "build/build_config.h"
#include "ui/color/color_id.h"
#include "ui/color/color_mixer.h"
#include "ui/color/color_provider.h"
#include "ui/color/color_provider_key.h"
#include "ui/color/color_provider_utils.h"
#include "ui/color/color_recipe.h"
namespace ui {
#if !BUILDFLAG(IS_WIN) && !BUILDFLAG(IS_MAC)
void MapNativeColorsToCssSystemColors(ColorMixer& mixer, ColorProviderKey key) {
}
#endif
void AddDuskPageColorsToMixer(ColorMixer& mixer) {
mixer[kColorCssSystemBtnFace] = {SkColorSetRGB(0x2D, 0x32, 0x36)};
mixer[kColorCssSystemBtnText] = {SkColorSetRGB(0xB6, 0xF6, 0xF0)};
mixer[kColorCssSystemGrayText] = {SkColorSetRGB(0xA6, 0xA6, 0xA6)};
mixer[kColorCssSystemHighlight] = {SkColorSetRGB(0xA1, 0xBF, 0xDE)};
mixer[kColorCssSystemHighlightText] = {SkColorSetRGB(0x19, 0x22, 0x2D)};
mixer[kColorCssSystemHotlight] = {SkColorSetRGB(0x70, 0xEB, 0xDE)};
mixer[kColorCssSystemMenuHilight] = {SkColorSetRGB(0x80, 0x00, 0x80)};
mixer[kColorCssSystemScrollbar] = {SkColorSetRGB(0x2D, 0x32, 0x36)};
mixer[kColorCssSystemWindow] = {SkColorSetRGB(0x2D, 0x32, 0x36)};
mixer[kColorCssSystemWindowText] = {SK_ColorWHITE};
mixer[kColorCssSystemField] = {kColorCssSystemWindow};
mixer[kColorCssSystemFieldText] = {kColorCssSystemWindowText};
mixer[kColorCssSystemActiveText] = {kColorCssSystemHotlight};
mixer[kColorCssSystemLinkText] = {kColorCssSystemHotlight};
mixer[kColorCssSystemVisitedText] = {kColorCssSystemHotlight};
}
void AddDesertPageColorsToMixer(ColorMixer& mixer) {
mixer[kColorCssSystemBtnFace] = {SkColorSetRGB(0xFF, 0xFA, 0xEF)};
mixer[kColorCssSystemBtnText] = {SkColorSetRGB(0x20, 0x20, 0x20)};
mixer[kColorCssSystemGrayText] = {SkColorSetRGB(0x67, 0x67, 0x67)};
mixer[kColorCssSystemHighlight] = {SkColorSetRGB(0x90, 0x39, 0x09)};
mixer[kColorCssSystemHighlightText] = {SkColorSetRGB(0xFF, 0xF5, 0xE3)};
mixer[kColorCssSystemHotlight] = {SkColorSetRGB(0x00, 0x63, 0xB3)};
mixer[kColorCssSystemMenuHilight] = {SK_ColorBLACK};
mixer[kColorCssSystemScrollbar] = {SkColorSetRGB(0xFF, 0xFA, 0xEF)};
mixer[kColorCssSystemWindow] = {SkColorSetRGB(0xFF, 0xFA, 0xEF)};
mixer[kColorCssSystemWindowText] = {SkColorSetRGB(0x3D, 0x3D, 0x3D)};
mixer[kColorCssSystemField] = {kColorCssSystemWindow};
mixer[kColorCssSystemFieldText] = {kColorCssSystemWindowText};
mixer[kColorCssSystemActiveText] = {kColorCssSystemHotlight};
mixer[kColorCssSystemLinkText] = {kColorCssSystemHotlight};
mixer[kColorCssSystemVisitedText] = {kColorCssSystemHotlight};
}
void AddNightSkyPageColorsToMixer(ColorMixer& mixer) {
mixer[kColorCssSystemBtnFace] = {SK_ColorBLACK};
mixer[kColorCssSystemBtnText] = {SkColorSetRGB(0xFF, 0xEE, 0x32)};
mixer[kColorCssSystemGrayText] = {SkColorSetRGB(0xA6, 0xA6, 0xA6)};
mixer[kColorCssSystemHighlight] = {SkColorSetRGB(0xD5, 0xB4, 0xFD)};
mixer[kColorCssSystemHighlightText] = {SkColorSetRGB(0x2B, 0x2B, 0x2B)};
mixer[kColorCssSystemHotlight] = {SkColorSetRGB(0x80, 0x80, 0xFF)};
mixer[kColorCssSystemMenuHilight] = {SkColorSetRGB(0x80, 0x00, 0x80)};
mixer[kColorCssSystemScrollbar] = {SK_ColorBLACK};
mixer[kColorCssSystemWindow] = {SK_ColorBLACK};
mixer[kColorCssSystemWindowText] = {SK_ColorWHITE};
mixer[kColorCssSystemField] = {kColorCssSystemWindow};
mixer[kColorCssSystemFieldText] = {kColorCssSystemWindowText};
mixer[kColorCssSystemActiveText] = {kColorCssSystemHotlight};
mixer[kColorCssSystemLinkText] = {kColorCssSystemHotlight};
mixer[kColorCssSystemVisitedText] = {kColorCssSystemHotlight};
}
void AddAquaticPageColorsToMixer(ColorMixer& mixer) {
mixer[kColorCssSystemBtnFace] = {SkColorSetRGB(0x20, 0x20, 0x20)};
mixer[kColorCssSystemBtnText] = {SK_ColorWHITE};
mixer[kColorCssSystemGrayText] = {SkColorSetRGB(0xA6, 0xA6, 0xA6)};
mixer[kColorCssSystemHighlight] = {SkColorSetRGB(0x8E, 0xE3, 0xF0)};
mixer[kColorCssSystemHighlightText] = {SkColorSetRGB(0x26, 0x3B, 0x50)};
mixer[kColorCssSystemHotlight] = {SkColorSetRGB(0x75, 0xE9, 0xFC)};
mixer[kColorCssSystemMenuHilight] = {SkColorSetRGB(0x80, 0x00, 0x80)};
mixer[kColorCssSystemScrollbar] = {SkColorSetRGB(0x20, 0x20, 0x20)};
mixer[kColorCssSystemWindow] = {SkColorSetRGB(0x20, 0x20, 0x20)};
mixer[kColorCssSystemWindowText] = {SK_ColorWHITE};
mixer[kColorCssSystemField] = {kColorCssSystemWindow};
mixer[kColorCssSystemFieldText] = {kColorCssSystemWindowText};
mixer[kColorCssSystemActiveText] = {kColorCssSystemHotlight};
mixer[kColorCssSystemLinkText] = {kColorCssSystemHotlight};
mixer[kColorCssSystemVisitedText] = {kColorCssSystemHotlight};
}
void AddWhitePageColorsToMixer(ColorMixer& mixer) {
mixer[kColorCssSystemBtnFace] = {SK_ColorWHITE};
mixer[kColorCssSystemBtnText] = {SK_ColorBLACK};
mixer[kColorCssSystemGrayText] = {SkColorSetRGB(0x60, 0x00, 0x00)};
mixer[kColorCssSystemHighlight] = {SkColorSetRGB(0x37, 0x00, 0x6E)};
mixer[kColorCssSystemHighlightText] = {SK_ColorWHITE};
mixer[kColorCssSystemHotlight] = {SkColorSetRGB(0x00, 0x00, 0x9F)};
mixer[kColorCssSystemMenuHilight] = {SK_ColorBLACK};
mixer[kColorCssSystemScrollbar] = {SK_ColorWHITE};
mixer[kColorCssSystemWindow] = {SK_ColorWHITE};
mixer[kColorCssSystemWindowText] = {SK_ColorBLACK};
mixer[kColorCssSystemField] = {kColorCssSystemWindow};
mixer[kColorCssSystemFieldText] = {kColorCssSystemWindowText};
mixer[kColorCssSystemActiveText] = {kColorCssSystemHotlight};
mixer[kColorCssSystemLinkText] = {kColorCssSystemHotlight};
mixer[kColorCssSystemVisitedText] = {kColorCssSystemHotlight};
}
void AddCssSystemColorMixer(ColorProvider* provider,
const ColorProviderKey& key) {
ColorMixer& mixer = provider->AddMixer();
const ColorProviderKey::ForcedColors forced_colors = key.forced_colors;
switch (forced_colors) {
case ColorProviderKey::ForcedColors::kNone:
case ColorProviderKey::ForcedColors::kSystem:
CompleteDefaultCssSystemColorDefinition(
mixer, key.color_mode == ColorProviderKey::ColorMode::kDark);
MapNativeColorsToCssSystemColors(mixer, key);
break;
case ColorProviderKey::ForcedColors::kDusk:
AddDuskPageColorsToMixer(mixer);
break;
case ColorProviderKey::ForcedColors::kDesert:
AddDesertPageColorsToMixer(mixer);
break;
case ColorProviderKey::ForcedColors::kNightSky:
AddNightSkyPageColorsToMixer(mixer);
break;
case ColorProviderKey::ForcedColors::kAquatic:
AddAquaticPageColorsToMixer(mixer);
break;
case ColorProviderKey::ForcedColors::kWhite:
AddWhitePageColorsToMixer(mixer);
break;
default:
NOTREACHED();
}
// Don't apply system colors to web native controls if forced colors is
// `kNone`.
if (forced_colors != ColorProviderKey::ForcedColors::kNone) {
CompleteControlsForcedColorsDefinition(mixer);
}
}
} // namespace ui