diff options
| author | Patrick Storz <eduard.braun2@gmx.de> | 2019-09-22 18:15:47 +0000 |
|---|---|---|
| committer | Patrick Storz <eduard.braun2@gmx.de> | 2019-09-22 18:58:48 +0000 |
| commit | 8d68ead6a2f33755ec7d1ce3b1929b8623506d1c (patch) | |
| tree | 1b1eded1f370e36e3b7569dc39006ab92a820c48 /src/extension/internal/cairo-render-context.cpp | |
| parent | Object properties: fix values of image-rendering enum (diff) | |
| download | inkscape-8d68ead6a2f33755ec7d1ce3b1929b8623506d1c.tar.gz inkscape-8d68ead6a2f33755ec7d1ce3b1929b8623506d1c.zip | |
Try to improve match of image-rendering values to cairo filters
Specifically image-rendering="crisp-edges" should use a scaling
algorithm that does *not* blur edges.
Unfortunately this only leaves CAIRO_FILTER_NEAREST, but seems to
be the most suitable choice.
Diffstat (limited to '')
| -rw-r--r-- | src/extension/internal/cairo-render-context.cpp | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/extension/internal/cairo-render-context.cpp b/src/extension/internal/cairo-render-context.cpp index 60e83afef..adc4f1eb5 100644 --- a/src/extension/internal/cairo-render-context.cpp +++ b/src/extension/internal/cairo-render-context.cpp @@ -1674,18 +1674,23 @@ bool CairoRenderContext::renderImage(Inkscape::Pixbuf *pb, // See cairo-pdf-surface.c if (style) { // See: http://www.w3.org/TR/SVG/painting.html#ImageRenderingProperty - // http://www.w3.org/TR/css4-images/#the-image-rendering - // style.h/style.cpp + // https://drafts.csswg.org/css-images-3/#the-image-rendering + // style.h/style.cpp, drawing-image.cpp + // + // CSS 3 defines: + // 'optimizeSpeed' as alias for "pixelated" + // 'optimizeQuality' as alias for "smooth" switch (style->image_rendering.computed) { - case SP_CSS_IMAGE_RENDERING_AUTO: - case SP_CSS_IMAGE_RENDERING_OPTIMIZEQUALITY: - case SP_CSS_IMAGE_RENDERING_CRISPEDGES: - cairo_pattern_set_filter(cairo_get_source(_cr), CAIRO_FILTER_BEST ); - break; case SP_CSS_IMAGE_RENDERING_OPTIMIZESPEED: case SP_CSS_IMAGE_RENDERING_PIXELATED: + // we don't have an implementation for crisp-edges, but it should *not* smooth or blur + case SP_CSS_IMAGE_RENDERING_CRISPEDGES: + cairo_pattern_set_filter(cairo_get_source(_cr), CAIRO_FILTER_NEAREST); + break; + case SP_CSS_IMAGE_RENDERING_OPTIMIZEQUALITY: + case SP_CSS_IMAGE_RENDERING_AUTO: default: - cairo_pattern_set_filter(cairo_get_source(_cr), CAIRO_FILTER_NEAREST ); + cairo_pattern_set_filter(cairo_get_source(_cr), CAIRO_FILTER_BEST); break; } } |
