Code

fix compositing for premultiplication and non-alpha cases
[inkscape.git] / src / live_effects / effect.cpp
index 901b80fccd0c1e70fc4d673406cd8c57ad575cbf..d13de7f9e9fea2d99c5a13ce0cdfd8b45b525c57 100644 (file)
@@ -30,6 +30,7 @@
 #include "live_effects/lpe-slant.h"\r
 #include "live_effects/lpe-test-doEffect-stack.h"\r
 #include "live_effects/lpe-gears.h"\r
+#include "live_effects/lpe-curvestitch.h"\r
 \r
 namespace Inkscape {\r
 \r
@@ -37,10 +38,13 @@ namespace LivePathEffect {
 \r
 const Util::EnumData<EffectType> LPETypeData[INVALID_LPE] = {\r
     // {constant defined in effect.h, _("name of your effect"), "name of your effect in SVG"}\r
-    {SKELETAL_STROKES,      _("Skeletal Strokes"),      "skeletal"},\r
+    {SKELETAL_STROKES,      _("Path along path"),      "skeletal"},\r
+#ifdef LPE_ENABLE_TEST_EFFECTS\r
     {SLANT,                 _("Slant"),                 "slant"},\r
     {DOEFFECTSTACK_TEST,    _("doEffect stack test"),   "doeffectstacktest"},\r
-    {GEARS,                 _("Gears"),                 "gears"}\r
+#endif\r
+    {GEARS,                 _("Gears"),                 "gears"},\r
+    {CURVE_STITCH,          _("Curve stitching"),       "curvestitching"},\r
 };\r
 const Util::EnumDataConverter<EffectType> LPETypeConverter(LPETypeData, INVALID_LPE);\r
 \r
@@ -52,15 +56,20 @@ Effect::New(EffectType lpenr, LivePathEffectObject *lpeobj)
         case SKELETAL_STROKES:\r
             neweffect = (Effect*) new LPESkeletalStrokes(lpeobj);\r
             break;\r
-        case SLANT:\r
+#ifdef LPE_ENABLE_TEST_EFFECTS\r
+            case SLANT:\r
             neweffect = (Effect*) new LPESlant(lpeobj);\r
             break;\r
         case DOEFFECTSTACK_TEST:\r
             neweffect = (Effect*) new LPEdoEffectStackTest(lpeobj);\r
             break;\r
+#endif\r
         case GEARS:\r
             neweffect = (Effect*) new LPEGears(lpeobj);\r
             break;\r
+        case CURVE_STITCH:\r
+            neweffect = (Effect*) new LPECurveStitch(lpeobj);\r
+            break;\r
         default:\r
             g_warning("LivePathEffect::Effect::New   called with invalid patheffect type (%d)", lpenr);\r
             neweffect = NULL;\r
@@ -129,7 +138,7 @@ std::vector<Geom::Path>
 Effect::doEffect (std::vector<Geom::Path> & path_in)\r
 {\r
     Geom::Piecewise<Geom::D2<Geom::SBasis> > pwd2_in;\r
-    // FIXME: find standard function to convert std::vector<Geom::Path> ==> Piecewise< D2<SBasis> >\r
+\r
     for (unsigned int i=0; i < path_in.size(); i++) {\r
         pwd2_in.concat( path_in[i].toPwSb() );\r
     }\r
@@ -169,11 +178,18 @@ Effect::setParameter(Inkscape::XML::Node * repr, const gchar * key, const gchar
 \r
     param_map_type::iterator it = param_map.find(stringkey);\r
     if (it != param_map.end()) {\r
-        bool accepted = it->second->param_readSVGValue(new_value);\r
-        /* think: can this backfire and create infinite loop when started with unacceptable old_value?\r
-        if (!accepted) { // change was not accepted, so change it back.\r
-            repr->setAttribute(key, old_value);\r
-        } */\r
+        if (new_value) {\r
+            bool accepted = it->second->param_readSVGValue(new_value);\r
+            if (!accepted) { \r
+                g_warning("Effect::setParameter - '%s' not accepted for %s", new_value, key);\r
+                // change was not accepted, so change it back.\r
+                // think: can this backfire and create infinite loop when started with unacceptable old_value?\r
+                // repr->setAttribute(key, old_value);\r
+            }\r
+        } else {\r
+            // set default value\r
+            it->second->param_set_default();\r
+        }\r
     }\r
 }\r
 \r