summaryrefslogtreecommitdiffstats
path: root/webkit
diff options
context:
space:
mode:
Diffstat (limited to 'webkit')
-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
-rw-r--r--webkit/support/test_webkit_client.cc7
7 files changed, 137 insertions, 6 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 {
diff --git a/webkit/support/test_webkit_client.cc b/webkit/support/test_webkit_client.cc
index 8382fd0..2bc1494 100644
--- a/webkit/support/test_webkit_client.cc
+++ b/webkit/support/test_webkit_client.cc
@@ -28,7 +28,6 @@
#include "third_party/WebKit/WebKit/chromium/public/WebStorageEventDispatcher.h"
#include "third_party/WebKit/WebKit/chromium/public/WebStorageNamespace.h"
#include "third_party/WebKit/WebKit/chromium/public/WebString.h"
-#include "third_party/WebKit/WebKit/chromium/public/WebThemeEngine.h"
#include "third_party/WebKit/WebKit/chromium/public/WebURL.h"
#include "webkit/appcache/web_application_cache_host_impl.h"
#include "webkit/database/vfs_backend.h"
@@ -51,9 +50,11 @@
#include "v8/include/v8.h"
#if defined(OS_WIN)
+#include "third_party/WebKit/WebKit/chromium/public/win/WebThemeEngine.h"
#include "webkit/tools/test_shell/test_shell_webthemeengine.h"
-#endif
-#if defined(OS_MACOSX)
+#elif defined(OS_LINUX)
+#include "third_party/WebKit/WebKit/chromium/public/linux/WebThemeEngine.h"
+#elif defined(OS_MACOSX)
#include "base/mac_util.h"
#endif