summaryrefslogtreecommitdiffstats
path: root/src/display
diff options
context:
space:
mode:
authorKrzysztof Kosi??ski <tweenk.pl@gmail.com>2011-08-25 18:33:10 +0000
committerKrzysztof Kosinski <tweenk.pl@gmail.com>2011-08-25 18:33:10 +0000
commit969504cc521a5116e1b1b8ea9e0355f69e6c93eb (patch)
tree60f8983850400f7fed7184675c6acf96357ad7e2 /src/display
parentRemove duplicate bbox data from DrawingShape (diff)
downloadinkscape-969504cc521a5116e1b1b8ea9e0355f69e6c93eb.tar.gz
inkscape-969504cc521a5116e1b1b8ea9e0355f69e6c93eb.zip
Reduce default rendering cache size to 64 MiB
(bzr r10347.1.39)
Diffstat (limited to 'src/display')
-rw-r--r--src/display/canvas-arena.cpp21
-rw-r--r--src/display/canvas-arena.h4
2 files changed, 15 insertions, 10 deletions
diff --git a/src/display/canvas-arena.cpp b/src/display/canvas-arena.cpp
index ac2704895..4688a58e3 100644
--- a/src/display/canvas-arena.cpp
+++ b/src/display/canvas-arena.cpp
@@ -49,18 +49,23 @@ 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")
+struct CachePrefObserver : public Inkscape::Preferences::Observer {
+ CachePrefObserver(SPCanvasArena *arena)
+ : Inkscape::Preferences::Observer("/options/renderingcache")
, _arena(arena)
{
Inkscape::Preferences *prefs = Inkscape::Preferences::get();
- Inkscape::Preferences::Entry v = prefs->getEntry(observed_path);
- notify(v);
+ std::vector<Inkscape::Preferences::Entry> v = prefs->getAllEntries(observed_path);
+ for (unsigned i=0; i<v.size(); ++i) {
+ notify(v[i]);
+ }
prefs->addObserver(*this);
}
void notify(Preferences::Entry const &v) {
- _arena->drawing.setCacheBudget((1 << 20) * v.getIntLimited(128, 0, 4096));
+ Glib::ustring name = v.getEntryName();
+ if (name == "size") {
+ _arena->drawing.setCacheBudget((1 << 20) * v.getIntLimited(64, 0, 4096));
+ }
}
SPCanvasArena *_arena;
};
@@ -119,13 +124,13 @@ 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);
- root->setCached(true, true);
arena->drawing.setRoot(root);
+ arena->observer = new CachePrefObserver(arena);
+
arena->drawing.signal_request_update.connect(
sigc::bind<0>(
sigc::ptr_fun(&sp_canvas_arena_request_update),
diff --git a/src/display/canvas-arena.h b/src/display/canvas-arena.h
index 463dc1bc3..f145a9c70 100644
--- a/src/display/canvas-arena.h
+++ b/src/display/canvas-arena.h
@@ -31,7 +31,7 @@ G_BEGIN_DECLS
typedef struct _SPCanvasArena SPCanvasArena;
typedef struct _SPCanvasArenaClass SPCanvasArenaClass;
-struct CacheBudgetObserver;
+struct CachePrefObserver;
struct _SPCanvasArena {
SPCanvasItem item;
@@ -46,7 +46,7 @@ struct _SPCanvasArena {
Inkscape::DrawingItem *active;
/* fixme: */
Inkscape::DrawingItem *picked;
- CacheBudgetObserver *observer;
+ CachePrefObserver *observer;
double delta;
};