summaryrefslogtreecommitdiffstats
path: root/src/extension/internal/cairo-renderer.cpp
diff options
context:
space:
mode:
authorAdib Taraben <theadib@gmail.com>2011-01-17 22:17:48 +0000
committertheAdib <theadib@gmail.com>2011-01-17 22:17:48 +0000
commit38bfe781de137c7173df661a5b99cef685a86e46 (patch)
treef91cdf1afd59924adf180ea494d419e5728e88ff /src/extension/internal/cairo-renderer.cpp
parentTranslations. Indonesian translation update by Waluyo Adi Siswanto. (diff)
downloadinkscape-38bfe781de137c7173df661a5b99cef685a86e46.tar.gz
inkscape-38bfe781de137c7173df661a5b99cef685a86e46.zip
remove memory boundries on bitmap renderer, optimize memory usage
Fixed bugs: - https://launchpad.net/bugs/494115 (bzr r10009)
Diffstat (limited to 'src/extension/internal/cairo-renderer.cpp')
-rw-r--r--src/extension/internal/cairo-renderer.cpp17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/extension/internal/cairo-renderer.cpp b/src/extension/internal/cairo-renderer.cpp
index 67f9354d8..bc3c6c484 100644
--- a/src/extension/internal/cairo-renderer.cpp
+++ b/src/extension/internal/cairo-renderer.cpp
@@ -452,8 +452,23 @@ static void sp_asbitmap_render(SPItem *item, CairoRenderContext *ctx)
Geom::OptRect bbox =
item->getBounds(item->i2d_affine(), SPItem::RENDERING_BBOX);
- if (!bbox) // no bbox, e.g. empty group
+ // no bbox, e.g. empty group
+ if (!bbox) {
return;
+ }
+
+ Geom::Rect docrect(Geom::Rect(Geom::Point(0, 0), SP_OBJECT(item)->document->getDimensions()));
+ Geom::Rect bboxrect(Geom::Rect(Geom::Point(bbox->min()[Geom::X], bbox->min()[Geom::Y]), Geom::Point(bbox->max()[Geom::X], bbox->max()[Geom::Y])));
+
+ Geom::OptRect _bbox = Geom::intersect(docrect, bboxrect);
+
+ // assign the object dimension clipped on the document, no need to draw on area not on canvas
+ bbox = _bbox;
+
+ // no bbox, e.g. empty group
+ if (!bbox) {
+ return;
+ }
// The width and height of the bitmap in pixels
unsigned width = (unsigned) floor ((bbox->max()[Geom::X] - bbox->min()[Geom::X]) * (res / PX_PER_IN));