common_theme.cc 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. // Copyright (c) 2012 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/native_theme/common_theme.h"
  5. #include "base/logging.h"
  6. #include "base/notreached.h"
  7. #include "build/build_config.h"
  8. #include "build/chromeos_buildflags.h"
  9. #include "ui/base/resource/resource_bundle.h"
  10. #include "ui/color/color_provider.h"
  11. #include "ui/color/color_provider_utils.h"
  12. #include "ui/gfx/canvas.h"
  13. #include "ui/gfx/color_palette.h"
  14. #include "ui/gfx/color_utils.h"
  15. #include "ui/gfx/geometry/rect.h"
  16. #include "ui/gfx/geometry/skia_conversions.h"
  17. #include "ui/gfx/image/image_skia.h"
  18. namespace ui {
  19. void CommonThemePaintMenuItemBackground(
  20. const NativeTheme* theme,
  21. const ColorProvider* color_provider,
  22. cc::PaintCanvas* canvas,
  23. NativeTheme::State state,
  24. const gfx::Rect& rect,
  25. const NativeTheme::MenuItemExtraParams& menu_item) {
  26. DCHECK(color_provider);
  27. cc::PaintFlags flags;
  28. switch (state) {
  29. case NativeTheme::kNormal:
  30. case NativeTheme::kDisabled: {
  31. ui::ColorId id = kColorMenuBackground;
  32. #if BUILDFLAG(IS_CHROMEOS_ASH)
  33. id = kColorAshSystemUIMenuBackground;
  34. #endif
  35. flags.setColor(color_provider->GetColor(id));
  36. break;
  37. }
  38. case NativeTheme::kHovered: {
  39. ui::ColorId id = kColorMenuItemBackgroundSelected;
  40. #if BUILDFLAG(IS_CHROMEOS_ASH)
  41. id = kColorAshSystemUIMenuItemBackgroundSelected;
  42. #endif
  43. flags.setColor(color_provider->GetColor(id));
  44. break;
  45. }
  46. default:
  47. NOTREACHED() << "Invalid state " << state;
  48. break;
  49. }
  50. if (menu_item.corner_radius > 0) {
  51. const SkScalar radius = SkIntToScalar(menu_item.corner_radius);
  52. canvas->drawRoundRect(gfx::RectToSkRect(rect), radius, radius, flags);
  53. return;
  54. }
  55. canvas->drawRect(gfx::RectToSkRect(rect), flags);
  56. }
  57. } // namespace ui