mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-02-15 17:20:29 +01:00
SVG: fix a radial gradient failure when using CAIRO_EXTEND_REFLECT.
Assume from the beginning we're using a circle with a radius equal to 2 * ( r1 - r0 ) when emulating CAIRO_EXTEND_REFLECT.
This commit is contained in:
parent
c07867c545
commit
772edc9133
1 changed files with 7 additions and 7 deletions
|
|
@ -1501,23 +1501,23 @@ _cairo_svg_surface_emit_radial_pattern (cairo_svg_surface_t *surface,
|
|||
if ((extend == CAIRO_EXTEND_REFLECT
|
||||
|| extend == CAIRO_EXTEND_REPEAT)
|
||||
&& r0 > 0.0) {
|
||||
offset = fmod (r1, r1 - r0) / (r1 - r0) - 1.0;
|
||||
r = r1 - r0;
|
||||
double r_org = r1;
|
||||
|
||||
if (extend == CAIRO_EXTEND_REFLECT) {
|
||||
r *= 2.0;
|
||||
offset *= 0.5;
|
||||
r1 = 2 * r1 - r0;
|
||||
emulate_reflect = TRUE;
|
||||
}
|
||||
|
||||
offset = fmod (r1, r1 - r0) / (r1 - r0) - 1.0;
|
||||
r = r1 - r0;
|
||||
|
||||
/* New position of outer circle. */
|
||||
x = r * (x1 - fx) / r1 + fx;
|
||||
y = r * (y1 - fy) / r1 + fy;
|
||||
x = r * (x1 - fx) / r_org + fx;
|
||||
y = r * (y1 - fy) / r_org + fy;
|
||||
|
||||
x1 = x;
|
||||
y1 = y;
|
||||
r1 = r;
|
||||
|
||||
r0 = 0.0;
|
||||
} else {
|
||||
offset = r0 / r1;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue