summaryrefslogtreecommitdiffstats
path: root/src/sp-item-group.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/sp-item-group.cpp')
-rw-r--r--src/sp-item-group.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp
index 5ae5713ca..7969c1bc1 100644
--- a/src/sp-item-group.cpp
+++ b/src/sp-item-group.cpp
@@ -38,6 +38,10 @@
#include "sp-mask.h"
#include "sp-path.h"
#include "box3d.h"
+#include "persp3d.h"
+#include "inkscape.h"
+#include "desktop-handles.h"
+#include "selection.h"
static void sp_group_class_init (SPGroupClass *klass);
static void sp_group_init (SPGroup *group);
@@ -56,6 +60,7 @@ static void sp_group_set(SPObject *object, unsigned key, char const *value);
static void sp_group_bbox(SPItem const *item, NRRect *bbox, NR::Matrix const &transform, unsigned const flags);
static void sp_group_print (SPItem * item, SPPrintContext *ctx);
static gchar * sp_group_description (SPItem * item);
+static NR::Matrix sp_group_set_transform(SPItem *item, NR::Matrix const &xform);
static NRArenaItem *sp_group_show (SPItem *item, NRArena *arena, unsigned int key, unsigned int flags);
static void sp_group_hide (SPItem * item, unsigned int key);
static void sp_group_snappoints (SPItem const *item, SnapPointsIter p);
@@ -112,6 +117,7 @@ sp_group_class_init (SPGroupClass *klass)
item_class->bbox = sp_group_bbox;
item_class->print = sp_group_print;
item_class->description = sp_group_description;
+ item_class->set_transform = sp_group_set_transform;
item_class->show = sp_group_show;
item_class->hide = sp_group_hide;
item_class->snappoints = sp_group_snappoints;
@@ -264,6 +270,26 @@ static gchar * sp_group_description (SPItem * item)
return SP_GROUP(item)->group->getDescription();
}
+static NR::Matrix
+sp_group_set_transform(SPItem *item, NR::Matrix const &xform)
+{
+ SPGroup *group = SP_GROUP(item);
+
+ Inkscape::Selection *selection = sp_desktop_selection(inkscape_active_desktop());
+ persp3d_split_perspectives_according_to_selection(selection);
+
+ NR::Matrix last_trans;
+ sp_svg_transform_read(SP_OBJECT_REPR(item)->attribute("transform"), &last_trans);
+ NR::Matrix inc_trans = last_trans.inverse()*xform;
+
+ std::list<Persp3D *> plist = selection->perspList();
+ for (std::list<Persp3D *>::iterator i = plist.begin(); i != plist.end(); ++i) {
+ persp3d_apply_affine_transformation(*i, inc_trans);
+ }
+
+ return xform;
+}
+
static void sp_group_set(SPObject *object, unsigned key, char const *value) {
SPGroup *group=SP_GROUP(object);