diff options
Diffstat (limited to 'pango/pangocairo-render.c')
-rw-r--r-- | pango/pangocairo-render.c | 37 |
1 files changed, 29 insertions, 8 deletions
diff --git a/pango/pangocairo-render.c b/pango/pangocairo-render.c index b1efb37f..73b1ae36 100644 --- a/pango/pangocairo-render.c +++ b/pango/pangocairo-render.c @@ -191,17 +191,38 @@ set_color (PangoCairoRenderer *crenderer, PangoRenderPart part) { PangoColor *color = pango_renderer_get_color ((PangoRenderer *) (crenderer), part); - guint16 alpha = pango_renderer_get_alpha ((PangoRenderer *) (crenderer), part); + guint16 a = pango_renderer_get_alpha ((PangoRenderer *) (crenderer), part); + gdouble red, green, blue, alpha; - if (!alpha) - alpha = 0xffff; + if (!a && !color) + return; if (color) - cairo_set_source_rgba (crenderer->cr, - color->red / 65535., - color->green / 65535., - color->blue / 65535., - alpha / 65535.); + { + red = color->red / 65535.; + green = color->green / 65535.; + blue = color->blue / 65535.; + alpha = 1.; + } + else + { + cairo_pattern_t *pattern = cairo_get_source (crenderer->cr); + + if (pattern && cairo_pattern_get_type (pattern) == CAIRO_PATTERN_TYPE_SOLID) + cairo_pattern_get_rgba (pattern, &red, &green, &blue, &alpha); + else + { + red = 0.; + green = 0.; + blue = 0.; + alpha = 1.; + } + } + + if (a) + alpha = a / 65535.; + + cairo_set_source_rgba (crenderer->cr, red, green, blue, alpha); } /* note: modifies crenderer->cr without doing cairo_save/restore() */ |