summaryrefslogtreecommitdiff
path: root/gtk/gtktextutil.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/gtktextutil.c')
-rw-r--r--gtk/gtktextutil.c39
1 files changed, 14 insertions, 25 deletions
diff --git a/gtk/gtktextutil.c b/gtk/gtktextutil.c
index 3d28902d78..236aac5c79 100644
--- a/gtk/gtktextutil.c
+++ b/gtk/gtktextutil.c
@@ -189,27 +189,26 @@ limit_layout_lines (PangoLayout *layout)
}
/**
- * _gtk_text_util_create_drag_icon:
+ * gtk_text_util_create_drag_icon:
* @widget: #GtkWidget to extract the pango context
* @text: a #gchar to render the icon
* @len: length of @text, or -1 for NUL-terminated text
*
* Creates a drag and drop icon from @text.
*
- * Returns: a #cairo_surface_t to use as DND icon
+ * Returns: (transfer full): a #GdkPaintable to use as DND icon
*/
-cairo_surface_t *
-_gtk_text_util_create_drag_icon (GtkWidget *widget,
- gchar *text,
- gsize len)
+GdkPaintable *
+gtk_text_util_create_drag_icon (GtkWidget *widget,
+ gchar *text,
+ gsize len)
{
GtkStyleContext *style_context;
- cairo_surface_t *surface;
+ GtkSnapshot *snapshot;
PangoContext *context;
PangoLayout *layout;
- cairo_t *cr;
- gint pixmap_height, pixmap_width;
- gint layout_width, layout_height;
+ GdkPaintable *paintable;
+ gint layout_width;
GdkRGBA color;
g_return_val_if_fail (widget != NULL, NULL);
@@ -220,34 +219,24 @@ _gtk_text_util_create_drag_icon (GtkWidget *widget,
pango_layout_set_text (layout, text, len);
pango_layout_set_wrap (layout, PANGO_WRAP_WORD_CHAR);
- pango_layout_get_size (layout, &layout_width, &layout_height);
+ pango_layout_get_size (layout, &layout_width, NULL);
layout_width = MIN (layout_width, DRAG_ICON_MAX_WIDTH * PANGO_SCALE);
pango_layout_set_width (layout, layout_width);
limit_layout_lines (layout);
- /* get again layout extents, they may have changed */
- pango_layout_get_size (layout, &layout_width, &layout_height);
-
- pixmap_width = layout_width / PANGO_SCALE;
- pixmap_height = layout_height / PANGO_SCALE;
-
- surface = gdk_surface_create_similar_surface (gtk_widget_get_surface (widget),
- CAIRO_CONTENT_COLOR_ALPHA,
- pixmap_width, pixmap_height);
- cr = cairo_create (surface);
+ snapshot = gtk_snapshot_new (FALSE, NULL, "TextDragIcon");
style_context = gtk_widget_get_style_context (widget);
gtk_style_context_get_color (style_context,
&color);
- gdk_cairo_set_source_rgba (cr, &color);
- pango_cairo_show_layout (cr, layout);
+ gtk_snapshot_append_layout (snapshot, layout, &color, "TextDragIcon");
- cairo_destroy (cr);
+ paintable = gtk_snapshot_free_to_paintable (snapshot);
g_object_unref (layout);
- return surface;
+ return paintable;
}
static void