summaryrefslogtreecommitdiffstats
path: root/src/sp-item-group.cpp
diff options
context:
space:
mode:
authorJabier Arraiza Cenoz <jabier.arraiza@marker.es>2014-06-07 11:15:07 +0000
committerJabiertxof <jtx@jtx.marker.es>2014-06-07 11:15:07 +0000
commit5b67a95f4477d1a69e9a0f100d71a77277d86ef2 (patch)
tree8ce58a552f29107488147cc29bb6c6a435d96b0a /src/sp-item-group.cpp
parentUndo changes in r13391 (diff)
downloadinkscape-5b67a95f4477d1a69e9a0f100d71a77277d86ef2.tar.gz
inkscape-5b67a95f4477d1a69e9a0f100d71a77277d86ef2.zip
Fix for Bug #1241902 -
(bzr r13341.1.52)
Diffstat (limited to 'src/sp-item-group.cpp')
-rw-r--r--src/sp-item-group.cpp36
1 files changed, 29 insertions, 7 deletions
diff --git a/src/sp-item-group.cpp b/src/sp-item-group.cpp
index 2cfe97db8..b3db0c1d7 100644
--- a/src/sp-item-group.cpp
+++ b/src/sp-item-group.cpp
@@ -778,17 +778,31 @@ void SPGroup::update_patheffect(bool write) {
}
}
+
+void
+sp_gslist_update_by_clip_or_mask(GSList *item_list,SPItem * item)
+{
+ if(item->mask_ref->getObject()) {
+ SPObject * clipormask = item->mask_ref->getObject()->firstChild();
+ item_list = g_slist_append(item_list,clipormask);
+ }
+ if(item->clip_ref->getObject()) {
+ SPObject * clipormask = item->clip_ref->getObject()->firstChild();
+ item_list = g_slist_append(item_list,clipormask);
+ }
+}
+
static void
sp_group_perform_patheffect(SPGroup *group, SPGroup *topgroup, bool write)
{
- GSList const *item_list = sp_item_group_item_list(SP_GROUP(group));
-
- for ( GSList const *iter = item_list; iter; iter = iter->next ) {
+ GSList *item_list = sp_item_group_item_list(group);
+ sp_gslist_update_by_clip_or_mask(item_list,group);
+ for ( GSList *iter = item_list; iter; iter = iter->next ) {
SPObject *subitem = static_cast<SPObject *>(iter->data);
-
if (SP_IS_GROUP(subitem)) {
sp_group_perform_patheffect(SP_GROUP(subitem), topgroup, write);
} else if (SP_IS_SHAPE(subitem)) {
+ sp_gslist_update_by_clip_or_mask(item_list,SP_ITEM(subitem));
SPCurve * c = NULL;
if (SP_IS_PATH(subitem)) {
@@ -799,9 +813,17 @@ sp_group_perform_patheffect(SPGroup *group, SPGroup *topgroup, bool write)
// only run LPEs when the shape has a curve defined
if (c) {
- c->transform(i2anc_affine(subitem, topgroup));
+ if(SP_IS_MASK(subitem->parent) || SP_IS_CLIPPATH(subitem->parent)) {
+ c->transform(i2anc_affine(group, topgroup));
+ } else {
+ c->transform(i2anc_affine(subitem, topgroup));
+ }
SP_LPE_ITEM(topgroup)->performPathEffect(c);
- c->transform(i2anc_affine(subitem, topgroup).inverse());
+ if(SP_IS_MASK(subitem->parent) || SP_IS_CLIPPATH(subitem->parent)) {
+ c->transform(i2anc_affine(group, topgroup).inverse());
+ } else {
+ c->transform(i2anc_affine(subitem, topgroup).inverse());
+ }
SP_SHAPE(subitem)->setCurve(c, TRUE);
if (write) {
@@ -809,7 +831,7 @@ sp_group_perform_patheffect(SPGroup *group, SPGroup *topgroup, bool write)
gchar *str = sp_svg_write_path(c->get_pathvector());
repr->setAttribute("d", str);
#ifdef GROUP_VERBOSE
-g_message("sp_group_perform_patheffect writes 'd' attribute");
+ g_message("sp_group_perform_patheffect writes 'd' attribute");
#endif
g_free(str);
}