diff options
| author | Adib Taraben <theadib@gmail.com> | 2011-01-17 22:17:48 +0000 |
|---|---|---|
| committer | theAdib <theadib@gmail.com> | 2011-01-17 22:17:48 +0000 |
| commit | 38bfe781de137c7173df661a5b99cef685a86e46 (patch) | |
| tree | f91cdf1afd59924adf180ea494d419e5728e88ff /src/extension/internal/cairo-renderer.cpp | |
| parent | Translations. Indonesian translation update by Waluyo Adi Siswanto. (diff) | |
| download | inkscape-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.cpp | 17 |
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)); |
