From 410223aec5614206e8fb485e181791bd3abd80f7 Mon Sep 17 00:00:00 2001 From: Tavmjong Bah Date: Tue, 12 Nov 2013 15:28:10 +0100 Subject: Partial fix for blocker bug 1163449: "Imported bitmap appear blurry when zoomed in" Setting style to include "image-rendering:optimizeSpeed" will cause nearest neighbor filter to be used in downscaling. (bzr r12796) --- src/display/drawing-context.h | 4 ++++ src/display/drawing-image.cpp | 25 ++++++++++++++++++------- 2 files changed, 22 insertions(+), 7 deletions(-) (limited to 'src/display') diff --git a/src/display/drawing-context.h b/src/display/drawing-context.h index d4f0dbfc3..35be9a86b 100644 --- a/src/display/drawing-context.h +++ b/src/display/drawing-context.h @@ -111,6 +111,10 @@ public: void setSource(DrawingSurface *s); void setSourceCheckerboard(); + void patternSetFilter(cairo_filter_t filter) { + cairo_pattern_set_filter(cairo_get_source(_ct), filter); + } + Geom::Rect targetLogicalBounds() const; cairo_t *raw() { return _ct; } diff --git a/src/display/drawing-image.cpp b/src/display/drawing-image.cpp index a9c0499c2..1b9214c49 100644 --- a/src/display/drawing-image.cpp +++ b/src/display/drawing-image.cpp @@ -108,13 +108,6 @@ unsigned DrawingImage::_renderItem(DrawingContext &ct, Geom::IntRect const &/*ar if (!outline) { if (!_pixbuf) return RENDER_OK; - - // if (_style) { - // _style->image_rendering.computed - // See: http://www.w3.org/TR/SVG/painting.html#ImageRenderingProperty - // http://www.w3.org/TR/css4-images/#the-image-rendering - // style.h/style.cpp - // } Inkscape::DrawingContext::Save save(ct); ct.transform(_ctm); @@ -126,6 +119,24 @@ unsigned DrawingImage::_renderItem(DrawingContext &ct, Geom::IntRect const &/*ar ct.scale(_scale); ct.setSource(_pixbuf->getSurfaceRaw(), 0, 0); + 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 + switch (_style->image_rendering.computed) { + case SP_CSS_COLOR_RENDERING_AUTO: + // Do nothing + break; + case SP_CSS_COLOR_RENDERING_OPTIMIZEQUALITY: + ct.patternSetFilter( CAIRO_FILTER_BEST ); + break; + case SP_CSS_COLOR_RENDERING_OPTIMIZESPEED: + default: + ct.patternSetFilter( CAIRO_FILTER_NEAREST ); + break; + } + } + ct.paint(_opacity); } else { // outline; draw a rect instead -- cgit v1.2.3