summaryrefslogtreecommitdiffstats
path: root/src/display/canvas-arena.cpp
diff options
context:
space:
mode:
authorKrzysztof Kosi??ski <tweenk.pl@gmail.com>2011-08-16 04:04:53 +0000
committerKrzysztof KosiƄski <tweenk.pl@gmail.com>2011-08-16 04:04:53 +0000
commitdc713ea50efc5fd3f041db05ff92d31a3a54dc5b (patch)
treec61e3dc02b30ceab7ba252c1216279cc11d9d956 /src/display/canvas-arena.cpp
parentAdd sanity checks against singular transforms in the drawing tree. (diff)
downloadinkscape-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.cpp19
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)