]> Pileus Git - ~andy/gtk/commitdiff
testview: Convert _gtk_text_util_create_rich_drag_icon() to use surfaces
authorBenjamin Otte <otte@redhat.com>
Sun, 15 Aug 2010 19:24:55 +0000 (21:24 +0200)
committerBenjamin Otte <otte@redhat.com>
Sun, 26 Sep 2010 13:03:01 +0000 (15:03 +0200)
gtk/gtktextutil.c
gtk/gtktextutil.h
gtk/gtktextview.c

index 262f89b5c1c7af9950f302e3c70352ebb0d02cea..0ef71cf22cbdbdb7b48550a861e5b37c1887ac45 100644 (file)
@@ -280,14 +280,14 @@ gtk_text_view_set_attributes_from_style (GtkTextView        *text_view,
   values->font = pango_font_description_copy (style->font_desc);
 }
 
-GdkPixmap *
+cairo_surface_t *
 _gtk_text_util_create_rich_drag_icon (GtkWidget     *widget,
                                       GtkTextBuffer *buffer,
                                       GtkTextIter   *start,
                                       GtkTextIter   *end)
 {
   GtkAllocation      allocation;
-  GdkDrawable       *drawable = NULL;
+  cairo_surface_t   *surface;
   gint               pixmap_height, pixmap_width;
   gint               layout_width, layout_height;
   GtkStyle          *widget_style;
@@ -303,7 +303,7 @@ _gtk_text_util_create_rich_drag_icon (GtkWidget     *widget,
    g_return_val_if_fail (start != NULL, NULL);
    g_return_val_if_fail (end != NULL, NULL);
 
-  widget_style = gtk_widget_get_style (widget);
+   widget_style = gtk_widget_get_style (widget);
 
    new_buffer = gtk_text_buffer_new (gtk_text_buffer_get_tag_table (buffer));
    gtk_text_buffer_get_start_iter (new_buffer, &iter);
@@ -359,12 +359,14 @@ _gtk_text_util_create_rich_drag_icon (GtkWidget     *widget,
    pixmap_width  = layout_width + DRAG_ICON_LAYOUT_BORDER * 2;
    pixmap_height = layout_height + DRAG_ICON_LAYOUT_BORDER * 2;
 
-   drawable = gdk_pixmap_new (gtk_widget_get_window (widget),
-                              pixmap_width  + 2, pixmap_height + 2, -1);
+   surface = gdk_window_create_similar_surface (gtk_widget_get_window (widget),
+                                                CAIRO_CONTENT_COLOR,
+                                                pixmap_width  + 2,
+                                                pixmap_height + 2);
 
-   cr = gdk_cairo_create (drawable);
+   cr = cairo_create (surface);
 
-  gdk_cairo_set_source_color (cr, &widget_style->base [gtk_widget_get_state (widget)]);
+   gdk_cairo_set_source_color (cr, &widget_style->base [gtk_widget_get_state (widget)]);
    cairo_paint (cr);
 
    cairo_save (cr);
@@ -383,7 +385,9 @@ _gtk_text_util_create_rich_drag_icon (GtkWidget     *widget,
    g_object_unref (layout);
    g_object_unref (new_buffer);
 
-   return drawable;
+   cairo_surface_set_device_offset (surface, 2, 2);
+
+   return surface;
 }
 
 
index 8aa7deb47191a0c07a10514e9b02aef408c4b3bb..358ead7e12d1df5095be7f2c86fc222f2beb9a8a 100644 (file)
@@ -43,10 +43,10 @@ void _gtk_text_util_append_special_char_menuitems (GtkMenuShell              *me
 cairo_surface_t * _gtk_text_util_create_drag_icon (GtkWidget     *widget,
                                                    gchar         *text,
                                                    gsize          len);
-GdkPixmap* _gtk_text_util_create_rich_drag_icon (GtkWidget     *widget,
-                                                 GtkTextBuffer *buffer,
-                                                 GtkTextIter   *start,
-                                                 GtkTextIter   *end);
+cairo_surface_t * _gtk_text_util_create_rich_drag_icon (GtkWidget     *widget,
+                                                   GtkTextBuffer *buffer,
+                                                   GtkTextIter   *start,
+                                                   GtkTextIter   *end);
 
 gboolean _gtk_text_util_get_block_cursor_location (PangoLayout    *layout,
                                                   gint            index_,
index 49ef851173040725b30c1055989ec8837d86dcff..29da030b93419565588d9614ba904681d55c435a 100644 (file)
@@ -6905,25 +6905,21 @@ drag_begin_cb (GtkWidget      *widget,
                GdkDragContext *context,
                gpointer        data)
 {
-  GtkTextView   *text_view = GTK_TEXT_VIEW (widget);
-  GtkTextBuffer *buffer = gtk_text_view_get_buffer (text_view);
-  GtkTextIter    start;
-  GtkTextIter    end;
-  GdkPixmap     *pixmap = NULL;
+  GtkTextView     *text_view = GTK_TEXT_VIEW (widget);
+  GtkTextBuffer   *buffer = gtk_text_view_get_buffer (text_view);
+  GtkTextIter      start;
+  GtkTextIter      end;
+  cairo_surface_t *surface = NULL;
 
   g_signal_handlers_disconnect_by_func (widget, drag_begin_cb, NULL);
 
   if (gtk_text_buffer_get_selection_bounds (buffer, &start, &end))
-    pixmap = _gtk_text_util_create_rich_drag_icon (widget, buffer, &start, &end);
+    surface = _gtk_text_util_create_rich_drag_icon (widget, buffer, &start, &end);
 
-  if (pixmap)
+  if (surface)
     {
-      gtk_drag_set_icon_pixmap (context,
-                                gdk_drawable_get_colormap (pixmap),
-                                pixmap,
-                                NULL,
-                                -2, -2);
-      g_object_unref (pixmap);
+      gtk_drag_set_icon_surface (context, surface);
+      cairo_surface_destroy (surface);
     }
   else
     {