gtk_style_context_get (context, "font", &values->font, NULL);
}
-cairo_surface_t *
-_gtk_text_util_create_rich_drag_icon (GtkWidget *widget,
- GtkTextBuffer *buffer,
- GtkTextIter *start,
- GtkTextIter *end)
+GdkPaintable *
+gtk_text_util_create_rich_drag_icon (GtkWidget *widget,
+ GtkTextBuffer *buffer,
+ GtkTextIter *start,
+ GtkTextIter *end)
{
GtkAllocation allocation;
- cairo_surface_t *surface;
+ GdkPaintable *paintable;
+ GtkSnapshot *snapshot;
gint layout_width, layout_height;
GtkTextBuffer *new_buffer;
GtkTextLayout *layout;
layout_width = MIN (layout_width, DRAG_ICON_MAX_WIDTH);
layout_height = MIN (layout_height, DRAG_ICON_MAX_HEIGHT);
- surface = gdk_surface_create_similar_surface (gtk_widget_get_surface (widget),
- CAIRO_CONTENT_COLOR_ALPHA,
- layout_width, layout_height);
-
- cr = cairo_create (surface);
+ snapshot = gtk_snapshot_new (FALSE, NULL, "RichTextDragIcon");
+ cr = gtk_snapshot_append_cairo (snapshot,
+ &GRAPHENE_RECT_INIT (0, 0, layout_width, layout_height),
+ "Text");
gtk_text_layout_draw (layout, widget, cr);
g_object_unref (layout);
g_object_unref (new_buffer);
- return surface;
+ paintable = gtk_snapshot_free_to_paintable (snapshot);
+
+ return paintable;
}
static gint
GdkPaintable * gtk_text_util_create_drag_icon (GtkWidget *widget,
gchar *text,
gsize len);
-cairo_surface_t * _gtk_text_util_create_rich_drag_icon (GtkWidget *widget,
+GdkPaintable * gtk_text_util_create_rich_drag_icon (GtkWidget *widget,
GtkTextBuffer *buffer,
GtkTextIter *start,
GtkTextIter *end);
GtkTextBuffer *buffer = gtk_text_view_get_buffer (text_view);
GtkTextIter start;
GtkTextIter end;
- cairo_surface_t *surface = NULL;
+ GdkPaintable *paintable = NULL;
g_signal_handlers_disconnect_by_func (widget, drag_begin_cb, NULL);
if (gtk_text_buffer_get_selection_bounds (buffer, &start, &end))
- surface = _gtk_text_util_create_rich_drag_icon (widget, buffer, &start, &end);
+ paintable = gtk_text_util_create_rich_drag_icon (widget, buffer, &start, &end);
- if (surface)
+ if (paintable)
{
- gtk_drag_set_icon_surface (context, surface);
- cairo_surface_destroy (surface);
+ gtk_drag_set_icon_paintable (context, paintable, 0, 0);
+ g_object_unref (paintable);
}
else
{