webcursor_gtk.cc revision 3345a6884c488ff3a535c2c9acdd33d74b37e311
1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "webkit/glue/webcursor.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <gdk/gdk.h>
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <gtk/gtk.h>
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/logging.h"
113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "gfx/gtk_util.h"
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "third_party/WebKit/WebKit/chromium/public/WebCursorInfo.h"
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochusing WebKit::WebCursorInfo;
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace {
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// webcursor_gtk_data.h is taken directly from WebKit's CursorGtk.h.
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "webkit/glue/webcursor_gtk_data.h"
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This helper function is taken directly from WebKit's CursorGtk.cpp.
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// It attempts to create a custom cursor from the data inlined in
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// webcursor_gtk_data.h.
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochGdkCursor* GetInlineCustomCursor(CustomCursorType type) {
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const CustomCursor& custom = CustomCursors[type];
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GdkCursor* cursor = gdk_cursor_new_from_name(gdk_display_get_default(),
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                               custom.name);
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (!cursor) {
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const GdkColor fg = { 0, 0, 0, 0 };
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const GdkColor bg = { 65535, 65535, 65535, 65535 };
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    GdkPixmap* source = gdk_bitmap_create_from_data(NULL, custom.bits,
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                                    32, 32);
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    GdkPixmap* mask = gdk_bitmap_create_from_data(NULL, custom.mask_bits,
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                                  32, 32);
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    cursor = gdk_cursor_new_from_pixmap(source, mask, &fg, &bg,
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                        custom.hot_x, custom.hot_y);
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    g_object_unref(source);
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    g_object_unref(mask);
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return cursor;
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// For GTK 2.16 and beyond, GDK_BLANK_CURSOR is available. Before, we have to
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// use a custom cursor.
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if !GTK_CHECK_VERSION(2, 16, 0)
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Get/create a custom cursor which is invisible.
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochGdkCursor* GetInvisibleCustomCursor() {
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const char bits[] = { 0 };
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const GdkColor color = { 0, 0, 0, 0 };
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GdkPixmap* bitmap = gdk_bitmap_create_from_data(NULL, bits, 1, 1);
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GdkCursor* cursor =
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      gdk_cursor_new_from_pixmap(bitmap, bitmap, &color, &color, 0, 0);
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  g_object_unref(bitmap);
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return cursor;
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // end anonymous namespace
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochint WebCursor::GetCursorType() const {
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // http://library.gnome.org/devel/gdk/2.12/gdk-Cursors.html has images
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // of the default X theme, but beware that the user's cursor theme can
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // change everything.
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  switch (type_) {
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypePointer:
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GDK_LAST_CURSOR;
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeCross:
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GDK_CROSS;
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeHand:
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GDK_HAND2;
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeIBeam:
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GDK_XTERM;
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeWait:
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GDK_WATCH;
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeHelp:
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GDK_QUESTION_ARROW;
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeEastResize:
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GDK_RIGHT_SIDE;
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeNorthResize:
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GDK_TOP_SIDE;
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeNorthEastResize:
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GDK_TOP_RIGHT_CORNER;
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeNorthWestResize:
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GDK_TOP_LEFT_CORNER;
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeSouthResize:
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GDK_BOTTOM_SIDE;
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeSouthEastResize:
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GDK_BOTTOM_RIGHT_CORNER;
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeSouthWestResize:
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GDK_BOTTOM_LEFT_CORNER;
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeWestResize:
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GDK_LEFT_SIDE;
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeNorthSouthResize:
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      NOTIMPLEMENTED(); return GDK_LAST_CURSOR;
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeEastWestResize:
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      NOTIMPLEMENTED(); return GDK_LAST_CURSOR;
97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeNorthEastSouthWestResize:
98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      NOTIMPLEMENTED(); return GDK_LAST_CURSOR;
99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeNorthWestSouthEastResize:
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      NOTIMPLEMENTED(); return GDK_LAST_CURSOR;
101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeColumnResize:
102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GDK_SB_H_DOUBLE_ARROW;  // TODO(evanm): is this correct?
103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeRowResize:
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GDK_SB_V_DOUBLE_ARROW;  // TODO(evanm): is this correct?
105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeMiddlePanning:
106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GDK_FLEUR;
107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeEastPanning:
108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GDK_SB_RIGHT_ARROW;
109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeNorthPanning:
110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GDK_SB_UP_ARROW;
111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeNorthEastPanning:
112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GDK_TOP_RIGHT_CORNER;
113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeNorthWestPanning:
114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GDK_TOP_LEFT_CORNER;
115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeSouthPanning:
116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GDK_SB_DOWN_ARROW;
117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeSouthEastPanning:
118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GDK_BOTTOM_RIGHT_CORNER;
119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeSouthWestPanning:
120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GDK_BOTTOM_LEFT_CORNER;
121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeWestPanning:
122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GDK_SB_LEFT_ARROW;
123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeMove:
124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GDK_FLEUR;
125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeVerticalText:
126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      NOTIMPLEMENTED(); return GDK_LAST_CURSOR;
127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeCell:
128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      NOTIMPLEMENTED(); return GDK_LAST_CURSOR;
129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeContextMenu:
130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      NOTIMPLEMENTED(); return GDK_LAST_CURSOR;
131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeAlias:
132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      NOTIMPLEMENTED(); return GDK_LAST_CURSOR;
133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeProgress:
134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GDK_WATCH;
135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeNoDrop:
136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      NOTIMPLEMENTED(); return GDK_LAST_CURSOR;
137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeCopy:
138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      NOTIMPLEMENTED(); return GDK_LAST_CURSOR;
139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeNone:
140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// See comment above |GetInvisibleCustomCursor()|.
141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if !GTK_CHECK_VERSION(2, 16, 0)
142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GDK_CURSOR_IS_PIXMAP;
143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#else
144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GDK_BLANK_CURSOR;
145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif
146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeNotAllowed:
147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      NOTIMPLEMENTED(); return GDK_LAST_CURSOR;
148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeZoomIn:
149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeZoomOut:
150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeCustom:
151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GDK_CURSOR_IS_PIXMAP;
152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  NOTREACHED();
154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return GDK_LAST_CURSOR;
155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
157c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochGdkCursor* WebCursor::GetCustomCursor() const {
158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  switch (type_) {
159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// See comment above |GetInvisibleCustomCursor()|.
160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if !GTK_CHECK_VERSION(2, 16, 0)
161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeNone:
162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GetInvisibleCustomCursor();
163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif
164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeZoomIn:
165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GetInlineCustomCursor(CustomCursorZoomIn);
166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    case WebCursorInfo::TypeZoomOut:
167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return GetInlineCustomCursor(CustomCursorZoomOut);
168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  if (type_ != WebCursorInfo::TypeCustom) {
171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    NOTREACHED();
172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return NULL;
173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  SkBitmap bitmap;
1763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  bitmap.setConfig(SkBitmap::kARGB_8888_Config,
1773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                   custom_size_.width(), custom_size_.height());
1783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  bitmap.allocPixels();
1793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  memcpy(bitmap.getAddr32(0, 0), custom_data_.data(), custom_data_.size());
180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  GdkPixbuf* pixbuf = gfx::GdkPixbufFromSkBitmap(&bitmap);
182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GdkCursor* cursor = gdk_cursor_new_from_pixbuf(gdk_display_get_default(),
183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                                 pixbuf,
184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                                 hotspot_.x(),
185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                                 hotspot_.y());
186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  gdk_pixbuf_unref(pixbuf);
188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return cursor;
190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WebCursor::InitPlatformData() {
193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return;
194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool WebCursor::SerializePlatformData(Pickle* pickle) const {
197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return true;
198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool WebCursor::DeserializePlatformData(const Pickle* pickle, void** iter) {
201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return true;
202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool WebCursor::IsPlatformDataEqual(const WebCursor& other) const {
205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return true;
206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WebCursor::CleanupPlatformData() {
209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return;
210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid WebCursor::CopyPlatformData(const WebCursor& other) {
213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return;
214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
215