]> Pileus Git - ~andy/gtk/commitdiff
pixbuf-engine: Replace gdk_draw_pixbuf() with Cairo equivalent
authorBenjamin Otte <otte@redhat.com>
Mon, 12 Jul 2010 13:41:27 +0000 (15:41 +0200)
committerBenjamin Otte <otte@redhat.com>
Mon, 26 Jul 2010 14:42:47 +0000 (16:42 +0200)
This replaces the tiled fill call only.

modules/engines/pixbuf/pixbuf-render.c

index d16e10a6cc270b5bab4bfd90126f2b06bc9908e6..7b5bb12d20dfd35742abbc695410af085222b13b 100644 (file)
@@ -844,35 +844,19 @@ theme_pixbuf_render (ThemePixbuf  *theme_pb,
        }
       else
        {
-         GdkPixmap *tmp_pixmap;
-         GdkGC *tmp_gc;
-         GdkGCValues gc_values;
-
-         tmp_pixmap = gdk_pixmap_new (window,
-                                      pixbuf_width,
-                                      pixbuf_height,
-                                      -1);
-         tmp_gc = gdk_gc_new (tmp_pixmap);
-         gdk_draw_pixbuf (tmp_pixmap, tmp_gc, pixbuf,
-                          0, 0, 
-                          0, 0,
-                          pixbuf_width, pixbuf_height,
-                          GDK_RGB_DITHER_NORMAL,
-                          0, 0);
-         g_object_unref (tmp_gc);
-
-         gc_values.fill = GDK_TILED;
-         gc_values.tile = tmp_pixmap;
-         tmp_gc = gdk_gc_new_with_values (window,
-                                          &gc_values, GDK_GC_FILL | GDK_GC_TILE);
+          cairo_t *cr = gdk_cairo_create (window);
+
+          gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
+          cairo_pattern_set_extend (cairo_get_source (cr), CAIRO_EXTEND_REPEAT);
+
          if (clip_rect)
-           gdk_draw_rectangle (window, tmp_gc, TRUE,
-                               clip_rect->x, clip_rect->y, clip_rect->width, clip_rect->height);
+           gdk_cairo_rectangle (cr, clip_rect);
          else
-           gdk_draw_rectangle (window, tmp_gc, TRUE, x, y, width, height);
+           cairo_rectangle (cr, x, y, width, height);
          
-         g_object_unref (tmp_gc);
-         g_object_unref (tmp_pixmap);
+          cairo_fill (cr);
+
+          cairo_destroy (cr);
        }
     }
 }