| Index: views/drag_utils_gtk.cc
|
| ===================================================================
|
| --- views/drag_utils_gtk.cc (revision 28576)
|
| +++ views/drag_utils_gtk.cc (working copy)
|
| @@ -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 @@
|
| 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
|
|
|