Code

use GC allocator for bitmap cache and transform
authormental <mental@users.sourceforge.net>
Mon, 1 May 2006 04:40:00 +0000 (04:40 +0000)
committermental <mental@users.sourceforge.net>
Mon, 1 May 2006 04:40:00 +0000 (04:40 +0000)
ChangeLog
src/display/nr-arena-item.cpp

index 84fc74a4d5618028bd45508f696c263f0367e28c..ea23609aa152c77fbfc903b8e322750d6cffd708 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2006-05-01  MenTaLguY  <mental@rydia.net>
+
+       * src/display/nr-arena-item.cpp:
+
+         use GC allocator for bitmap cache and transform
+
 2006-05-01  Marco Scholten  <mscholtn@xs4all.nl>
 
        * src/dialogs/inkscape-preferences.cpp: Moved 'compass like
index 22719e846d0286a463cbbf13d3a018aeabaa98e8..714359dfd16b07f892e31e82853f74672d83c499 100644 (file)
@@ -21,7 +21,9 @@
 #include "nr-arena.h"
 #include "nr-arena-item.h"
 //#include "nr-arena-group.h"
+#include "gc-core.h"
 
+namespace GC = Inkscape::GC;
 
 static void nr_arena_item_class_init (NRArenaItemClass *klass);
 static void nr_arena_item_init (NRArenaItem *item);
@@ -102,13 +104,8 @@ nr_arena_item_private_finalize (NRObject *object)
   remove_caches(item);
 #endif
 
-       if (item->px) {
-               nr_free (item->px);
-       }
-
-       if (item->transform) {
-               nr_free (item->transform);
-       }
+       item->px = NULL;
+       item->transform = NULL;
 
        ((NRObjectClass *) (parent_class))->finalize (object);
 }
@@ -235,7 +232,6 @@ nr_arena_item_invoke_update (NRArenaItem *item, NRRectL *area, NRGC *gc, unsigne
 
        /* Reset image cache, if not to be kept */
        if (!(item->state & NR_ARENA_ITEM_STATE_IMAGE) && (item->px)) {
-               nr_free (item->px);
                item->px = NULL;
        }
 #ifdef arena_item_tile_cache
@@ -336,7 +332,7 @@ unsigned int nr_arena_item_invoke_render(NRArenaItem *item, NRRectL const *area,
                carea.y0 = item->bbox.y0;
                carea.x1 = item->bbox.x1;
                carea.y1 = item->bbox.y1;
-               item->px = nr_new (unsigned char, 4 * (carea.x1 - carea.x0) * (carea.y1 - carea.y0));
+               item->px = new (GC::ATOMIC) unsigned char[4 * (carea.x1 - carea.x0) * (carea.y1 - carea.y0)];
                nr_pixblock_setup_extern (&cpb, NR_PIXBLOCK_MODE_R8G8B8A8P,
                               carea.x0, carea.y0, carea.x1, carea.y1,
                               item->px, 4 * (carea.x1 - carea.x0), TRUE, TRUE);
@@ -806,11 +802,9 @@ nr_arena_item_set_transform(NRArenaItem *item, NRMatrix const *transform)
                nr_arena_item_request_render (item);
                if (!transform || nr_matrix_test_identity (transform, NR_EPSILON)) {
                        /* Set to identity affine */
-                       if (item->transform) nr_free (item->transform);
                        item->transform = NULL;
                } else {
-                       if (!item->transform) item->transform = nr_new (NRMatrix, 1);
-                       *item->transform = *transform;
+                       if (!item->transform) item->transform = new (GC::ATOMIC) NRMatrix(*transform);
                }
                nr_arena_item_request_update (item, NR_ARENA_ITEM_STATE_ALL, TRUE);
        }