diff options
author | keishi@chromium.org <keishi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-22 00:02:07 +0000 |
---|---|---|
committer | keishi@chromium.org <keishi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-22 00:02:07 +0000 |
commit | 4ef44dbe1bb705b13c7be8d1e801a83acb518710 (patch) | |
tree | 8b0b4ccef2117432d05ad97d13ada2ad3470121a /webkit/glue | |
parent | 54e6ff8ff7194e231fa5dfe49304574f189495ca (diff) | |
download | chromium_src-4ef44dbe1bb705b13c7be8d1e801a83acb518710.zip chromium_src-4ef44dbe1bb705b13c7be8d1e801a83acb518710.tar.gz chromium_src-4ef44dbe1bb705b13c7be8d1e801a83acb518710.tar.bz2 |
Use the default theme as the fallback UI in Blink
Most native themes don't support zooming or styling required by Blink.
This introduces a FallbackTheme that can be used in these situations.
Blink side change: https://codereview.chromium.org/14108007/
BUG=84973
Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=200431
Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=200785
Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=201085
Review URL: https://chromiumcodereview.appspot.com/14424007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@201390 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue')
-rw-r--r-- | webkit/glue/webfallbackthemeengine_impl.cc | 191 | ||||
-rw-r--r-- | webkit/glue/webfallbackthemeengine_impl.h | 39 | ||||
-rw-r--r-- | webkit/glue/webkit_glue.gypi | 2 | ||||
-rw-r--r-- | webkit/glue/webkitplatformsupport_impl.cc | 7 | ||||
-rw-r--r-- | webkit/glue/webkitplatformsupport_impl.h | 5 |
5 files changed, 242 insertions, 2 deletions
diff --git a/webkit/glue/webfallbackthemeengine_impl.cc b/webkit/glue/webfallbackthemeengine_impl.cc new file mode 100644 index 0000000..213e3a7 --- /dev/null +++ b/webkit/glue/webfallbackthemeengine_impl.cc @@ -0,0 +1,191 @@ +// Copyright (c) 2012 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 "webkit/glue/webfallbackthemeengine_impl.h" + +#include "skia/ext/platform_canvas.h" +#include "third_party/WebKit/Source/Platform/chromium/public/WebRect.h" +#include "third_party/WebKit/Source/Platform/chromium/public/WebSize.h" +#include "ui/native_theme/fallback_theme.h" + +using WebKit::WebCanvas; +using WebKit::WebColor; +using WebKit::WebRect; +using WebKit::WebFallbackThemeEngine; + +namespace webkit_glue { + +static ui::NativeTheme::Part NativeThemePart( + WebFallbackThemeEngine::Part part) { + switch (part) { + case WebFallbackThemeEngine::PartScrollbarDownArrow: + return ui::NativeTheme::kScrollbarDownArrow; + case WebFallbackThemeEngine::PartScrollbarLeftArrow: + return ui::NativeTheme::kScrollbarLeftArrow; + case WebFallbackThemeEngine::PartScrollbarRightArrow: + return ui::NativeTheme::kScrollbarRightArrow; + case WebFallbackThemeEngine::PartScrollbarUpArrow: + return ui::NativeTheme::kScrollbarUpArrow; + case WebFallbackThemeEngine::PartScrollbarHorizontalThumb: + return ui::NativeTheme::kScrollbarHorizontalThumb; + case WebFallbackThemeEngine::PartScrollbarVerticalThumb: + return ui::NativeTheme::kScrollbarVerticalThumb; + case WebFallbackThemeEngine::PartScrollbarHorizontalTrack: + return ui::NativeTheme::kScrollbarHorizontalTrack; + case WebFallbackThemeEngine::PartScrollbarVerticalTrack: + return ui::NativeTheme::kScrollbarVerticalTrack; + case WebFallbackThemeEngine::PartCheckbox: + return ui::NativeTheme::kCheckbox; + case WebFallbackThemeEngine::PartRadio: + return ui::NativeTheme::kRadio; + case WebFallbackThemeEngine::PartButton: + return ui::NativeTheme::kPushButton; + case WebFallbackThemeEngine::PartTextField: + return ui::NativeTheme::kTextField; + case WebFallbackThemeEngine::PartMenuList: + return ui::NativeTheme::kMenuList; + case WebFallbackThemeEngine::PartSliderTrack: + return ui::NativeTheme::kSliderTrack; + case WebFallbackThemeEngine::PartSliderThumb: + return ui::NativeTheme::kSliderThumb; + case WebFallbackThemeEngine::PartInnerSpinButton: + return ui::NativeTheme::kInnerSpinButton; + case WebFallbackThemeEngine::PartProgressBar: + return ui::NativeTheme::kProgressBar; + default: + return ui::NativeTheme::kScrollbarDownArrow; + } +} + +static ui::NativeTheme::State NativeThemeState( + WebFallbackThemeEngine::State state) { + switch (state) { + case WebFallbackThemeEngine::StateDisabled: + return ui::NativeTheme::kDisabled; + case WebFallbackThemeEngine::StateHover: + return ui::NativeTheme::kHovered; + case WebFallbackThemeEngine::StateNormal: + return ui::NativeTheme::kNormal; + case WebFallbackThemeEngine::StatePressed: + return ui::NativeTheme::kPressed; + default: + return ui::NativeTheme::kDisabled; + } +} + +static void GetNativeThemeExtraParams( + WebFallbackThemeEngine::Part part, + WebFallbackThemeEngine::State state, + const WebFallbackThemeEngine::ExtraParams* extra_params, + ui::NativeTheme::ExtraParams* native_theme_extra_params) { + switch (part) { + case WebFallbackThemeEngine::PartScrollbarHorizontalTrack: + case WebFallbackThemeEngine::PartScrollbarVerticalTrack: + native_theme_extra_params->scrollbar_track.track_x = + extra_params->scrollbarTrack.trackX; + native_theme_extra_params->scrollbar_track.track_y = + extra_params->scrollbarTrack.trackY; + native_theme_extra_params->scrollbar_track.track_width = + extra_params->scrollbarTrack.trackWidth; + native_theme_extra_params->scrollbar_track.track_height = + extra_params->scrollbarTrack.trackHeight; + break; + case WebFallbackThemeEngine::PartCheckbox: + native_theme_extra_params->button.checked = extra_params->button.checked; + native_theme_extra_params->button.indeterminate = + extra_params->button.indeterminate; + break; + case WebFallbackThemeEngine::PartRadio: + native_theme_extra_params->button.checked = extra_params->button.checked; + break; + case WebFallbackThemeEngine::PartButton: + native_theme_extra_params->button.is_default = + extra_params->button.isDefault; + native_theme_extra_params->button.has_border = + extra_params->button.hasBorder; + // Native buttons have a different focus style. + native_theme_extra_params->button.is_focused = false; + native_theme_extra_params->button.background_color = + extra_params->button.backgroundColor; + break; + case WebFallbackThemeEngine::PartTextField: + native_theme_extra_params->text_field.is_text_area = + extra_params->textField.isTextArea; + native_theme_extra_params->text_field.is_listbox = + extra_params->textField.isListbox; + native_theme_extra_params->text_field.background_color = + extra_params->textField.backgroundColor; + break; + case WebFallbackThemeEngine::PartMenuList: + native_theme_extra_params->menu_list.has_border = + extra_params->menuList.hasBorder; + native_theme_extra_params->menu_list.has_border_radius = + extra_params->menuList.hasBorderRadius; + native_theme_extra_params->menu_list.arrow_x = + extra_params->menuList.arrowX; + native_theme_extra_params->menu_list.arrow_y = + extra_params->menuList.arrowY; + native_theme_extra_params->menu_list.background_color = + extra_params->menuList.backgroundColor; + break; + case WebFallbackThemeEngine::PartSliderTrack: + case WebFallbackThemeEngine::PartSliderThumb: + native_theme_extra_params->slider.vertical = + extra_params->slider.vertical; + native_theme_extra_params->slider.in_drag = extra_params->slider.inDrag; + break; + case WebFallbackThemeEngine::PartInnerSpinButton: + native_theme_extra_params->inner_spin.spin_up = + extra_params->innerSpin.spinUp; + native_theme_extra_params->inner_spin.read_only = + extra_params->innerSpin.readOnly; + break; + case WebFallbackThemeEngine::PartProgressBar: + native_theme_extra_params->progress_bar.determinate = + extra_params->progressBar.determinate; + native_theme_extra_params->progress_bar.value_rect_x = + extra_params->progressBar.valueRectX; + native_theme_extra_params->progress_bar.value_rect_y = + extra_params->progressBar.valueRectY; + native_theme_extra_params->progress_bar.value_rect_width = + extra_params->progressBar.valueRectWidth; + native_theme_extra_params->progress_bar.value_rect_height = + extra_params->progressBar.valueRectHeight; + break; + default: + break; // Parts that have no extra params get here. + } +} + +WebFallbackThemeEngineImpl::WebFallbackThemeEngineImpl() + : theme_(new ui::FallbackTheme()) { +} + +WebFallbackThemeEngineImpl::~WebFallbackThemeEngineImpl() {} + +WebKit::WebSize WebFallbackThemeEngineImpl::getSize( + WebFallbackThemeEngine::Part part) { + ui::NativeTheme::ExtraParams extra; + return theme_->GetPartSize(NativeThemePart(part), + ui::NativeTheme::kNormal, + extra); +} + +void WebFallbackThemeEngineImpl::paint( + WebKit::WebCanvas* canvas, + WebFallbackThemeEngine::Part part, + WebFallbackThemeEngine::State state, + const WebKit::WebRect& rect, + const WebFallbackThemeEngine::ExtraParams* extra_params) { + ui::NativeTheme::ExtraParams native_theme_extra_params; + GetNativeThemeExtraParams( + part, state, extra_params, &native_theme_extra_params); + theme_->Paint(canvas, + NativeThemePart(part), + NativeThemeState(state), + gfx::Rect(rect), + native_theme_extra_params); +} + +} // namespace webkit_glue diff --git a/webkit/glue/webfallbackthemeengine_impl.h b/webkit/glue/webfallbackthemeengine_impl.h new file mode 100644 index 0000000..0887774 --- /dev/null +++ b/webkit/glue/webfallbackthemeengine_impl.h @@ -0,0 +1,39 @@ +// Copyright (c) 2011 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. + +#ifndef WEBKIT_GLUE_WEBFALLBACKTHEMEENGINE_IMPL_H_ +#define WEBKIT_GLUE_WEBFALLBACKTHEMEENGINE_IMPL_H_ + +#include "base/memory/scoped_ptr.h" +#include "third_party/WebKit/Source/Platform/chromium/public/WebFallbackThemeEngine.h" + +namespace ui { +class FallbackTheme; +} + +namespace webkit_glue { + +class WebFallbackThemeEngineImpl : public WebKit::WebFallbackThemeEngine { + public: + WebFallbackThemeEngineImpl(); + virtual ~WebFallbackThemeEngineImpl(); + + // WebFallbackThemeEngine methods: + virtual WebKit::WebSize getSize(WebKit::WebFallbackThemeEngine::Part); + virtual void paint( + WebKit::WebCanvas* canvas, + WebKit::WebFallbackThemeEngine::Part part, + WebKit::WebFallbackThemeEngine::State state, + const WebKit::WebRect& rect, + const WebKit::WebFallbackThemeEngine::ExtraParams* extra_params); + + private: + scoped_ptr<ui::FallbackTheme> theme_; + + DISALLOW_COPY_AND_ASSIGN(WebFallbackThemeEngineImpl); +}; + +} // namespace webkit_glue + +#endif // WEBKIT_GLUE_WEBFALLBACKTHEMEENGINE_IMPL_H_ diff --git a/webkit/glue/webkit_glue.gypi b/webkit/glue/webkit_glue.gypi index 8311e2c..b05bf75 100644 --- a/webkit/glue/webkit_glue.gypi +++ b/webkit/glue/webkit_glue.gypi @@ -228,6 +228,8 @@ 'webdropdata.cc', 'webdropdata_win.cc', 'webdropdata.h', + 'webfallbackthemeengine_impl.cc', + 'webfallbackthemeengine_impl.h', 'webfileutilities_impl.cc', 'webfileutilities_impl.h', 'webkit_glue.cc', diff --git a/webkit/glue/webkitplatformsupport_impl.cc b/webkit/glue/webkitplatformsupport_impl.cc index 00900a7..af0ec80 100644 --- a/webkit/glue/webkitplatformsupport_impl.cc +++ b/webkit/glue/webkitplatformsupport_impl.cc @@ -62,6 +62,7 @@ using WebKit::WebAudioBus; using WebKit::WebCookie; using WebKit::WebData; +using WebKit::WebFallbackThemeEngine; using WebKit::WebLocalizedString; using WebKit::WebPluginListBuilder; using WebKit::WebString; @@ -383,7 +384,11 @@ void WebKitPlatformSupportImpl::SetFlingCurveParameters( } WebThemeEngine* WebKitPlatformSupportImpl::themeEngine() { - return &theme_engine_; + return &native_theme_engine_; +} + +WebFallbackThemeEngine* WebKitPlatformSupportImpl::fallbackThemeEngine() { + return &fallback_theme_engine_; } WebURLLoader* WebKitPlatformSupportImpl::createURLLoader() { diff --git a/webkit/glue/webkitplatformsupport_impl.h b/webkit/glue/webkitplatformsupport_impl.h index 145f631..e8c2b28 100644 --- a/webkit/glue/webkitplatformsupport_impl.h +++ b/webkit/glue/webkitplatformsupport_impl.h @@ -14,6 +14,7 @@ #include "third_party/WebKit/Source/Platform/chromium/public/WebURLError.h" #include "ui/base/layout.h" #include "webkit/glue/resource_loader_bridge.h" +#include "webkit/glue/webfallbackthemeengine_impl.h" #include "webkit/glue/webkit_glue_export.h" #if defined(USE_DEFAULT_RENDER_THEME) @@ -57,6 +58,7 @@ class WEBKIT_GLUE_EXPORT WebKitPlatformSupportImpl : // Platform methods (partial implementation): virtual WebKit::WebThemeEngine* themeEngine(); + virtual WebKit::WebFallbackThemeEngine* fallbackThemeEngine(); virtual base::PlatformFile databaseOpenFile( const WebKit::WebString& vfs_file_name, int desired_flags); @@ -186,7 +188,8 @@ class WEBKIT_GLUE_EXPORT WebKitPlatformSupportImpl : double shared_timer_fire_time_; bool shared_timer_fire_time_was_set_while_suspended_; int shared_timer_suspended_; // counter - WebThemeEngineImpl theme_engine_; + WebThemeEngineImpl native_theme_engine_; + WebFallbackThemeEngineImpl fallback_theme_engine_; base::ThreadLocalStorage::Slot current_thread_slot_; scoped_ptr<FlingCurveConfiguration> fling_curve_configuration_; }; |