diff options
author | Anton Danilkin <afdw@yandex.ru> | 2021-04-13 18:31:23 +0200 |
---|---|---|
committer | Anton Danilkin <afdw@yandex.ru> | 2021-04-13 18:31:23 +0200 |
commit | 43a602b18561631b992944d2440c929e225084f6 (patch) | |
tree | 818b84cfb1554205957ae6b194ef87f9fd959559 /src/cairo-svg-surface.c | |
parent | 69d90f3e62902fd5e5f8a9bd50711b3da743839e (diff) | |
download | cairo-43a602b18561631b992944d2440c929e225084f6.tar.gz |
Skip the color to alpha filter when possible
Diffstat (limited to 'src/cairo-svg-surface.c')
-rw-r--r-- | src/cairo-svg-surface.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/cairo-svg-surface.c b/src/cairo-svg-surface.c index 41d5cf0ea..bbf2fbb9d 100644 --- a/src/cairo-svg-surface.c +++ b/src/cairo-svg-surface.c @@ -1923,10 +1923,19 @@ _cairo_svg_surface_emit_composite_surface_pattern (cairo_output_stream_t *output "<use xlink:href=\"#source-%d\"", source_id); if (pattern->surface->content == CAIRO_CONTENT_ALPHA) { - _cairo_output_stream_printf (output, - " filter=\"url(#filter-%s)\"", - _cairo_svg_surface_emit_static_filter (surface->document, - CAIRO_SVG_FILTER_COLOR_TO_ALPHA)); + cairo_bool_t can_skip_filter = FALSE; + if (pattern->surface->backend && + pattern->surface->backend->type == CAIRO_SURFACE_TYPE_IMAGE && + (((cairo_image_surface_t *) pattern->surface)->format == CAIRO_FORMAT_A1 || + ((cairo_image_surface_t *) pattern->surface)->format == CAIRO_FORMAT_A8)) { + can_skip_filter = TRUE; + } + if (!can_skip_filter) { + _cairo_output_stream_printf (output, + " filter=\"url(#filter-%s)\"", + _cairo_svg_surface_emit_static_filter (surface->document, + CAIRO_SVG_FILTER_COLOR_TO_ALPHA)); + } } if (pattern_id == invalid_pattern_id) { _cairo_svg_surface_emit_transform (output, |