summaryrefslogtreecommitdiffstats
path: root/src/extension/internal/cairo-render-context.cpp
diff options
context:
space:
mode:
authorPatrick Storz <eduard.braun2@gmx.de>2019-09-22 18:15:47 +0000
committerPatrick Storz <eduard.braun2@gmx.de>2019-09-22 18:58:48 +0000
commit8d68ead6a2f33755ec7d1ce3b1929b8623506d1c (patch)
tree1b1eded1f370e36e3b7569dc39006ab92a820c48 /src/extension/internal/cairo-render-context.cpp
parentObject properties: fix values of image-rendering enum (diff)
downloadinkscape-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 'src/extension/internal/cairo-render-context.cpp')
-rw-r--r--src/extension/internal/cairo-render-context.cpp21
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;
}
}