summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorbulia byak <buliabyak@gmail.com>2008-09-01 20:54:33 +0000
committerbuliabyak <buliabyak@users.sourceforge.net>2008-09-01 20:54:33 +0000
commitb37e8a455c7d52396460ab092b9b9d16df3d57bb (patch)
tree017e854e1ad86f582246f94dbb513c88c2c159ad /src
parentI don't have this function, must be a recent addition to glib? replaced by a ... (diff)
downloadinkscape-b37e8a455c7d52396460ab092b9b9d16df3d57bb.tar.gz
inkscape-b37e8a455c7d52396460ab092b9b9d16df3d57bb.zip
fix assert when exporting bug 171849 file, make sure small patterns are exported properly by scaling them up (to use integer width/height) and then down
(bzr r6750)
Diffstat (limited to 'src')
-rw-r--r--src/extension/internal/cairo-render-context.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/extension/internal/cairo-render-context.cpp b/src/extension/internal/cairo-render-context.cpp
index 4a3dd11a6..0a12a5c5b 100644
--- a/src/extension/internal/cairo-render-context.cpp
+++ b/src/extension/internal/cairo-render-context.cpp
@@ -976,10 +976,14 @@ CairoRenderContext::_createPatternPainter(SPPaintServer const *const paintserver
width_scaler *= 1.25;
height_scaler *= 1.25;
}
+
+#define SUBPIX_SCALE 1000
+
// Cairo requires an integer pattern surface width/height.
// Subtract 0.5 to prevent small rounding errors from increasing pattern size by one pixel.
- double surface_width = ceil(bbox_width_scaler * width_scaler * width - 0.5);
- double surface_height = ceil(bbox_height_scaler * height_scaler * height - 0.5);
+ // Multiply by SUBPIX_SCALE to allow for less than a pixel precision
+ double surface_width = MAX(ceil(SUBPIX_SCALE * bbox_width_scaler * width_scaler * width - 0.5), 1);
+ double surface_height = MAX(ceil(SUBPIX_SCALE * bbox_height_scaler * height_scaler * height - 0.5), 1);
TRACE(("surface size: %f x %f\n", surface_width, surface_height));
// create new rendering context
CairoRenderContext *pattern_ctx = cloneMe(surface_width, surface_height);