diff options
| author | Krzysztof Kosi??ski <tweenk.pl@gmail.com> | 2011-08-16 04:04:53 +0000 |
|---|---|---|
| committer | Krzysztof KosiĆski <tweenk.pl@gmail.com> | 2011-08-16 04:04:53 +0000 |
| commit | dc713ea50efc5fd3f041db05ff92d31a3a54dc5b (patch) | |
| tree | c61e3dc02b30ceab7ba252c1216279cc11d9d956 /src/display/canvas-arena.cpp | |
| parent | Add sanity checks against singular transforms in the drawing tree. (diff) | |
| download | inkscape-dc713ea50efc5fd3f041db05ff92d31a3a54dc5b.tar.gz inkscape-dc713ea50efc5fd3f041db05ff92d31a3a54dc5b.zip | |
Add user preference for rendering cache size
(bzr r10347.1.34)
Diffstat (limited to 'src/display/canvas-arena.cpp')
| -rw-r--r-- | src/display/canvas-arena.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/display/canvas-arena.cpp b/src/display/canvas-arena.cpp index b254a55c8..ac2704895 100644 --- a/src/display/canvas-arena.cpp +++ b/src/display/canvas-arena.cpp @@ -21,6 +21,7 @@ #include "display/drawing-item.h" #include "display/drawing-group.h" #include "display/drawing-surface.h" +#include "preferences.h" using namespace Inkscape; @@ -48,6 +49,22 @@ static void sp_canvas_arena_request_render (SPCanvasArena *ca, Geom::IntRect con static SPCanvasItemClass *parent_class; static guint signals[LAST_SIGNAL] = {0}; +struct CacheBudgetObserver : public Inkscape::Preferences::Observer { + CacheBudgetObserver(SPCanvasArena *arena) + : Inkscape::Preferences::Observer("/options/renderingcache/size") + , _arena(arena) + { + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + Inkscape::Preferences::Entry v = prefs->getEntry(observed_path); + notify(v); + prefs->addObserver(*this); + } + void notify(Preferences::Entry const &v) { + _arena->drawing.setCacheBudget((1 << 20) * v.getIntLimited(128, 0, 4096)); + } + SPCanvasArena *_arena; +}; + GType sp_canvas_arena_get_type (void) { @@ -102,6 +119,7 @@ sp_canvas_arena_init (SPCanvasArena *arena) arena->sticky = FALSE; new (&arena->drawing) Inkscape::Drawing(arena); + arena->observer = new CacheBudgetObserver(arena); Inkscape::DrawingGroup *root = new DrawingGroup(arena->drawing); root->setPickChildren(true); @@ -129,6 +147,7 @@ sp_canvas_arena_destroy (GtkObject *object) { SPCanvasArena *arena = SP_CANVAS_ARENA (object); + delete arena->observer; arena->drawing.~Drawing(); if (GTK_OBJECT_CLASS (parent_class)->destroy) |
