From 6776cb445edf8ce92de389790100f835c2f05ec8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Thu, 6 Aug 2009 20:47:33 +0200 Subject: [PATCH] textrender: Fix blitting of text over the output buffer and cairo painting --- ext/pango/gsttextrender.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/ext/pango/gsttextrender.c b/ext/pango/gsttextrender.c index e7faeaa..bb3a6a1 100644 --- a/ext/pango/gsttextrender.c +++ b/ext/pango/gsttextrender.c @@ -267,14 +267,10 @@ gst_text_render_render_pangocairo (GstTextRender * render) cr_shadow = cairo_create (surface_shadow); /* clear shadow surface */ - cairo_set_source_rgba (cr_shadow, 0.0, 0.0, 0.0, 0.0); cairo_set_operator (cr_shadow, CAIRO_OPERATOR_CLEAR); cairo_paint (cr_shadow); cairo_set_operator (cr_shadow, CAIRO_OPERATOR_OVER); - cairo_set_source_rgb (cr_shadow, 0.0, 0.0, 0.0); - pango_cairo_update_layout (cr_shadow, render->layout); - /* draw shadow text */ cairo_save (cr_shadow); cairo_set_source_rgba (cr_shadow, 0.0, 0.0, 0.0, 0.5); @@ -284,6 +280,7 @@ gst_text_render_render_pangocairo (GstTextRender * render) /* draw outline text */ cairo_save (cr_shadow); + cairo_set_source_rgb (cr_shadow, 0.0, 0.0, 0.0); cairo_set_line_width (cr_shadow, render->outline_offset); pango_cairo_layout_path (cr_shadow, render->layout); cairo_stroke (cr_shadow); @@ -292,18 +289,21 @@ gst_text_render_render_pangocairo (GstTextRender * render) cairo_destroy (cr_shadow); render->text_image = g_realloc (render->text_image, 4 * width * height); - memset (render->text_image, 0, 4 * width * height); surface = cairo_image_surface_create_for_data (render->text_image, CAIRO_FORMAT_ARGB32, width, height, width * 4); cr = cairo_create (surface); + cairo_set_operator (cr, CAIRO_OPERATOR_CLEAR); + cairo_paint (cr); + cairo_set_operator (cr, CAIRO_OPERATOR_OVER); /* set default color */ cairo_set_source_rgb (cr, 1.0, 1.0, 1.0); + cairo_save (cr); /* draw text */ - pango_cairo_update_layout (cr, render->layout); pango_cairo_show_layout (cr, render->layout); + cairo_restore (cr); /* composite shadow with offset */ cairo_set_operator (cr, CAIRO_OPERATOR_DEST_OVER); @@ -404,7 +404,7 @@ gst_text_renderer_image_to_ayuv (GstTextRender * render, guchar * pixbuf, for (y = 0; y < height; y++) { int n; - p = pixbuf + ypos * stride + xpos; + p = pixbuf + (ypos + y) * stride + xpos * 4; for (n = 0; n < width; n++) { b = bitp[CAIRO_ARGB_B]; g = bitp[CAIRO_ARGB_G]; @@ -436,12 +436,13 @@ gst_text_renderer_image_to_argb (GstTextRender * render, guchar * pixbuf, bitp = render->text_image; for (i = 0; i < height; i++) { - p = pixbuf + ypos * stride + xpos; + p = pixbuf + (ypos + i) * stride + xpos * 4; for (j = 0; j < width; j++) { p[0] = bitp[CAIRO_ARGB_A]; p[1] = bitp[CAIRO_ARGB_R]; p[2] = bitp[CAIRO_ARGB_G]; p[3] = bitp[CAIRO_ARGB_B]; + bitp += 4; p += 4; } -- 2.7.4