diff options
| author | Andrius Ramanauskas <knutux@gmail.com> | 2006-04-19 05:14:26 +0000 |
|---|---|---|
| committer | knutux <knutux@users.sourceforge.net> | 2006-04-19 05:14:26 +0000 |
| commit | cd3043cf07c274cd641b8483b55177e9a5cb1e10 (patch) | |
| tree | f860995235a5dc981868ab4f3482e861322ffe01 /src/libnr | |
| parent | fix name and size (diff) | |
| download | inkscape-cd3043cf07c274cd641b8483b55177e9a5cb1e10.tar.gz inkscape-cd3043cf07c274cd641b8483b55177e9a5cb1e10.zip | |
Rendering optimisation, which gives best results for zoomed in drawings with complex (multi-node) paths. Optimisation focus - eliminating cubicTo and LineTo nodes outside of visible area, so no unneeded calculations is needed and less memory is consumed (this avoids crashes which were occurring previously if zooming into a complex drawing)
(bzr r541)
Diffstat (limited to 'src/libnr')
| -rw-r--r-- | src/libnr/nr-pixblock.cpp | 24 | ||||
| -rw-r--r-- | src/libnr/nr-pixblock.h | 1 |
2 files changed, 13 insertions, 12 deletions
diff --git a/src/libnr/nr-pixblock.cpp b/src/libnr/nr-pixblock.cpp index 9b1ff2752..59e64b558 100644 --- a/src/libnr/nr-pixblock.cpp +++ b/src/libnr/nr-pixblock.cpp @@ -64,10 +64,10 @@ nr_pixblock_setup_fast (NRPixBlock *pb, NR_PIXBLOCK_MODE mode, int x0, int y0, i pb->mode = mode; pb->empty = 1; - pb->area.x0 = x0; - pb->area.y0 = y0; - pb->area.x1 = x1; - pb->area.y1 = y1; + pb->visible_area.x0 = pb->area.x0 = x0; + pb->visible_area.y0 = pb->area.y0 = y0; + pb->visible_area.x1 = pb->area.x1 = x1; + pb->visible_area.y1 = pb->area.y1 = y1; pb->rs = bpp * w; } @@ -103,10 +103,10 @@ nr_pixblock_setup (NRPixBlock *pb, NR_PIXBLOCK_MODE mode, int x0, int y0, int x1 pb->mode = mode; pb->empty = 1; - pb->area.x0 = x0; - pb->area.y0 = y0; - pb->area.x1 = x1; - pb->area.y1 = y1; + pb->visible_area.x0 = pb->area.x0 = x0; + pb->visible_area.y0 = pb->area.y0 = y0; + pb->visible_area.x1 = pb->area.x1 = x1; + pb->visible_area.y1 = pb->area.y1 = y1; pb->rs = bpp * w; } @@ -130,10 +130,10 @@ nr_pixblock_setup_extern (NRPixBlock *pb, NR_PIXBLOCK_MODE mode, int x0, int y0, pb->size = NR_PIXBLOCK_SIZE_STATIC; pb->mode = mode; pb->empty = empty; - pb->area.x0 = x0; - pb->area.y0 = y0; - pb->area.x1 = x1; - pb->area.y1 = y1; + pb->visible_area.x0 = pb->area.x0 = x0; + pb->visible_area.y0 = pb->area.y0 = y0; + pb->visible_area.x1 = pb->area.x1 = x1; + pb->visible_area.y1 = pb->area.y1 = y1; pb->data.px = px; pb->rs = rs; diff --git a/src/libnr/nr-pixblock.h b/src/libnr/nr-pixblock.h index 2a13dd921..c9ccb4fc6 100644 --- a/src/libnr/nr-pixblock.h +++ b/src/libnr/nr-pixblock.h @@ -41,6 +41,7 @@ struct NRPixBlock { bool empty : 1; ///< Empty flag unsigned int rs; ///< Size of line in bytes NRRectL area; + NRRectL visible_area; union { unsigned char *px; ///< Pointer to buffer unsigned char p[sizeof (unsigned char *)]; ///< Tiny buffer |
