From: Jihyun Cho Date: Thu, 25 Oct 2012 15:29:11 +0000 (+0900) Subject: pango: delete foreground color in shadow text X-Git-Tag: 1.19.3~511^2~5799 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2e0174e13cf8c316c5fd3bb47f2cf1f2c1490a22;p=platform%2Fupstream%2Fgstreamer.git pango: delete foreground color in shadow text This makes colored text have gray drop shadows instead of colored ones, which looks much better. https://bugzilla.gnome.org/show_bug.cgi?id=686841 --- diff --git a/ext/pango/gstbasetextoverlay.c b/ext/pango/gstbasetextoverlay.c index e1229c9..ebf8b9c 100644 --- a/ext/pango/gstbasetextoverlay.c +++ b/ext/pango/gstbasetextoverlay.c @@ -1252,6 +1252,16 @@ gst_base_text_overlay_set_composition (GstBaseTextOverlay * overlay) } } +static gboolean +gst_text_overlay_filter_foreground_attr (PangoAttribute * attr, gpointer data) +{ + if (attr->klass->type == PANGO_ATTR_FOREGROUND) { + return FALSE; + } else { + return TRUE; + } +} + static void gst_base_text_overlay_render_pangocairo (GstBaseTextOverlay * overlay, const gchar * string, gint textlen) @@ -1366,11 +1376,25 @@ gst_base_text_overlay_render_pangocairo (GstBaseTextOverlay * overlay, */ /* 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); - pango_cairo_show_layout (cr, overlay->layout); - cairo_restore (cr); + { + PangoAttrList *origin_attr, *filtered_attr; + + origin_attr = + pango_attr_list_copy (pango_layout_get_attributes (overlay->layout)); + filtered_attr = + pango_attr_list_filter (pango_attr_list_copy (origin_attr), + gst_text_overlay_filter_foreground_attr, NULL); + + 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); + pango_layout_set_attributes (overlay->layout, filtered_attr); + pango_cairo_show_layout (cr, overlay->layout); + pango_layout_set_attributes (overlay->layout, origin_attr); + pango_attr_list_unref (filtered_attr); + pango_attr_list_unref (origin_attr); + cairo_restore (cr); + } a = (overlay->outline_color >> 24) & 0xff; r = (overlay->outline_color >> 16) & 0xff;