diff options
Diffstat (limited to 'src/sp-item-group.cpp')
| -rw-r--r-- | src/sp-item-group.cpp | 26 |
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); |
