| // Copyright 2019 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "content/child/webthemeengine_impl_mac.h" |
| |
| #include "content/child/webthemeengine_impl_conversions.h" |
| #include "ui/native_theme/native_theme.h" |
| |
| namespace content { |
| |
| blink::ForcedColors WebThemeEngineMac::GetForcedColors() const { |
| return forced_colors_; |
| } |
| |
| void WebThemeEngineMac::SetForcedColors( |
| const blink::ForcedColors forced_colors) { |
| forced_colors_ = forced_colors; |
| } |
| |
| void WebThemeEngineMac::Paint(cc::PaintCanvas* canvas, |
| WebThemeEngine::Part part, |
| WebThemeEngine::State state, |
| const blink::WebRect& rect, |
| const WebThemeEngine::ExtraParams* extra_params, |
| blink::WebColorScheme color_scheme) { |
| if (IsScrollbarPart(part)) { |
| PaintMacScrollBarParts(canvas, part, state, rect, extra_params, |
| color_scheme); |
| return; |
| } |
| |
| WebThemeEngineDefault::Paint(canvas, part, state, rect, extra_params, |
| color_scheme); |
| } |
| |
| bool WebThemeEngineMac::IsScrollbarPart(WebThemeEngine::Part part) { |
| switch (part) { |
| case WebThemeEngine::kPartScrollbarHorizontalTrack: |
| case WebThemeEngine::kPartScrollbarVerticalTrack: |
| case WebThemeEngine::kPartScrollbarHorizontalThumb: |
| case WebThemeEngine::kPartScrollbarVerticalThumb: |
| case WebThemeEngine::kPartScrollbarCorner: |
| return true; |
| default: |
| return false; |
| } |
| } |
| |
| void WebThemeEngineMac::PaintMacScrollBarParts( |
| cc::PaintCanvas* canvas, |
| WebThemeEngine::Part part, |
| WebThemeEngine::State state, |
| const blink::WebRect& rect, |
| const WebThemeEngine::ExtraParams* extra_params, |
| blink::WebColorScheme color_scheme) { |
| ui::NativeTheme::ExtraParams native_theme_extra_params; |
| native_theme_extra_params.scrollbar_extra.is_hovering = |
| extra_params->scrollbar_extra.is_hovering; |
| native_theme_extra_params.scrollbar_extra.is_overlay = |
| extra_params->scrollbar_extra.is_overlay; |
| switch (extra_params->scrollbar_extra.orientation) { |
| case WebThemeEngine::kVerticalOnRight: |
| native_theme_extra_params.scrollbar_extra.orientation = |
| ui::NativeTheme::ScrollbarOrientation::kVerticalOnRight; |
| break; |
| case WebThemeEngine::kVerticalOnLeft: |
| native_theme_extra_params.scrollbar_extra.orientation = |
| ui::NativeTheme::ScrollbarOrientation::kVerticalOnLeft; |
| break; |
| case WebThemeEngine::kHorizontal: |
| native_theme_extra_params.scrollbar_extra.orientation = |
| ui::NativeTheme::ScrollbarOrientation::kHorizontal; |
| break; |
| } |
| |
| ui::NativeTheme::GetInstanceForNativeUi()->Paint( |
| canvas, NativeThemePart(part), NativeThemeState(state), gfx::Rect(rect), |
| native_theme_extra_params, NativeColorScheme(color_scheme)); |
| } |
| |
| } // namespace content |