summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCosimo Cecchi <cosimoc@gnome.org>2010-09-30 18:46:41 +0200
committerCosimo Cecchi <cosimoc@gnome.org>2010-09-30 18:49:04 +0200
commita136af0a01c160cdfb513c531b910b49a4a62973 (patch)
tree822d75c814ce6bece1bafeda438d85ee3bef1604
parentc6860491c432e311d585a6d92443ef821afd46d2 (diff)
downloadnautilus-a136af0a01c160cdfb513c531b910b49a4a62973.tar.gz
icon-canvas-item: use cairo directly instead of gdk_pixbuf_composite()
-rw-r--r--libnautilus-private/nautilus-icon-canvas-item.c62
1 files changed, 16 insertions, 46 deletions
diff --git a/libnautilus-private/nautilus-icon-canvas-item.c b/libnautilus-private/nautilus-icon-canvas-item.c
index bec5d270b..8c2e6ea86 100644
--- a/libnautilus-private/nautilus-icon-canvas-item.c
+++ b/libnautilus-private/nautilus-icon-canvas-item.c
@@ -517,7 +517,6 @@ nautilus_icon_canvas_item_get_drag_surface (NautilusIconCanvasItem *item)
int item_offset_x, item_offset_y;
EelIRect icon_rect;
EelIRect emblem_rect;
- GdkPixbuf *pixbuf;
GdkPixbuf *emblem_pixbuf;
EmblemLayout emblem_layout;
double item_x, item_y;
@@ -548,64 +547,35 @@ nautilus_icon_canvas_item_get_drag_surface (NautilusIconCanvasItem *item)
CAIRO_CONTENT_COLOR_ALPHA,
width, height);
- pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
- TRUE,
- gdk_pixbuf_get_bits_per_sample (item->details->pixbuf),
- width, height);
- gdk_pixbuf_fill (pixbuf, 0x00000000);
-
- gdk_pixbuf_composite (item->details->pixbuf, pixbuf,
- item_offset_x, item_offset_y,
- gdk_pixbuf_get_width (item->details->pixbuf),
- gdk_pixbuf_get_height (item->details->pixbuf),
- item_offset_x, item_offset_y, 1.0, 1.0,
- GDK_INTERP_BILINEAR, 255);
+ cr = cairo_create (surface);
+ gdk_cairo_set_source_pixbuf (cr, item->details->pixbuf,
+ item_offset_x, item_offset_y);
+ cairo_rectangle (cr, item_offset_x, item_offset_y,
+ gdk_pixbuf_get_width (item->details->pixbuf),
+ gdk_pixbuf_get_height (item->details->pixbuf));
+ cairo_fill (cr);
icon_rect.x0 = item_offset_x;
icon_rect.y0 = item_offset_y;
icon_rect.x1 = item_offset_x + gdk_pixbuf_get_width (item->details->pixbuf);
icon_rect.y1 = item_offset_y + gdk_pixbuf_get_height (item->details->pixbuf);
-
is_rtl = nautilus_icon_container_is_layout_rtl (NAUTILUS_ICON_CONTAINER (canvas));
emblem_layout_reset (&emblem_layout, item, icon_rect, is_rtl);
while (emblem_layout_next (&emblem_layout, &emblem_pixbuf, &emblem_rect, is_rtl)) {
- gdk_pixbuf_composite (emblem_pixbuf, pixbuf,
- emblem_rect.x0, emblem_rect.y0,
- gdk_pixbuf_get_width (emblem_pixbuf),
- gdk_pixbuf_get_height (emblem_pixbuf),
- emblem_rect.x0, emblem_rect.y0,
- 1.0, 1.0,
- GDK_INTERP_BILINEAR, 255);
- }
-
- /* draw pixbuf to mask and pixmap */
- cr = cairo_create (surface);
- cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
- gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
- cairo_paint (cr);
+ gdk_cairo_set_source_pixbuf (cr, emblem_pixbuf, emblem_rect.x0, emblem_rect.y0);
+ cairo_rectangle (cr, emblem_rect.x0, emblem_rect.y0,
+ gdk_pixbuf_get_width (emblem_pixbuf),
+ gdk_pixbuf_get_height (emblem_pixbuf));
+ cairo_fill (cr);
+ }
- draw_embedded_text (item, cr,
- item_offset_x, item_offset_y);
- draw_label_text (item, cr, FALSE, icon_rect);
+ draw_embedded_text (item, cr,
+ item_offset_x, item_offset_y);
+ draw_label_text (item, cr, FALSE, icon_rect);
cairo_destroy (cr);
-#if 0
- *mask = gdk_window_create_similar_surface (gdk_screen_get_root_window (screen),
- CAIRO_CONTENT_ALPHA, width, height);
- cr = cairo_create (*mask);
- cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
- gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
- cairo_paint (cr);
-
- draw_label_text (item, cr, TRUE, icon_rect);
-
- cairo_destroy (cr);
-#endif
-
- g_object_unref (pixbuf);
-
return surface;
}