[pango] attributes: Make alpha work without color
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pango] attributes: Make alpha work without color
- Date: Sat, 8 Apr 2017 04:43:55 +0000 (UTC)
commit 97fc6fbffe65d9ca4e92fc8979808faebed0ee35
Author: Matthias Clasen <mclasen redhat com>
Date: Fri Apr 7 22:49:00 2017 -0400
attributes: Make alpha work without color
Improve the behavior of the cairo renderer to take
alpha into account even if no color specified.
https://bugzilla.gnome.org/show_bug.cgi?id=773767
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 b1efb37..73b1ae3 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() */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]