Code

allow full mouse dragging, rotating, scaling, etc. if a single layer is the selection
authorspeare <speare@users.sourceforge.net>
Sat, 14 Mar 2009 18:24:07 +0000 (18:24 +0000)
committerspeare <speare@users.sourceforge.net>
Sat, 14 Mar 2009 18:24:07 +0000 (18:24 +0000)
src/select-context.cpp
src/sp-item-group.h

index 0e35c6546fedb1accef8f3cd36ffdfc1125efd8b..b2a05dca2217567ab785f6bea5e767da91e1c2e9 100644 (file)
@@ -515,6 +515,8 @@ sp_select_context_root_handler(SPEventContext *event_context, GdkEvent *event)
                         if (!sc->moved) {
                             item_in_group = desktop->item_at_point(Geom::Point(event->button.x, event->button.y), TRUE);
                             group_at_point = desktop->group_at_point(Geom::Point(event->button.x, event->button.y));
+                            if (SP_IS_LAYER(selection->single()))
+                                group_at_point = SP_GROUP(selection->single());
 
                             // group-at-point is meant to be topmost item if it's a group,
                             // not topmost group of all items at point
@@ -577,9 +579,12 @@ sp_select_context_root_handler(SPEventContext *event_context, GdkEvent *event)
                                 seltrans->resetState();
                                 selection->toggle(sc->item);
                             } else {
+                                SPObject* single = selection->single();
                                 // without shift, increase state (i.e. toggle scale/rotation handles)
                                 if (selection->includes(sc->item)) {
                                     seltrans->increaseState();
+                                } else if (SP_IS_LAYER(single) && single->isAncestorOf(sc->item)) {
+                                    seltrans->increaseState();
                                 } else {
                                     seltrans->resetState();
                                     selection->set(sc->item);
index 1cf4e9912da248834a2bdb6d68e1536a2f6997fd..65a51055a79aab462eb760c4a9d1a7cff0dcce82 100644 (file)
@@ -22,6 +22,8 @@
 #define SP_IS_GROUP(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SP_TYPE_GROUP))
 #define SP_IS_GROUP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SP_TYPE_GROUP))
 
+#define SP_IS_LAYER(obj)         (SP_IS_GROUP(obj) && SP_GROUP(obj)->layerMode() == SPGroup::LAYER)
+
 class CGroup;
 
 struct SPGroup : public SPLPEItem {