1 // Copyright 2019 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 
5 #include "content/child/webthemeengine_impl_mac.h"
6 
7 #include "content/child/webthemeengine_impl_conversions.h"
8 #include "ui/native_theme/native_theme.h"
9 
10 namespace content {
11 
GetForcedColors() const12 blink::ForcedColors WebThemeEngineMac::GetForcedColors() const {
13   return forced_colors_;
14 }
15 
SetForcedColors(const blink::ForcedColors forced_colors)16 void WebThemeEngineMac::SetForcedColors(
17     const blink::ForcedColors forced_colors) {
18   forced_colors_ = forced_colors;
19 }
20 
Paint(cc::PaintCanvas * canvas,WebThemeEngine::Part part,WebThemeEngine::State state,const gfx::Rect & rect,const WebThemeEngine::ExtraParams * extra_params,blink::mojom::ColorScheme color_scheme)21 void WebThemeEngineMac::Paint(cc::PaintCanvas* canvas,
22                               WebThemeEngine::Part part,
23                               WebThemeEngine::State state,
24                               const gfx::Rect& rect,
25                               const WebThemeEngine::ExtraParams* extra_params,
26                               blink::mojom::ColorScheme color_scheme) {
27   if (IsScrollbarPart(part)) {
28     PaintMacScrollBarParts(canvas, part, state, rect, extra_params,
29                            color_scheme);
30     return;
31   }
32 
33   WebThemeEngineDefault::Paint(canvas, part, state, rect, extra_params,
34                                color_scheme);
35 }
36 
IsScrollbarPart(WebThemeEngine::Part part)37 bool WebThemeEngineMac::IsScrollbarPart(WebThemeEngine::Part part) {
38   switch (part) {
39     case WebThemeEngine::kPartScrollbarHorizontalTrack:
40     case WebThemeEngine::kPartScrollbarVerticalTrack:
41     case WebThemeEngine::kPartScrollbarHorizontalThumb:
42     case WebThemeEngine::kPartScrollbarVerticalThumb:
43     case WebThemeEngine::kPartScrollbarCorner:
44       return true;
45     default:
46       return false;
47   }
48 }
49 
PaintMacScrollBarParts(cc::PaintCanvas * canvas,WebThemeEngine::Part part,WebThemeEngine::State state,const gfx::Rect & rect,const WebThemeEngine::ExtraParams * extra_params,blink::mojom::ColorScheme color_scheme)50 void WebThemeEngineMac::PaintMacScrollBarParts(
51     cc::PaintCanvas* canvas,
52     WebThemeEngine::Part part,
53     WebThemeEngine::State state,
54     const gfx::Rect& rect,
55     const WebThemeEngine::ExtraParams* extra_params,
56     blink::mojom::ColorScheme color_scheme) {
57   ui::NativeTheme::ExtraParams native_theme_extra_params;
58   native_theme_extra_params.scrollbar_extra.is_hovering =
59       extra_params->scrollbar_extra.is_hovering;
60   native_theme_extra_params.scrollbar_extra.is_overlay =
61       extra_params->scrollbar_extra.is_overlay;
62   switch (extra_params->scrollbar_extra.orientation) {
63     case WebThemeEngine::kVerticalOnRight:
64       native_theme_extra_params.scrollbar_extra.orientation =
65           ui::NativeTheme::ScrollbarOrientation::kVerticalOnRight;
66       break;
67     case WebThemeEngine::kVerticalOnLeft:
68       native_theme_extra_params.scrollbar_extra.orientation =
69           ui::NativeTheme::ScrollbarOrientation::kVerticalOnLeft;
70       break;
71     case WebThemeEngine::kHorizontal:
72       native_theme_extra_params.scrollbar_extra.orientation =
73           ui::NativeTheme::ScrollbarOrientation::kHorizontal;
74       break;
75   }
76 
77   ui::NativeTheme::GetInstanceForNativeUi()->Paint(
78       canvas, NativeThemePart(part), NativeThemeState(state), rect,
79       native_theme_extra_params, NativeColorScheme(color_scheme));
80 }
81 
82 }  // namespace content
83