Code

add SPCurve::get_segment_count
[inkscape.git] / src / sp-fecomposite.cpp
index 68312aa1b9ffd95a046ad120d1e34683f23a263e..11d101bd63b75b6eb8b7ba8151806b589312e676 100644 (file)
@@ -20,6 +20,7 @@
 #include "attributes.h"
 #include "svg/svg.h"
 #include "sp-fecomposite.h"
+#include "helper-fns.h"
 #include "xml/repr.h"
 #include "display/nr-filter-composite.h"
 
@@ -32,7 +33,7 @@ static void sp_feComposite_build(SPObject *object, SPDocument *document, Inkscap
 static void sp_feComposite_release(SPObject *object);
 static void sp_feComposite_set(SPObject *object, unsigned int key, gchar const *value);
 static void sp_feComposite_update(SPObject *object, SPCtx *ctx, guint flags);
-static Inkscape::XML::Node *sp_feComposite_write(SPObject *object, Inkscape::XML::Node *repr, guint flags);
+static Inkscape::XML::Node *sp_feComposite_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
 static void sp_feComposite_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter);
 
 static SPFilterPrimitiveClass *feComposite_parent_class;
@@ -120,19 +121,6 @@ sp_feComposite_release(SPObject *object)
         ((SPObjectClass *) feComposite_parent_class)->release(object);
 }
 
-static double
-sp_feComposite_read_number(gchar const *value) {
-    char *end;
-    double ret = g_ascii_strtod(value, &end);
-    if (*end) {
-        g_warning("Unable to convert \"%s\" to number", value);
-        // We could leave this out, too. If strtod can't convert
-        // anything, it will return zero.
-        ret = 0;
-    }
-    return ret;
-}
-
 static FeCompositeOperator
 sp_feComposite_read_operator(gchar const *value) {
     if (!value) return COMPOSITE_DEFAULT;
@@ -169,7 +157,7 @@ sp_feComposite_set(SPObject *object, unsigned int key, gchar const *value)
             break;
 
         case SP_ATTR_K1:
-            k_n = sp_feComposite_read_number(value);
+            k_n = helperfns_read_number(value);
             if (k_n != feComposite->k1) {
                 feComposite->k1 = k_n;
                 if (feComposite->composite_operator == COMPOSITE_ARITHMETIC)
@@ -178,7 +166,7 @@ sp_feComposite_set(SPObject *object, unsigned int key, gchar const *value)
             break;
 
         case SP_ATTR_K2:
-            k_n = sp_feComposite_read_number(value);
+            k_n = helperfns_read_number(value);
             if (k_n != feComposite->k2) {
                 feComposite->k2 = k_n;
                 if (feComposite->composite_operator == COMPOSITE_ARITHMETIC)
@@ -187,7 +175,7 @@ sp_feComposite_set(SPObject *object, unsigned int key, gchar const *value)
             break;
 
         case SP_ATTR_K3:
-            k_n = sp_feComposite_read_number(value);
+            k_n = helperfns_read_number(value);
             if (k_n != feComposite->k3) {
                 feComposite->k3 = k_n;
                 if (feComposite->composite_operator == COMPOSITE_ARITHMETIC)
@@ -196,7 +184,7 @@ sp_feComposite_set(SPObject *object, unsigned int key, gchar const *value)
             break;
 
         case SP_ATTR_K4:
-            k_n = sp_feComposite_read_number(value);
+            k_n = helperfns_read_number(value);
             if (k_n != feComposite->k4) {
                 feComposite->k4 = k_n;
                 if (feComposite->composite_operator == COMPOSITE_ARITHMETIC)
@@ -242,7 +230,7 @@ sp_feComposite_update(SPObject *object, SPCtx *ctx, guint flags)
  * Writes its settings to an incoming repr object, if any.
  */
 static Inkscape::XML::Node *
-sp_feComposite_write(SPObject *object, Inkscape::XML::Node *repr, guint flags)
+sp_feComposite_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags)
 {
     // Inkscape-only object, not copied during an "plain SVG" dump:
     if (flags & SP_OBJECT_WRITE_EXT) {
@@ -250,12 +238,12 @@ sp_feComposite_write(SPObject *object, Inkscape::XML::Node *repr, guint flags)
             // is this sane?
             //repr->mergeFrom(SP_OBJECT_REPR(object), "id");
         } else {
-            repr = SP_OBJECT_REPR(object)->duplicate(NULL); // FIXME
+            repr = SP_OBJECT_REPR(object)->duplicate(doc);
         }
     }
 
     if (((SPObjectClass *) feComposite_parent_class)->write) {
-        ((SPObjectClass *) feComposite_parent_class)->write(object, repr, flags);
+        ((SPObjectClass *) feComposite_parent_class)->write(object, doc, repr, flags);
     }
 
     return repr;