native_color_mixers_chromeos.cc 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. // Copyright 2022 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "ui/color/color_mixers.h"
  5. #include "third_party/skia/include/core/SkColor.h"
  6. #include "ui/color/color_id.h"
  7. #include "ui/color/color_mixer.h"
  8. #include "ui/color/color_provider.h"
  9. #include "ui/color/color_provider_manager.h"
  10. #include "ui/color/color_recipe.h"
  11. #include "ui/gfx/color_palette.h"
  12. #include "ui/gfx/color_utils.h"
  13. namespace ui {
  14. void AddNativeCoreColorMixer(ColorProvider* provider,
  15. const ColorProviderManager::Key& key) {
  16. ColorMixer& mixer = provider->AddMixer();
  17. mixer[kColorAshSystemUIMenuBackground] = {kColorMenuBackground};
  18. mixer[kColorAshSystemUIMenuIcon] = {kColorMenuIcon};
  19. mixer[kColorAshSystemUIMenuItemBackgroundSelected] = {
  20. kColorMenuItemBackgroundSelected};
  21. mixer[kColorAshSystemUIMenuSeparator] = {kColorMenuSeparator};
  22. bool dark_mode = key.color_mode == ColorProviderManager::ColorMode::kDark;
  23. // Add color initializations for highlight border.
  24. {
  25. const ui::ColorTransform light_border = {SkColorSetA(SK_ColorBLACK, 0x0F)};
  26. const auto default_background_color =
  27. ui::GetEndpointColorWithMinContrast({ui::kColorPrimaryBackground});
  28. const auto background_color =
  29. key.user_color.has_value() ? ui::ColorTransform(key.user_color.value())
  30. : default_background_color;
  31. mixer[kColorHighlightBorderBorder1] =
  32. dark_mode ? SetAlpha(background_color, SK_AlphaOPAQUE * 0.8f)
  33. : light_border;
  34. mixer[kColorHighlightBorderBorder2] =
  35. dark_mode ? SetAlpha(background_color, SK_AlphaOPAQUE * 0.6f)
  36. : light_border;
  37. mixer[kColorHighlightBorderBorder3] = light_border;
  38. mixer[kColorHighlightBorderHighlight1] = {
  39. SkColorSetA(SK_ColorWHITE, dark_mode ? 0x14 : 0x4C)};
  40. mixer[kColorHighlightBorderHighlight2] = {
  41. SkColorSetA(SK_ColorWHITE, dark_mode ? 0x0F : 0x33)};
  42. mixer[kColorHighlightBorderHighlight3] = {kColorHighlightBorderHighlight1};
  43. }
  44. if (dark_mode) {
  45. const bool high_elevation =
  46. key.elevation_mode == ColorProviderManager::ElevationMode::kHigh;
  47. const SkColor base_color =
  48. high_elevation
  49. ? color_utils::AlphaBlend(SK_ColorWHITE, gfx::kGoogleGrey900, 0.08f)
  50. : gfx::kGoogleGrey900;
  51. mixer[kColorNativeColor1] = {gfx::kGoogleBlue400};
  52. mixer[kColorNativeColor1Shade1] = {color_utils::AlphaBlend(
  53. gfx::kGoogleBlue600, base_color, high_elevation ? 0.4f : 0.3f)};
  54. mixer[kColorNativeColor1Shade2] = {
  55. color_utils::AlphaBlend(gfx::kGoogleBlue300, base_color, 0.3f)};
  56. mixer[kColorNativeColor2] = {gfx::kGoogleGreen400};
  57. mixer[kColorNativeColor3] = {gfx::kGoogleYellow400};
  58. mixer[kColorNativeColor4] = {gfx::kGoogleRed500};
  59. mixer[kColorNativeColor5] = {gfx::kGoogleMagenta300};
  60. mixer[kColorNativeColor6] = {gfx::kGoogleElectric300};
  61. mixer[kColorNativeBaseColor] = {base_color};
  62. mixer[kColorNativeSecondaryColor] = {
  63. high_elevation
  64. ? gfx::kGoogleGrey700
  65. : color_utils::AlphaBlend(gfx::kGoogleGrey200, base_color, 0.3f)};
  66. } else {
  67. mixer[kColorNativeColor1] = {gfx::kGoogleBlue500};
  68. mixer[kColorNativeColor1Shade1] = {gfx::kGoogleBlue300};
  69. mixer[kColorNativeColor1Shade2] = {gfx::kGoogleBlue100};
  70. mixer[kColorNativeColor2] = {gfx::kGoogleGreen500};
  71. mixer[kColorNativeColor3] = {gfx::kGoogleYellow500};
  72. mixer[kColorNativeColor4] = {gfx::kGoogleRed500};
  73. mixer[kColorNativeColor5] = {gfx::kGoogleMagenta400};
  74. mixer[kColorNativeColor6] = {gfx::kGoogleElectric400};
  75. mixer[kColorNativeBaseColor] = {SK_ColorWHITE};
  76. mixer[kColorNativeSecondaryColor] = {gfx::kGoogleGrey100};
  77. }
  78. }
  79. } // namespace ui