summaryrefslogtreecommitdiffstats
path: root/src/sp-item-group.cpp
diff options
context:
space:
mode:
authorJabier Arraiza Cenoz <jabier.arraiza@marker.es>2013-10-02 22:15:00 +0000
committerJabiertxof <jtx@jtx.marker.es>2013-10-02 22:15:00 +0000
commitaa6d389286f6402ef393015b000755bc3124362a (patch)
tree81e17d682f5aade76e44bc8809e751b42dd5f773 /src/sp-item-group.cpp
parentFixed a bug editing paths in others LPE -envelope- (diff)
parentFix segment welding in the node tool hanging when a two-point segment (diff)
downloadinkscape-aa6d389286f6402ef393015b000755bc3124362a.tar.gz
inkscape-aa6d389286f6402ef393015b000755bc3124362a.zip
update to trunk
(bzr r11950.1.158)
Diffstat (limited to 'src/sp-item-group.cpp')
-rw-r--r--src/sp-item-group.cpp42
1 files changed, 20 insertions, 22 deletions
diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp
index a99a3e988..41e049b86 100644
--- a/src/sp-item-group.cpp
+++ b/src/sp-item-group.cpp
@@ -161,44 +161,49 @@ void SPGroup::order_changed (Inkscape::XML::Node *child, Inkscape::XML::Node *ol
}
void SPGroup::update(SPCtx *ctx, unsigned int flags) {
- SPLPEItem::update(ctx, flags);
-
SPItemCtx *ictx, cctx;
ictx = (SPItemCtx *) ctx;
cctx = *ictx;
- if (flags & SP_OBJECT_MODIFIED_FLAG) {
- flags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
- }
+ unsigned childflags = flags;
- flags &= SP_OBJECT_MODIFIED_CASCADE;
-
- if (flags & SP_OBJECT_STYLE_MODIFIED_FLAG) {
- for (SPItemView *v = this->display; v != NULL; v = v->next) {
- Inkscape::DrawingGroup *group = dynamic_cast<Inkscape::DrawingGroup *>(v->arenaitem);
- group->setStyle(this->style);
- }
+ if (flags & SP_OBJECT_MODIFIED_FLAG) {
+ childflags |= SP_OBJECT_PARENT_MODIFIED_FLAG;
}
+ childflags &= SP_OBJECT_MODIFIED_CASCADE;
GSList *l = g_slist_reverse(this->childList(true, SPObject::ActionUpdate));
while (l) {
SPObject *child = SP_OBJECT (l->data);
l = g_slist_remove (l, child);
- if (flags || (child->uflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
+ if (childflags || (child->uflags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_CHILD_MODIFIED_FLAG))) {
if (SP_IS_ITEM (child)) {
SPItem const &chi = *SP_ITEM(child);
cctx.i2doc = chi.transform * ictx->i2doc;
cctx.i2vp = chi.transform * ictx->i2vp;
- child->updateDisplay((SPCtx *)&cctx, flags);
+ child->updateDisplay((SPCtx *)&cctx, childflags);
} else {
- child->updateDisplay(ctx, flags);
+ child->updateDisplay(ctx, childflags);
}
}
sp_object_unref(child);
}
+
+ // For a group, we need to update ourselves *after* updating children.
+ // this is because the group might contain shapes such as rect or ellipse,
+ // which recompute their equivalent path (a.k.a curve) in the update callback,
+ // and this is in turn used when computing bbox.
+ SPLPEItem::update(ctx, flags);
+
+ if (flags & SP_OBJECT_STYLE_MODIFIED_FLAG) {
+ for (SPItemView *v = this->display; v != NULL; v = v->next) {
+ Inkscape::DrawingGroup *group = dynamic_cast<Inkscape::DrawingGroup *>(v->arenaitem);
+ group->setStyle(this->style);
+ }
+ }
}
void SPGroup::modified(guint flags) {
@@ -212,13 +217,6 @@ void SPGroup::modified(guint flags) {
flags &= SP_OBJECT_MODIFIED_CASCADE;
- if (flags & SP_OBJECT_STYLE_MODIFIED_FLAG) {
- for (SPItemView *v = this->display; v != NULL; v = v->next) {
- Inkscape::DrawingGroup *group = dynamic_cast<Inkscape::DrawingGroup *>(v->arenaitem);
- group->setStyle(this->style);
- }
- }
-
GSList *l = g_slist_reverse(this->childList(true));
while (l) {