void
grr_icon_predraw (grr_icon_t *icon, cairo_t *xrs, int width, int height)
{
+ cairo_t *xrs2;
+ cairo_matrix_t ctm;
+
if (icon->surface_width != width || icon->surface_height != height) {
if (icon->surface)
cairo_surface_destroy (icon->surface);
icon->surface_width = width;
icon->surface_height = height;
- icon->surface = cairo_surface_create_similar (cairo_current_target_surface (xrs),
+ icon->surface = cairo_surface_create_similar (cairo_get_target (xrs),
CAIRO_FORMAT_ARGB32,
width, height);
}
- cairo_save (xrs);
- cairo_set_target_surface (xrs, icon->surface);
- grr_icon_draw (icon, xrs);
- cairo_restore (xrs);
+ /* Need to copy the CTM from the original cairo_t to the new one */
+ xrs2 = cairo_create (icon->surface);
+ cairo_get_matrix (xrs, &ctm);
+ cairo_set_matrix (xrs2, &ctm);
+ grr_icon_draw (icon, xrs2);
+ cairo_destroy (xrs2);
}
void
-grr_icon_draw_predrawn (grr_icon_t *icon, cairo_t *xrs)
+grr_icon_draw_predrawn (grr_icon_t *icon, cairo_t *xrs, double alpha)
{
- if (icon->surface)
- cairo_show_surface (xrs, icon->surface, icon->surface_width, icon->surface_height);
+ if (icon->surface) {
+ cairo_set_source_surface (xrs, icon->surface, 0.0, 0.0);
+ cairo_paint_with_alpha (xrs, alpha);
+ }
}