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