summaryrefslogtreecommitdiff
path: root/src/cairo-svg-surface.c
diff options
context:
space:
mode:
authorAnton Danilkin <afdw@yandex.ru>2021-04-11 13:05:59 +0200
committerAnton Danilkin <afdw@yandex.ru>2021-04-11 23:59:47 +0200
commitc2ea2848fd52c23023f31f35f1a16693f8b50313 (patch)
treeed617b28c4e873e071bfcfd8663228d23905f295 /src/cairo-svg-surface.c
parent89eda6f65035af676f8028a1ecfab6e376a757a0 (diff)
downloadcairo-c2ea2848fd52c23023f31f35f1a16693f8b50313.tar.gz
Simplify _cairo_svg_surface_emit_composite_surface_pattern
Diffstat (limited to 'src/cairo-svg-surface.c')
-rw-r--r--src/cairo-svg-surface.c107
1 files changed, 52 insertions, 55 deletions
diff --git a/src/cairo-svg-surface.c b/src/cairo-svg-surface.c
index e43621db4..a10c47792 100644
--- a/src/cairo-svg-surface.c
+++ b/src/cairo-svg-surface.c
@@ -623,18 +623,17 @@ _cairo_svg_surface_clipper_intersect_clip_path (cairo_surface_clipper_t *clipper
}
_cairo_output_stream_printf (document->xml_node_defs,
- "<clipPath id=\"clip-%d\">\n"
- "<path",
+ "<clipPath id=\"clip-%d\">\n",
document->clip_id);
+
+ _cairo_output_stream_printf (document->xml_node_defs, "<path");
_cairo_svg_surface_emit_path (document->xml_node_defs, path, NULL);
+ _cairo_output_stream_printf (document->xml_node_defs, "/>\n");
- _cairo_output_stream_printf (document->xml_node_defs,
- "/>\n"
- "</clipPath>\n");
+ _cairo_output_stream_printf (document->xml_node_defs, "</clipPath>\n");
_cairo_output_stream_printf (surface->current_clipper_output_stream,
- "<g clip-path=\"url(#clip-%d)\" "
- "clip-rule=\"%s\">\n",
+ "<g clip-path=\"url(#clip-%d)\" clip-rule=\"%s\">\n",
document->clip_id,
fill_rule == CAIRO_FILL_RULE_EVEN_ODD ? "evenodd" : "nonzero");
@@ -1598,35 +1597,36 @@ _cairo_svg_surface_emit_surface (cairo_svg_document_t *document,
}
static cairo_status_t
-_cairo_svg_surface_emit_composite_surface_pattern (cairo_output_stream_t *output,
- cairo_svg_surface_t *svg_surface,
+_cairo_svg_surface_emit_composite_surface_pattern (cairo_output_stream_t *output,
+ cairo_svg_surface_t *surface,
cairo_surface_pattern_t *pattern,
- unsigned int pattern_id,
- const cairo_matrix_t *parent_matrix)
+ unsigned int pattern_id,
+ const cairo_matrix_t *parent_matrix)
{
cairo_status_t status;
- cairo_matrix_t p2u;
- unsigned int source_id;
- cairo_bool_t is_new;
- p2u = pattern->base.matrix;
+ cairo_matrix_t p2u = pattern->base.matrix;
status = cairo_matrix_invert (&p2u);
/* cairo_pattern_set_matrix ensures the matrix is invertible */
assert (status == CAIRO_STATUS_SUCCESS);
- status = _cairo_svg_surface_add_source_surface (svg_surface,
+ unsigned int source_id;
+ cairo_bool_t is_new;
+ status = _cairo_svg_surface_add_source_surface (surface,
pattern->surface,
&source_id,
&is_new);
- if (unlikely (status))
+ if (unlikely (status)) {
return status;
+ }
if (is_new) {
- status = _cairo_svg_surface_emit_surface (svg_surface->document,
+ status = _cairo_svg_surface_emit_surface (surface->document,
pattern->surface,
source_id);
- if (unlikely (status))
+ if (unlikely (status)) {
return status;
+ }
}
if (pattern_id != invalid_pattern_id) {
@@ -1649,34 +1649,31 @@ _cairo_svg_surface_emit_composite_surface_pattern (cairo_output_stream_t *outp
extents.width, extents.height);
_cairo_svg_surface_emit_transform (output,
"patternTransform",
- &p2u, parent_matrix);
+ &p2u,
+ parent_matrix);
_cairo_output_stream_printf (output, ">\n");
}
+ _cairo_output_stream_printf (output,
+ "<use xlink:href=\"#image-%d\"",
+ source_id);
if (pattern->surface->content == CAIRO_CONTENT_ALPHA) {
_cairo_output_stream_printf (output,
- "<g filter=\"url(#filter-%s)\">\n",
- _cairo_svg_surface_emit_static_filter (svg_surface->document,
+ " filter=\"url(#filter-%s)\"",
+ _cairo_svg_surface_emit_static_filter (surface->document,
CAIRO_SVG_FILTER_COLOR_TO_ALPHA));
}
-
- _cairo_output_stream_printf (output,
- "<use xlink:href=\"#image-%d\"",
- source_id);
-
if (pattern_id == invalid_pattern_id) {
_cairo_svg_surface_emit_transform (output,
"transform",
- &p2u, parent_matrix);
+ &p2u,
+ parent_matrix);
}
_cairo_output_stream_printf (output, "/>\n");
- if (pattern->surface->content == CAIRO_CONTENT_ALPHA) {
- _cairo_output_stream_printf (output, "</g>\n");
- }
-
- if (pattern_id != invalid_pattern_id)
+ if (pattern_id != invalid_pattern_id) {
_cairo_output_stream_printf (output, "</pattern>\n");
+ }
return CAIRO_STATUS_SUCCESS;
}
@@ -1876,27 +1873,29 @@ _cairo_svg_surface_emit_composite_recording_pattern (cairo_output_stream_t *outp
}
static cairo_status_t
-_cairo_svg_surface_emit_composite_pattern (cairo_output_stream_t *output,
- cairo_svg_surface_t *surface,
+_cairo_svg_surface_emit_composite_pattern (cairo_output_stream_t *output,
+ cairo_svg_surface_t *surface,
cairo_surface_pattern_t *pattern,
- unsigned int pattern_id,
- const cairo_matrix_t *parent_matrix)
+ unsigned int pattern_id,
+ const cairo_matrix_t *parent_matrix)
{
if (pattern_id != invalid_pattern_id) {
- assert (_cairo_svg_surface_svg_pattern_should_be_used(&pattern->base));
+ assert (_cairo_svg_surface_svg_pattern_should_be_used (&pattern->base));
}
if (pattern->surface->type == CAIRO_SURFACE_TYPE_RECORDING) {
- return _cairo_svg_surface_emit_composite_recording_pattern (output, surface,
+ return _cairo_svg_surface_emit_composite_recording_pattern (output,
+ surface,
pattern,
pattern_id,
parent_matrix);
+ } else {
+ return _cairo_svg_surface_emit_composite_surface_pattern (output,
+ surface,
+ pattern,
+ pattern_id,
+ parent_matrix);
}
-
- return _cairo_svg_surface_emit_composite_surface_pattern (output, surface,
- pattern,
- pattern_id,
- parent_matrix);
}
static cairo_status_t
@@ -2445,18 +2444,19 @@ _cairo_svg_surface_get_extents (void *abstract_surface,
static cairo_status_t
_cairo_svg_surface_emit_paint (cairo_output_stream_t *output,
- cairo_svg_surface_t *surface,
- const cairo_pattern_t *source,
- const cairo_pattern_t *mask_source)
+ cairo_svg_surface_t *surface,
+ const cairo_pattern_t *source,
+ const cairo_pattern_t *mask_source)
{
cairo_status_t status;
- if (_cairo_svg_surface_svg_clip_or_svg_mask_should_be_used(source))
+ if (_cairo_svg_surface_svg_clip_or_svg_mask_should_be_used (source)) {
return _cairo_svg_surface_emit_composite_pattern (output,
surface,
(cairo_surface_pattern_t *) source,
invalid_pattern_id,
mask_source ? &mask_source->matrix : NULL);
+ }
_cairo_output_stream_printf (output,
"<rect x=\"-50%%\" y=\"-50%%\" "
@@ -2465,7 +2465,6 @@ _cairo_svg_surface_emit_paint (cairo_output_stream_t *output,
if (unlikely (status)) {
return status;
}
-
_cairo_output_stream_printf (output, "/>\n");
return CAIRO_STATUS_SUCCESS;
@@ -3049,10 +3048,7 @@ _cairo_svg_surface_mask_impl (cairo_output_stream_t *output,
"<g mask=\"url(#mask-%d)\">\n",
mask_id);
- status = _cairo_svg_surface_emit_paint (output,
- surface,
- source,
- NULL);
+ status = _cairo_svg_surface_emit_paint (output, surface, source, NULL);
if (unlikely (status)) {
return status;
}
@@ -3355,9 +3351,11 @@ _cairo_svg_surface_show_glyphs_impl (cairo_output_stream_t *output,
}
_cairo_output_stream_printf (output, "<g");
+
status = _cairo_svg_surface_emit_pattern (surface, source, output, FALSE, NULL);
- if (unlikely (status))
+ if (unlikely (status)) {
return status;
+ }
_cairo_output_stream_printf (output, ">\n");
@@ -3401,7 +3399,6 @@ _cairo_svg_surface_show_glyphs_impl (cairo_output_stream_t *output,
status = _cairo_scaled_font_glyph_path (scaled_font,
(cairo_glyph_t *) glyphs,
num_glyphs, &path);
-
if (unlikely (status)) {
_cairo_path_fixed_fini (&path);
return status;