summaryrefslogtreecommitdiffstats
path: root/webkit/glue
diff options
context:
space:
mode:
authorkeishi@chromium.org <keishi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-22 00:02:07 +0000
committerkeishi@chromium.org <keishi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-22 00:02:07 +0000
commit4ef44dbe1bb705b13c7be8d1e801a83acb518710 (patch)
tree8b0b4ccef2117432d05ad97d13ada2ad3470121a /webkit/glue
parent54e6ff8ff7194e231fa5dfe49304574f189495ca (diff)
downloadchromium_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.cc191
-rw-r--r--webkit/glue/webfallbackthemeengine_impl.h39
-rw-r--r--webkit/glue/webkit_glue.gypi2
-rw-r--r--webkit/glue/webkitplatformsupport_impl.cc7
-rw-r--r--webkit/glue/webkitplatformsupport_impl.h5
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_;
};