diff --git a/gtk/gtkshadow.c b/gtk/gtkshadow.c index 89702c0a3f..f1f58c8f8b 100644 --- a/gtk/gtkshadow.c +++ b/gtk/gtkshadow.c @@ -258,13 +258,14 @@ _gtk_shadow_to_string (GtkShadow *shadow) void _gtk_text_shadow_paint_layout (GtkShadow *shadow, cairo_t *cr, - gdouble x, - gdouble y, PangoLayout *layout) { GList *l; GtkShadowElement *element; + if (!cairo_has_current_point (cr)) + cairo_move_to (cr, 0, 0); + /* render shadows starting from the last one, * and the others on top. */ @@ -274,10 +275,11 @@ _gtk_text_shadow_paint_layout (GtkShadow *shadow, cairo_save (cr); - cairo_move_to (cr, x + element->hoffset, y + element->voffset); + cairo_rel_move_to (cr, element->hoffset, element->voffset); gdk_cairo_set_source_rgba (cr, &element->color); _gtk_pango_fill_layout (cr, layout); + cairo_rel_move_to (cr, -element->hoffset, -element->voffset); cairo_restore (cr); } } diff --git a/gtk/gtkshadowprivate.h b/gtk/gtkshadowprivate.h index 846b1d30fa..46ef0ffb19 100644 --- a/gtk/gtkshadowprivate.h +++ b/gtk/gtkshadowprivate.h @@ -55,8 +55,6 @@ gboolean _gtk_shadow_get_resolved (GtkShadow *shadow); void _gtk_text_shadow_paint_layout (GtkShadow *shadow, cairo_t *cr, - gdouble x, - gdouble y, PangoLayout *layout); G_END_DECLS diff --git a/gtk/gtkthemingengine.c b/gtk/gtkthemingengine.c index 4ae5904a4b..47833a3c08 100644 --- a/gtk/gtkthemingengine.c +++ b/gtk/gtkthemingengine.c @@ -2429,13 +2429,14 @@ gtk_theming_engine_render_layout (GtkThemingEngine *engine, "text-shadow", &text_shadow, NULL); + prepare_context_for_layout (cr, x, y, layout); + if (text_shadow != NULL) { - _gtk_text_shadow_paint_layout (text_shadow, cr, x, y, layout); + _gtk_text_shadow_paint_layout (text_shadow, cr, layout); _gtk_shadow_unref (text_shadow); } - prepare_context_for_layout (cr, x, y, layout); gdk_cairo_set_source_rgba (cr, &fg_color); pango_cairo_show_layout (cr, layout);