summaryrefslogtreecommitdiff
path: root/src/cairo-svg-surface.c
diff options
context:
space:
mode:
authorAnton Danilkin <afdw@yandex.ru>2021-04-13 18:31:23 +0200
committerAnton Danilkin <afdw@yandex.ru>2021-04-13 18:31:23 +0200
commit43a602b18561631b992944d2440c929e225084f6 (patch)
tree818b84cfb1554205957ae6b194ef87f9fd959559 /src/cairo-svg-surface.c
parent69d90f3e62902fd5e5f8a9bd50711b3da743839e (diff)
downloadcairo-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.c17
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,