Code

better fix for lpe stack forking
[inkscape.git] / src / sp-item.cpp
index d6f68fc74019b7a5ffd39e5bc2f24e899da94d65..5a2dfb2f05f2cec6508951a87caf71e51d91c228 100644 (file)
@@ -1377,27 +1377,7 @@ sp_item_adjust_livepatheffect (SPItem *item, Geom::Matrix const &postmul, bool s
 
     SPLPEItem *lpeitem = SP_LPE_ITEM (item);
     if ( sp_lpe_item_has_path_effect(lpeitem) ) {
-        // If one of the path effects is used by 2 or more items, fork it
-        // so that each object has its own independent copy of the effect.
-        // Forking messes up the path effect list, so after each fork,
-        // reload the list and recheck if more forking is required.
-        bool forked = false;
-        do {
-            forked = false;
-            PathEffectList effect_list =  sp_lpe_item_get_effect_list(lpeitem);
-            for (PathEffectList::iterator it = effect_list.begin(); it != effect_list.end(); it++)
-            {
-                LivePathEffectObject *lpeobj = (*it)->lpeobject;
-                if (lpeobj) {
-                    LivePathEffectObject *new_lpeobj = lpeobj->fork_private_if_necessary();
-                    if (new_lpeobj != lpeobj) {
-                        sp_lpe_item_replace_path_effect(lpeitem, lpeobj, new_lpeobj);
-                        forked = true;
-                        break;  // forked, so break the for-loop and recheck
-                    }
-                }
-            }
-        } while (forked);
+        sp_lpe_item_fork_path_effects_if_necessary(lpeitem);
 
         // now that all LPEs are forked_if_necessary, we can apply the transform
         PathEffectList effect_list =  sp_lpe_item_get_effect_list(lpeitem);