Code

better method to convert nartbpath to PathVector
[inkscape.git] / src / sp-feturbulence.cpp
index dfff840e0faa8bb00abd1d939195a9bdf5f4d2db..fcaf6c56f3937ad46a59857cf8ea8ca5bcdf7525 100644 (file)
@@ -38,7 +38,7 @@ static void sp_feTurbulence_build(SPObject *object, SPDocument *document, Inksca
 static void sp_feTurbulence_release(SPObject *object);
 static void sp_feTurbulence_set(SPObject *object, unsigned int key, gchar const *value);
 static void sp_feTurbulence_update(SPObject *object, SPCtx *ctx, guint flags);
-static Inkscape::XML::Node *sp_feTurbulence_write(SPObject *object, Inkscape::XML::Node *repr, guint flags);
+static Inkscape::XML::Node *sp_feTurbulence_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags);
 static void sp_feTurbulence_build_renderer(SPFilterPrimitive *primitive, NR::Filter *filter);
 
 static SPFilterPrimitiveClass *feTurbulence_parent_class;
@@ -84,6 +84,7 @@ sp_feTurbulence_class_init(SPFeTurbulenceClass *klass)
 static void
 sp_feTurbulence_init(SPFeTurbulence *feTurbulence)
 {
+    feTurbulence->updated=false;
 }
 
 /**
@@ -155,21 +156,23 @@ sp_feTurbulence_set(SPObject *object, unsigned int key, gchar const *value)
     double read_num;
     bool read_bool;
     NR::FilterTurbulenceType read_type;
-    
+
     switch(key) {
        /*DEAL WITH SETTING ATTRIBUTES HERE*/
-       
+
         case SP_ATTR_BASEFREQUENCY:
             feTurbulence->baseFrequency.set(value);
                 //From SVG spec: If two <number>s are provided, the first number represents a base frequency in the X direction and the second value represents a base frequency in the Y direction. If one number is provided, then that value is used for both X and Y.
             if (feTurbulence->baseFrequency.optNumIsSet() == false)
                 feTurbulence->baseFrequency.setOptNumber(feTurbulence->baseFrequency.getNumber());
+            feTurbulence->updated = false;
             object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
             break;
         case SP_ATTR_NUMOCTAVES:
             read_int = (int) helperfns_read_number(value);
             if (read_int != feTurbulence->numOctaves){
                 feTurbulence->numOctaves = read_int;
+                feTurbulence->updated = false;
                 object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
             }
             break;
@@ -177,6 +180,7 @@ sp_feTurbulence_set(SPObject *object, unsigned int key, gchar const *value)
             read_num = helperfns_read_number(value);
             if (read_num != feTurbulence->seed){
                 feTurbulence->seed = read_num;
+                feTurbulence->updated = false;
                 object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
             }
             break;
@@ -184,6 +188,7 @@ sp_feTurbulence_set(SPObject *object, unsigned int key, gchar const *value)
             read_bool = sp_feTurbulence_read_stitchTiles(value);
             if (read_bool != feTurbulence->stitchTiles){
                 feTurbulence->stitchTiles = read_bool;
+                feTurbulence->updated = false;
                 object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
             }
             break;
@@ -191,6 +196,7 @@ sp_feTurbulence_set(SPObject *object, unsigned int key, gchar const *value)
             read_type = sp_feTurbulence_read_type(value);
             if (read_type != feTurbulence->type){
                 feTurbulence->type = read_type;
+                feTurbulence->updated = false;
                 object->parent->requestModified(SP_OBJECT_MODIFIED_FLAG);
             }
             break;
@@ -224,20 +230,20 @@ sp_feTurbulence_update(SPObject *object, SPCtx *ctx, guint flags)
  * Writes its settings to an incoming repr object, if any.
  */
 static Inkscape::XML::Node *
-sp_feTurbulence_write(SPObject *object, Inkscape::XML::Node *repr, guint flags)
+sp_feTurbulence_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) {
         if (repr) {
             // is this sane?
-            repr->mergeFrom(SP_OBJECT_REPR(object), "id");
+            //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 *) feTurbulence_parent_class)->write) {
-        ((SPObjectClass *) feTurbulence_parent_class)->write(object, repr, flags);
+        ((SPObjectClass *) feTurbulence_parent_class)->write(object, doc, repr, flags);
     }
 
     return repr;
@@ -262,6 +268,7 @@ static void sp_feTurbulence_build_renderer(SPFilterPrimitive *primitive, NR::Fil
     nr_turbulence->set_seed(sp_turbulence->seed);
     nr_turbulence->set_stitchTiles(sp_turbulence->stitchTiles);
     nr_turbulence->set_type(sp_turbulence->type);
+    nr_turbulence->set_updated(sp_turbulence->updated);
 }
 
 /*