diff options
author | skrul@google.com <skrul@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-21 20:01:08 +0000 |
---|---|---|
committer | skrul@google.com <skrul@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-21 20:01:08 +0000 |
commit | 6806d48ab1ce1f7dc3104033467581959368c28e (patch) | |
tree | 7875e66662af55969be0b3e668525c5a6b336b84 /views/drag_utils_gtk.cc | |
parent | e08d7b463a5c82d253def91b20c8ed1756e8d337 (diff) | |
download | chromium_src-6806d48ab1ce1f7dc3104033467581959368c28e.zip chromium_src-6806d48ab1ce1f7dc3104033467581959368c28e.tar.gz chromium_src-6806d48ab1ce1f7dc3104033467581959368c28e.tar.bz2 |
Implement dragging icon for dragging bookmarks in views/gtk.
Review URL: http://codereview.chromium.org/270068
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@29692 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views/drag_utils_gtk.cc')
-rw-r--r-- | views/drag_utils_gtk.cc | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/views/drag_utils_gtk.cc b/views/drag_utils_gtk.cc index 8a40b85..1a47aa4 100644 --- a/views/drag_utils_gtk.cc +++ b/views/drag_utils_gtk.cc @@ -4,9 +4,13 @@ #include "views/drag_utils.h" +#include <gtk/gtk.h> + #include "app/gfx/canvas.h" +#include "app/gfx/gtk_util.h" #include "base/logging.h" #include "app/os_exchange_data.h" +#include "app/os_exchange_data_provider_gtk.h" namespace drag_utils { @@ -16,7 +20,26 @@ void SetDragImageOnDataObject(const gfx::Canvas& canvas, int cursor_x_offset, int cursor_y_offset, OSExchangeData* data_object) { - NOTIMPLEMENTED(); + OSExchangeDataProviderGtk& provider( + static_cast<OSExchangeDataProviderGtk&>(data_object->provider())); + + // Convert the canvas into a GdkPixbuf. + SkBitmap bitmap = canvas.ExtractBitmap(); + GdkPixbuf* canvas_pixbuf = gfx::GdkPixbufFromSkBitmap(&bitmap); + + // Make a new pixbuf of the requested size and copy it over. + GdkPixbuf* pixbuf = gdk_pixbuf_new( + gdk_pixbuf_get_colorspace(canvas_pixbuf), + gdk_pixbuf_get_has_alpha(canvas_pixbuf), + gdk_pixbuf_get_bits_per_sample(canvas_pixbuf), + width, + height); + gdk_pixbuf_copy_area(canvas_pixbuf, 0, 0, width, height, pixbuf, 0, 0); + g_object_unref(canvas_pixbuf); + + // Set the drag data on to the provider. + provider.SetDragImage(pixbuf, cursor_x_offset, cursor_y_offset); + g_object_unref(pixbuf); } } // namespace drag_utils |