surface = cairo_image_surface_create_for_data (overlay->text_image, CAIRO_FORMAT_ARGB32, width, height, width * 4); cr = cairo_create (surface); /* clear surface */ cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR); cairo_paint (cr); cairo_set_operator (cr, CAIRO_OPERATOR_OVER); /* apply transformations */ cairo_set_matrix (cr, &cairo_matrix); /* draw text to cairo path */ pango_cairo_layout_path (cr, overlay->layout); /* draw shadow text */ cairo_save (cr); cairo_translate (cr, overlay->shadow_offset, overlay->shadow_offset); cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 0.5); cairo_fill_preserve (cr); cairo_restore (cr); /* draw outline text */ cairo_save (cr); cairo_set_source_rgb (cr, 0.0, 0.0, 0.0); cairo_set_line_width (cr, overlay->outline_offset); cairo_stroke_preserve (cr); cairo_restore (cr); if (overlay->want_shading) { cairo_paint_with_alpha (cr, overlay->shading_value); } /* draw text */ cairo_save (cr); cairo_set_source_rgb (cr, 1.0, 1.0, 1.0); cairo_fill (cr); cairo_restore (cr); cairo_destroy (cr); cairo_surface_destroy (surface);