X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fdisplay%2Fnr-arena-item.h;h=103315c5eadd2ca4f316cc6c1e53b4938259dfa2;hb=b9cac2d195a58d3f9d9067b74f9fcadd0fb3cf39;hp=d38e44929269d10ee78d139052b68e363b4f7c49;hpb=9b00d76637485b69ec18c05dd4ec38200491ed7e;p=inkscape.git diff --git a/src/display/nr-arena-item.h b/src/display/nr-arena-item.h index d38e44929..103315c5e 100644 --- a/src/display/nr-arena-item.h +++ b/src/display/nr-arena-item.h @@ -59,11 +59,7 @@ #include "gc-soft-ptr.h" #include "nr-arena-forward.h" #include "display/nr-filter.h" - -// My testing shows that disabling cache reduces the amount -// of leaked memory when many documents are loaded one from the other, -// while there's no noticeable change in speed -//#define arena_item_tile_cache +#include struct NRGC { NRGC(NRGC const *p) : parent(p) {} @@ -91,11 +87,6 @@ struct NRArenaItem : public NRObject { /* Key for secondary rendering */ unsigned int key; -#ifdef arena_item_tile_cache - bool skipCaching; - double activity; -#endif - /* BBox in grid coordinates */ NRRectL bbox; /* Our affine */ @@ -115,6 +106,10 @@ struct NRArenaItem : public NRObject { /* Current Transformation Matrix */ NR::Matrix ctm; + /* These hold background buffer state for filter rendering */ + NRPixBlock *background_pb; + bool background_new; + void init(NRArena *arena) { this->arena = arena; } @@ -128,7 +123,7 @@ struct NRArenaItemClass : public NRObjectClass { void (* set_child_position) (NRArenaItem *item, NRArenaItem *child, NRArenaItem *ref); unsigned int (* update) (NRArenaItem *item, NRRectL *area, NRGC *gc, unsigned int state, unsigned int reset); - unsigned int (* render) (NRArenaItem *item, NRRectL *area, NRPixBlock *pb, unsigned int flags); + unsigned int (* render) (cairo_t *ct, NRArenaItem *item, NRRectL *area, NRPixBlock *pb, unsigned int flags); unsigned int (* clip) (NRArenaItem *item, NRRectL *area, NRPixBlock *pb); NRArenaItem * (* pick) (NRArenaItem *item, NR::Point p, double delta, unsigned int sticky); }; @@ -157,7 +152,7 @@ void nr_arena_item_set_child_position (NRArenaItem *item, NRArenaItem *child, NR unsigned int nr_arena_item_invoke_update (NRArenaItem *item, NRRectL *area, NRGC *gc, unsigned int state, unsigned int reset); -unsigned int nr_arena_item_invoke_render(NRArenaItem *item, NRRectL const *area, NRPixBlock *pb, unsigned int flags); +unsigned int nr_arena_item_invoke_render(cairo_t *ct, NRArenaItem *item, NRRectL const *area, NRPixBlock *pb, unsigned int flags); unsigned int nr_arena_item_invoke_clip (NRArenaItem *item, NRRectL *area, NRPixBlock *pb); NRArenaItem *nr_arena_item_invoke_pick (NRArenaItem *item, NR::Point p, double delta, unsigned int sticky); @@ -180,6 +175,8 @@ void nr_arena_item_set_clip (NRArenaItem *item, NRArenaItem *clip); void nr_arena_item_set_mask (NRArenaItem *item, NRArenaItem *mask); void nr_arena_item_set_order (NRArenaItem *item, int order); +NRPixBlock *nr_arena_item_get_background (NRArenaItem const *item, int depth = 0); + /* Helpers */ NRArenaItem *nr_arena_item_attach (NRArenaItem *parent, NRArenaItem *child, NRArenaItem *prev, NRArenaItem *next);