summaryrefslogtreecommitdiffstats
path: root/webkit/glue
diff options
context:
space:
mode:
authordavemoore@chromium.org <davemoore@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-09 03:25:30 +0000
committerdavemoore@chromium.org <davemoore@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-09 03:25:30 +0000
commit7281e4cf77a6ebcd7c79db4f87629c7565ff4289 (patch)
treea0c5b4c4b7b64453ffe6f5cc606e0e9384808e74 /webkit/glue
parentb83af49ec37d7354cd6134d0cac0ea85101f9c4f (diff)
downloadchromium_src-7281e4cf77a6ebcd7c79db4f87629c7565ff4289.zip
chromium_src-7281e4cf77a6ebcd7c79db4f87629c7565ff4289.tar.gz
chromium_src-7281e4cf77a6ebcd7c79db4f87629c7565ff4289.tar.bz2
Move implementation of linux scrollbars from webkit using new
WebThemeEngine api. Also implement chromeos specific version. BUG=chromium-os:6857 TEST=Verify that both linux and chromeos scrollbars look right. Review URL: http://codereview.chromium.org/3618014 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@62068 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue')
-rw-r--r--webkit/glue/webkit_glue.gypi1
-rw-r--r--webkit/glue/webkitclient_impl.cc2
-rw-r--r--webkit/glue/webkitclient_impl.h5
-rw-r--r--webkit/glue/webthemeengine_impl_linux.cc100
-rw-r--r--webkit/glue/webthemeengine_impl_linux.h26
-rw-r--r--webkit/glue/webthemeengine_impl_win.h2
6 files changed, 133 insertions, 3 deletions
diff --git a/webkit/glue/webkit_glue.gypi b/webkit/glue/webkit_glue.gypi
index 50dda7a..68336aa 100644
--- a/webkit/glue/webkit_glue.gypi
+++ b/webkit/glue/webkit_glue.gypi
@@ -381,6 +381,7 @@
'websocketstreamhandle_delegate.h',
'websocketstreamhandle_impl.cc',
'websocketstreamhandle_impl.h',
+ 'webthemeengine_impl_linux.cc',
'webthemeengine_impl_win.cc',
'weburlloader_impl.cc',
'weburlloader_impl.h',
diff --git a/webkit/glue/webkitclient_impl.cc b/webkit/glue/webkitclient_impl.cc
index c65d176..e9b05f1 100644
--- a/webkit/glue/webkitclient_impl.cc
+++ b/webkit/glue/webkitclient_impl.cc
@@ -171,7 +171,7 @@ WebKitClientImpl::~WebKitClientImpl() {
}
WebThemeEngine* WebKitClientImpl::themeEngine() {
-#if defined(OS_WIN)
+#if defined(OS_WIN) || defined(OS_LINUX)
return &theme_engine_;
#else
return NULL;
diff --git a/webkit/glue/webkitclient_impl.h b/webkit/glue/webkitclient_impl.h
index 607677f..68d0eaf 100644
--- a/webkit/glue/webkitclient_impl.h
+++ b/webkit/glue/webkitclient_impl.h
@@ -10,8 +10,11 @@
#include "third_party/WebKit/WebKit/chromium/public/WebKitClient.h"
#if defined(OS_WIN)
#include "webkit/glue/webthemeengine_impl_win.h"
+#elif defined(OS_LINUX)
+#include "webkit/glue/webthemeengine_impl_linux.h"
#endif
+
class MessageLoop;
namespace webkit_glue {
@@ -71,7 +74,7 @@ class WebKitClientImpl : public WebKit::WebKitClient {
double shared_timer_fire_time_;
int shared_timer_suspended_; // counter
-#if defined(OS_WIN)
+#if defined(OS_WIN) || defined(OS_LINUX)
WebThemeEngineImpl theme_engine_;
#endif
};
diff --git a/webkit/glue/webthemeengine_impl_linux.cc b/webkit/glue/webthemeengine_impl_linux.cc
new file mode 100644
index 0000000..d5cc9b4
--- /dev/null
+++ b/webkit/glue/webthemeengine_impl_linux.cc
@@ -0,0 +1,100 @@
+// Copyright (c) 2010 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/webthemeengine_impl_linux.h"
+
+#include "gfx/native_theme_linux.h"
+#include "skia/ext/platform_canvas.h"
+#include "third_party/WebKit/WebKit/chromium/public/WebRect.h"
+#include "third_party/WebKit/WebKit/chromium/public/WebSize.h"
+
+using WebKit::WebCanvas;
+using WebKit::WebColor;
+using WebKit::WebRect;
+
+namespace webkit_glue {
+
+static gfx::Rect WebRectToRect(const WebRect& rect) {
+ return gfx::Rect(rect.x, rect.y, rect.width, rect.height);
+}
+
+static gfx::NativeThemeLinux::Part NativeThemePart(
+ WebKit::WebThemeEngine::Part part) {
+ switch (part) {
+ case WebKit::WebThemeEngine::PartScrollbarDownArrow:
+ return gfx::NativeThemeLinux::kScrollbarDownArrow;
+ case WebKit::WebThemeEngine::PartScrollbarLeftArrow:
+ return gfx::NativeThemeLinux::kScrollbarLeftArrow;
+ case WebKit::WebThemeEngine::PartScrollbarRightArrow:
+ return gfx::NativeThemeLinux::kScrollbarRightArrow;
+ case WebKit::WebThemeEngine::PartScrollbarUpArrow:
+ return gfx::NativeThemeLinux::kScrollbarUpArrow;
+ case WebKit::WebThemeEngine::PartScrollbarHorizontalThumb:
+ return gfx::NativeThemeLinux::kScrollbarHorizontalThumb;
+ case WebKit::WebThemeEngine::PartScrollbarVerticalThumb:
+ return gfx::NativeThemeLinux::kScrollbarVerticalThumb;
+ case WebKit::WebThemeEngine::PartScrollbarHoriztonalTrack:
+ return gfx::NativeThemeLinux::kScrollbarHorizontalTrack;
+ case WebKit::WebThemeEngine::PartScrollbarVerticalTrack:
+ return gfx::NativeThemeLinux::kScrollbarVerticalTrack;
+ default:
+ return gfx::NativeThemeLinux::kScrollbarDownArrow;
+ }
+}
+
+static gfx::NativeThemeLinux::State NativeThemeState(
+ WebKit::WebThemeEngine::State state) {
+ switch (state) {
+ case WebKit::WebThemeEngine::StateDisabled:
+ return gfx::NativeThemeLinux::kDisabled;
+ case WebKit::WebThemeEngine::StateHover:
+ return gfx::NativeThemeLinux::kHover;
+ case WebKit::WebThemeEngine::StateNormal:
+ return gfx::NativeThemeLinux::kNormal;
+ case WebKit::WebThemeEngine::StatePressed:
+ return gfx::NativeThemeLinux::kPressed;
+ default:
+ return gfx::NativeThemeLinux::kDisabled;
+ }
+}
+
+static void GetNativeThemeExtraParams(
+ WebKit::WebThemeEngine::Part part,
+ WebKit::WebThemeEngine::State state,
+ const WebKit::WebThemeEngine::ExtraParams* extra_params,
+ gfx::NativeThemeLinux::ExtraParams* native_theme_extra_params) {
+ if (part == WebKit::WebThemeEngine::PartScrollbarHoriztonalTrack ||
+ part == WebKit::WebThemeEngine::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;
+ }
+}
+
+WebKit::WebSize WebThemeEngineImpl::getSize(WebKit::WebThemeEngine::Part part) {
+ return gfx::NativeThemeLinux::instance()->GetSize(NativeThemePart(part));
+}
+
+void WebThemeEngineImpl::paint(
+ WebKit::WebCanvas* canvas,
+ WebKit::WebThemeEngine::Part part,
+ WebKit::WebThemeEngine::State state,
+ const WebKit::WebRect& rect,
+ const WebKit::WebThemeEngine::ExtraParams* extra_params) {
+ gfx::NativeThemeLinux::ExtraParams native_theme_extra_params;
+ GetNativeThemeExtraParams(
+ part, state, extra_params, &native_theme_extra_params);
+ gfx::NativeThemeLinux::instance()->Paint(
+ canvas,
+ NativeThemePart(part),
+ NativeThemeState(state),
+ WebRectToRect(rect),
+ native_theme_extra_params);
+}
+} // namespace webkit_glue
diff --git a/webkit/glue/webthemeengine_impl_linux.h b/webkit/glue/webthemeengine_impl_linux.h
new file mode 100644
index 0000000..265b80c
--- /dev/null
+++ b/webkit/glue/webthemeengine_impl_linux.h
@@ -0,0 +1,26 @@
+// Copyright (c) 2010 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 WEBTHEMEENGINE_IMPL_LINUX_H_
+#define WEBTHEMEENGINE_IMPL_LINUX_H_
+
+#include "third_party/WebKit/WebKit/chromium/public/linux/WebThemeEngine.h"
+
+namespace webkit_glue {
+
+class WebThemeEngineImpl : public WebKit::WebThemeEngine {
+ public:
+ // WebThemeEngine methods:
+ virtual WebKit::WebSize getSize(WebKit::WebThemeEngine::Part);
+ virtual void paint(
+ WebKit::WebCanvas*,
+ WebKit::WebThemeEngine::Part,
+ WebKit::WebThemeEngine::State,
+ const WebKit::WebRect&,
+ const WebKit::WebThemeEngine::ExtraParams*);
+};
+
+} // namespace webkit_glue
+
+#endif // WEBTHEMEENGINE_IMPL_LINUX_H_
diff --git a/webkit/glue/webthemeengine_impl_win.h b/webkit/glue/webthemeengine_impl_win.h
index 533ea19..6e749c4 100644
--- a/webkit/glue/webthemeengine_impl_win.h
+++ b/webkit/glue/webthemeengine_impl_win.h
@@ -5,7 +5,7 @@
#ifndef WEBTHEMEENGINE_IMPL_WIN_H_
#define WEBTHEMEENGINE_IMPL_WIN_H_
-#include "third_party/WebKit/WebKit/chromium/public/WebThemeEngine.h"
+#include "third_party/WebKit/WebKit/chromium/public/win/WebThemeEngine.h"
namespace webkit_glue {