diff options
author | evanm@google.com <evanm@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-11-11 18:28:50 +0000 |
---|---|---|
committer | evanm@google.com <evanm@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-11-11 18:28:50 +0000 |
commit | be18d3eae2db247dc5a0e211cc97579620324641 (patch) | |
tree | 4b3bfe1413bd6c714a048e5cca80a02938fce9e3 /webkit/glue | |
parent | 0d8a7a1b0662e50c962cd3f14d7ef1a65d5a630b (diff) | |
download | chromium_src-be18d3eae2db247dc5a0e211cc97579620324641.zip chromium_src-be18d3eae2db247dc5a0e211cc97579620324641.tar.gz chromium_src-be18d3eae2db247dc5a0e211cc97579620324641.tar.bz2 |
Basic cursor support.
Review URL: http://codereview.chromium.org/9744
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@5185 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue')
-rw-r--r-- | webkit/glue/SConscript | 5 | ||||
-rw-r--r-- | webkit/glue/webcursor.h | 7 | ||||
-rw-r--r-- | webkit/glue/webcursor_gtk.cc | 107 |
3 files changed, 118 insertions, 1 deletions
diff --git a/webkit/glue/SConscript b/webkit/glue/SConscript index ffbcda5..6476ffd 100644 --- a/webkit/glue/SConscript +++ b/webkit/glue/SConscript @@ -108,6 +108,9 @@ if env['PLATFORM'] == 'win32': 'webkit_glue_win.cc', ]) elif env['PLATFORM'] == 'posix': - input_files.append('webinputevent_linux.cc') + input_files.extend([ + 'webcursor_gtk.cc', + 'webinputevent_linux.cc', + ]) env.ChromeStaticLibrary('glue', input_files) diff --git a/webkit/glue/webcursor.h b/webkit/glue/webcursor.h index 92e27f3..7775751 100644 --- a/webkit/glue/webcursor.h +++ b/webkit/glue/webcursor.h @@ -14,6 +14,9 @@ typedef struct HINSTANCE__* HINSTANCE; typedef struct HICON__* HICON; typedef HICON HCURSOR; +#elif defined(OS_LINUX) +// GdkCursorType is an enum, which we can't forward-declare. :( +#include <gdk/gdkcursor.h> #endif class Pickle; @@ -58,6 +61,10 @@ class WebCursor { // Initialize this from the given Windows cursor. void InitFromCursor(HCURSOR handle); +#elif defined(OS_LINUX) + // Return the stock GdkCursorType for this cursor, or GDK_CURSOR_IS_PIXMAP + // if it's a custom cursor. + GdkCursorType GetCursorType() const; #endif private: diff --git a/webkit/glue/webcursor_gtk.cc b/webkit/glue/webcursor_gtk.cc new file mode 100644 index 0000000..6224804 --- /dev/null +++ b/webkit/glue/webcursor_gtk.cc @@ -0,0 +1,107 @@ +// Copyright (c) 2008 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/webcursor.h" + +#include "config.h" +#include "PlatformCursor.h" + +#undef LOG +#include "base/logging.h" + +using WebCore::PlatformCursor; + +GdkCursorType WebCursor::GetCursorType() const { + // http://library.gnome.org/devel/gdk/2.12/gdk-Cursors.html has images + // of the default X theme, but beware that the user's cursor theme can + // change everything. + switch (type_) { + case PlatformCursor::typePointer: + return GDK_ARROW; + case PlatformCursor::typeCross: + return GDK_CROSS; + case PlatformCursor::typeHand: + return GDK_HAND2; + case PlatformCursor::typeIBeam: + return GDK_XTERM; + case PlatformCursor::typeWait: + return GDK_WATCH; + case PlatformCursor::typeHelp: + return GDK_QUESTION_ARROW; + case PlatformCursor::typeEastResize: + return GDK_RIGHT_SIDE; + case PlatformCursor::typeNorthResize: + return GDK_TOP_SIDE; + case PlatformCursor::typeNorthEastResize: + return GDK_TOP_RIGHT_CORNER; + case PlatformCursor::typeNorthWestResize: + return GDK_TOP_LEFT_CORNER; + case PlatformCursor::typeSouthResize: + return GDK_BOTTOM_SIDE; + case PlatformCursor::typeSouthEastResize: + return GDK_BOTTOM_LEFT_CORNER; + case PlatformCursor::typeSouthWestResize: + return GDK_BOTTOM_RIGHT_CORNER; + case PlatformCursor::typeWestResize: + return GDK_LEFT_SIDE; + case PlatformCursor::typeNorthSouthResize: + NOTIMPLEMENTED(); return GDK_ARROW; + case PlatformCursor::typeEastWestResize: + NOTIMPLEMENTED(); return GDK_ARROW; + case PlatformCursor::typeNorthEastSouthWestResize: + NOTIMPLEMENTED(); return GDK_ARROW; + case PlatformCursor::typeNorthWestSouthEastResize: + NOTIMPLEMENTED(); return GDK_ARROW; + case PlatformCursor::typeColumnResize: + return GDK_SB_H_DOUBLE_ARROW; // TODO(evanm): is this correct? + case PlatformCursor::typeRowResize: + return GDK_SB_V_DOUBLE_ARROW; // TODO(evanm): is this correct? + case PlatformCursor::typeMiddlePanning: + NOTIMPLEMENTED(); return GDK_ARROW; + case PlatformCursor::typeEastPanning: + NOTIMPLEMENTED(); return GDK_ARROW; + case PlatformCursor::typeNorthPanning: + NOTIMPLEMENTED(); return GDK_ARROW; + case PlatformCursor::typeNorthEastPanning: + NOTIMPLEMENTED(); return GDK_ARROW; + case PlatformCursor::typeNorthWestPanning: + NOTIMPLEMENTED(); return GDK_ARROW; + case PlatformCursor::typeSouthPanning: + NOTIMPLEMENTED(); return GDK_ARROW; + case PlatformCursor::typeSouthEastPanning: + NOTIMPLEMENTED(); return GDK_ARROW; + case PlatformCursor::typeSouthWestPanning: + NOTIMPLEMENTED(); return GDK_ARROW; + case PlatformCursor::typeWestPanning: + NOTIMPLEMENTED(); return GDK_ARROW; + case PlatformCursor::typeMove: + return GDK_FLEUR; + case PlatformCursor::typeVerticalText: + NOTIMPLEMENTED(); return GDK_ARROW; + case PlatformCursor::typeCell: + NOTIMPLEMENTED(); return GDK_ARROW; + case PlatformCursor::typeContextMenu: + NOTIMPLEMENTED(); return GDK_ARROW; + case PlatformCursor::typeAlias: + NOTIMPLEMENTED(); return GDK_ARROW; + case PlatformCursor::typeProgress: + return GDK_WATCH; + case PlatformCursor::typeNoDrop: + NOTIMPLEMENTED(); return GDK_ARROW; + case PlatformCursor::typeCopy: + NOTIMPLEMENTED(); return GDK_ARROW; + case PlatformCursor::typeNone: + NOTIMPLEMENTED(); return GDK_ARROW; + case PlatformCursor::typeNotAllowed: + NOTIMPLEMENTED(); return GDK_ARROW; + case PlatformCursor::typeZoomIn: + NOTIMPLEMENTED(); return GDK_ARROW; + case PlatformCursor::typeZoomOut: + NOTIMPLEMENTED(); return GDK_ARROW; + case PlatformCursor::typeCustom: + return GDK_CURSOR_IS_PIXMAP; + } + NOTREACHED(); + return GDK_ARROW; +} |