mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-05-04 23:28:07 +02:00
SVG: Support CAIRO_EXTEND_NONE for radial gradients.
This is as simple as adding transparent color stops on either end.
This commit is contained in:
parent
fe68e8aa32
commit
97dbbae621
1 changed files with 27 additions and 4 deletions
|
|
@ -1280,11 +1280,14 @@ emit_radial_pattern (cairo_svg_surface_t *surface,
|
|||
|
||||
/* SVG doesn't have a start radius, so computing now SVG focal coordinates
|
||||
* and emulating start radius by translating color stops.
|
||||
* FIXME: We also need to emulate cairo behaviour inside start circle when
|
||||
* extend != CAIRO_EXTEND_NONE.
|
||||
* FIXME: Handle radius1 <= radius0 */
|
||||
fx = (r1 * x0 - r0 * x1) / (r1 - r0);
|
||||
fy = (r1 * y0 - r0 * y1) / (r1 - r0);
|
||||
if (pattern->base.base.extend == CAIRO_EXTEND_NONE) {
|
||||
fx = x0;
|
||||
fy = y0;
|
||||
} else {
|
||||
fx = (r1 * x0 - r0 * x1) / (r1 - r0);
|
||||
fy = (r1 * y0 - r0 * y1) / (r1 - r0);
|
||||
}
|
||||
|
||||
_cairo_output_stream_printf (document->xml_node_defs,
|
||||
"<radialGradient id=\"radial%d\" "
|
||||
|
|
@ -1300,7 +1303,27 @@ emit_radial_pattern (cairo_svg_surface_t *surface,
|
|||
cairo_matrix_invert (&p2u);
|
||||
emit_transform (document->xml_node_defs, "gradientTransform", ">\n", &p2u);
|
||||
|
||||
/* To support cairo's EXTEND_NONE, (for which SVG has no similar
|
||||
* notion), we add transparent color stops on either end of the
|
||||
* user-provided stops. */
|
||||
if (pattern->base.base.extend == CAIRO_EXTEND_NONE) {
|
||||
_cairo_output_stream_printf (document->xml_node_defs,
|
||||
"<stop offset=\"0\" style=\""
|
||||
"stop-color: rgb(0%%,0%%,0%%); "
|
||||
"stop-opacity: 0;\"/>\n");
|
||||
if (r0 != 0.0)
|
||||
_cairo_output_stream_printf (document->xml_node_defs,
|
||||
"<stop offset=\"%f\" style=\""
|
||||
"stop-color: rgb(0%%,0%%,0%%); "
|
||||
"stop-opacity: 0;\"/>\n",
|
||||
r0 / r1);
|
||||
}
|
||||
emit_pattern_stops (document->xml_node_defs, &pattern->base, r0 / r1);
|
||||
if (pattern->base.base.extend == CAIRO_EXTEND_NONE)
|
||||
_cairo_output_stream_printf (document->xml_node_defs,
|
||||
"<stop offset=\"1.0\" style=\""
|
||||
"stop-color: rgb(0%%,0%%,0%%); "
|
||||
"stop-opacity: 0;\"/>\n");
|
||||
|
||||
_cairo_output_stream_printf (document->xml_node_defs,
|
||||
"</radialGradient>\n");
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue