Code

New Class SPDocumentUndo created which takes care of c++fying some non SPDocument...
[inkscape.git] / src / display / nr-arena-group.cpp
index fcce681a87f5643dcd0bef856c9c1023d1087b97..38d37c233421cfede8c4bea486028a6ad77a620e 100644 (file)
@@ -20,8 +20,9 @@
 #include "sp-filter.h"
 #include "sp-filter-reference.h"
 #include "sp-gaussian-blur.h"
-#include "sp-feblend.h"
+#include "filters/blend.h"
 #include "display/nr-filter-blend.h"
+#include "helper/geom.h"
 
 static void nr_arena_group_class_init (NRArenaGroupClass *klass);
 static void nr_arena_group_init (NRArenaGroup *group);
@@ -35,7 +36,7 @@ static void nr_arena_group_set_child_position (NRArenaItem *item, NRArenaItem *c
 static unsigned int nr_arena_group_update (NRArenaItem *item, NRRectL *area, NRGC *gc, unsigned int state, unsigned int reset);
 static unsigned int nr_arena_group_render (cairo_t *ct, NRArenaItem *item, NRRectL *area, NRPixBlock *pb, unsigned int flags);
 static unsigned int nr_arena_group_clip (NRArenaItem *item, NRRectL *area, NRPixBlock *pb);
-static NRArenaItem *nr_arena_group_pick (NRArenaItem *item, NR::Point p, double delta, unsigned int sticky);
+static NRArenaItem *nr_arena_group_pick (NRArenaItem *item, Geom::Point p, double delta, unsigned int sticky);
 
 static NRArenaItemClass *parent_class;
 
@@ -85,7 +86,7 @@ nr_arena_group_init (NRArenaGroup *group)
     group->children = NULL;
     group->last = NULL;
     group->style = NULL;
-    nr_matrix_set_identity (&group->child_transform);
+    group->child_transform.setIdentity();
 }
 
 static NRArenaItem *
@@ -171,7 +172,7 @@ nr_arena_group_update (NRArenaItem *item, NRRectL *area, NRGC *gc, unsigned int
 
     for (NRArenaItem *child = group->children; child != NULL; child = child->next) {
         NRGC cgc(gc);
-        nr_matrix_multiply (&cgc.transform, &group->child_transform, &gc->transform);
+        cgc.transform = group->child_transform * gc->transform;
         newstate = nr_arena_item_invoke_update (child, area, &cgc, state, reset);
         beststate = beststate & newstate;
     }
@@ -179,7 +180,8 @@ nr_arena_group_update (NRArenaItem *item, NRRectL *area, NRGC *gc, unsigned int
     if (beststate & NR_ARENA_ITEM_STATE_BBOX) {
         nr_rect_l_set_empty (&item->bbox);
         for (NRArenaItem *child = group->children; child != NULL; child = child->next) {
-            nr_rect_l_union (&item->bbox, &item->bbox, &child->bbox);
+            if (child->visible)
+                nr_rect_l_union (&item->bbox, &item->bbox, &child->drawbox);
         }
     }
 
@@ -199,7 +201,7 @@ void nr_arena_group_set_style (NRArenaGroup *group, SPStyle *style)
     if (style->filter.set && style->getFilter()) {
         if (!group->filter) {
             int primitives = sp_filter_primitive_count(SP_FILTER(style->getFilter()));
-            group->filter = new NR::Filter(primitives);
+            group->filter = new Inkscape::Filters::Filter(primitives);
         }
         sp_filter_build_renderer(SP_FILTER(style->getFilter()), group->filter);
     } else {
@@ -247,7 +249,7 @@ nr_arena_group_clip (NRArenaItem *item, NRRectL *area, NRPixBlock *pb)
 }
 
 static NRArenaItem *
-nr_arena_group_pick (NRArenaItem *item, NR::Point p, double delta, unsigned int sticky)
+nr_arena_group_pick (NRArenaItem *item, Geom::Point p, double delta, unsigned int sticky)
 {
     NRArenaGroup *group = NR_ARENA_GROUP (item);
 
@@ -269,17 +271,17 @@ nr_arena_group_set_transparent (NRArenaGroup *group, unsigned int transparent)
     group->transparent = transparent;
 }
 
-void nr_arena_group_set_child_transform(NRArenaGroup *group, NR::Matrix const &t)
+void nr_arena_group_set_child_transform(NRArenaGroup *group, Geom::Matrix const &t)
 {
-    NRMatrix nt(t);
+    Geom::Matrix nt(t);
     nr_arena_group_set_child_transform(group, &nt);
 }
 
-void nr_arena_group_set_child_transform(NRArenaGroup *group, NRMatrix const *t)
+void nr_arena_group_set_child_transform(NRArenaGroup *group, Geom::Matrix const *t)
 {
-    if (!t) t = &NR_MATRIX_IDENTITY;
+    if (!t) t = &GEOM_MATRIX_IDENTITY;
 
-    if (!NR_MATRIX_DF_TEST_CLOSE (t, &group->child_transform, NR_EPSILON)) {
+    if (!Geom::matrix_equalp(*t, group->child_transform, NR_EPSILON)) {
         nr_arena_item_request_render (NR_ARENA_ITEM (group));
         group->child_transform = *t;
         nr_arena_item_request_update (NR_ARENA_ITEM (group), NR_ARENA_ITEM_STATE_ALL, TRUE);