pjs/gfx/cairo/premultiply-alpha-solid-gra...

47 строки
1.3 KiB
Diff

Fix single and multi-stop solid gradients by multiplying by the alpha component. r=roc
This cairo commit that caused the problem: 2d790daa957471670f4ae0d3b22da89e4ee7111f.
It was merged into mozilla-central with 1effb72d30cf
diff --git a/gfx/cairo/cairo/src/cairo-pattern.c b/gfx/cairo/cairo/src/cairo-pattern.c
--- a/gfx/cairo/cairo/src/cairo-pattern.c
+++ b/gfx/cairo/cairo/src/cairo-pattern.c
@@ -2262,8 +2262,17 @@ _cairo_pattern_acquire_surface (const ca
if (src->n_stops)
{
+ cairo_color_t color;
+
+ /* multiply by alpha */
+ _cairo_color_init_rgba (&color,
+ src->stops->color.red,
+ src->stops->color.green,
+ src->stops->color.blue,
+ src->stops->color.alpha);
+
_cairo_pattern_init_solid (&solid,
- &src->stops->color,
+ &color,
CAIRO_CONTENT_COLOR_ALPHA);
}
else
@@ -2295,9 +2304,17 @@ _cairo_pattern_acquire_surface (const ca
}
if (i == src->n_stops) {
cairo_solid_pattern_t solid;
+ cairo_color_t color;
+
+ /* multiply by alpha */
+ _cairo_color_init_rgba (&color,
+ src->stops->color.red,
+ src->stops->color.green,
+ src->stops->color.blue,
+ src->stops->color.alpha);
_cairo_pattern_init_solid (&solid,
- &src->stops->color,
+ &color,
CAIRO_CONTENT_COLOR_ALPHA);
status =