From f0b6b4881e24a1e7cd9524c4e381382c14bde1f1 Mon Sep 17 00:00:00 2001 From: "sadrul@chromium.org" Date: Tue, 23 Nov 2010 00:55:28 +0000 Subject: Refactoring of cursor usage (primarily for linux). Add API to WebCursor to return a native-cursor, and implementation for windows, linux and mac. For linux: Move gtk_util::GetCursor into gfx:: namespace. Also, get rid of ref/unref'ing the cursors from everywhere. Instead, do almost all of it in one place (in gfx). Also, show proper cursors for web-pages with touchui=1 (i.e. add support for updating cursor in RenderWidgetHostViewViews). Review URL: http://codereview.chromium.org/5110010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@67034 0039d316-1c4b-4281-b951-d872f2087c98 --- views/controls/link.cc | 6 +++++- views/controls/resize_area.cc | 6 +++++- views/controls/single_split_view.cc | 6 +++++- views/widget/root_view.cc | 2 -- views/window/window_gtk.cc | 9 +++------ 5 files changed, 18 insertions(+), 11 deletions(-) (limited to 'views') diff --git a/views/controls/link.cc b/views/controls/link.cc index b392902..6101e49 100644 --- a/views/controls/link.cc +++ b/views/controls/link.cc @@ -14,6 +14,10 @@ #include "gfx/font.h" #include "views/event.h" +#if defined(OS_LINUX) +#include "gfx/gtk_util.h" +#endif + namespace { void GetColors(const SkColor* background_color, // NULL means "use default" @@ -170,7 +174,7 @@ gfx::NativeCursor Link::GetCursorForPoint(Event::EventType event_type, g_hand_cursor = LoadCursor(NULL, IDC_HAND); return g_hand_cursor; #elif defined(OS_LINUX) - return gdk_cursor_new(GDK_HAND2); + return gfx::GetCursor(GDK_HAND2); #endif } diff --git a/views/controls/resize_area.cc b/views/controls/resize_area.cc index 950d97c..56a78b8 100644 --- a/views/controls/resize_area.cc +++ b/views/controls/resize_area.cc @@ -7,6 +7,10 @@ #include "app/resource_bundle.h" #include "base/logging.h" +#if defined(OS_LINUX) +#include "gfx/gtk_util.h" +#endif + namespace views { const char ResizeArea::kViewClassName[] = "views/ResizeArea"; @@ -39,7 +43,7 @@ gfx::NativeCursor ResizeArea::GetCursorForPoint(Event::EventType event_type, g_resize_cursor = LoadCursor(NULL, IDC_SIZEWE); return g_resize_cursor; #elif defined(OS_LINUX) - return gdk_cursor_new(GDK_SB_H_DOUBLE_ARROW); + return gfx::GetCursor(GDK_SB_H_DOUBLE_ARROW); #endif } diff --git a/views/controls/single_split_view.cc b/views/controls/single_split_view.cc index debe716..f997f31 100644 --- a/views/controls/single_split_view.cc +++ b/views/controls/single_split_view.cc @@ -12,6 +12,10 @@ #include "skia/ext/skia_utils_win.h" #include "views/background.h" +#if defined(OS_LINUX) +#include "gfx/gtk_util.h" +#endif + namespace views { // Size of the divider in pixels. @@ -128,7 +132,7 @@ gfx::NativeCursor SingleSplitView::GetCursorForPoint( static HCURSOR ns_resize_cursor = LoadCursor(NULL, IDC_SIZENS); return is_horizontal_ ? we_resize_cursor : ns_resize_cursor; #elif defined(OS_LINUX) - return gdk_cursor_new(is_horizontal_ ? + return gfx::GetCursor(is_horizontal_ ? GDK_SB_H_DOUBLE_ARROW : GDK_SB_V_DOUBLE_ARROW); #endif diff --git a/views/widget/root_view.cc b/views/widget/root_view.cc index 91d639c..753e9de 100644 --- a/views/widget/root_view.cc +++ b/views/widget/root_view.cc @@ -779,8 +779,6 @@ void RootView::SetActiveCursor(gfx::NativeCursor cursor) { if (!native_view) return; gdk_window_set_cursor(native_view->window, cursor); - if (cursor) - gdk_cursor_destroy(cursor); #endif } diff --git a/views/window/window_gtk.cc b/views/window/window_gtk.cc index 3d7f788..d59d7a5 100644 --- a/views/window/window_gtk.cc +++ b/views/window/window_gtk.cc @@ -7,6 +7,7 @@ #include "gfx/rect.h" #include "base/i18n/rtl.h" #include "base/utf_string_conversions.h" +#include "gfx/gtk_util.h" #include "gfx/path.h" #include "views/event.h" #include "views/screen.h" @@ -329,9 +330,7 @@ gboolean WindowGtk::OnMotionNotify(GtkWidget* widget, GdkEventMotion* event) { non_client_view_->NonClientHitTest(gfx::Point(x, y)); if (hittest_code != HTCLIENT) { GdkCursorType cursor_type = HitTestCodeToGdkCursorType(hittest_code); - GdkCursor* cursor = gdk_cursor_new(cursor_type); - gdk_window_set_cursor(widget->window, cursor); - gdk_cursor_destroy(cursor); + gdk_window_set_cursor(widget->window, gfx::GetCursor(cursor_type)); } return WidgetGtk::OnMotionNotify(widget, event); @@ -362,9 +361,7 @@ gboolean WindowGtk::OnWindowStateEvent(GtkWidget* widget, } gboolean WindowGtk::OnLeaveNotify(GtkWidget* widget, GdkEventCrossing* event) { - GdkCursor* cursor = gdk_cursor_new(GDK_LEFT_PTR); - gdk_window_set_cursor(widget->window, cursor); - gdk_cursor_destroy(cursor); + gdk_window_set_cursor(widget->window, gfx::GetCursor(GDK_LEFT_PTR)); return WidgetGtk::OnLeaveNotify(widget, event); } -- cgit v1.1