Code

lpe-skeleton: add variable to control display of original path
[inkscape.git] / src / sp-feturbulence.cpp
index effdd777ee1ed657785901a7ca473381b33b598a..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;
 }
 
 /**
@@ -129,17 +130,17 @@ static bool sp_feTurbulence_read_stitchTiles(gchar const *value){
     return false; // 'noStitch' is default
 }
 
-static int sp_feTurbulence_read_type(gchar const *value){
-    if (!value) return 1; // 'turbulence' is default
+static NR::FilterTurbulenceType sp_feTurbulence_read_type(gchar const *value){
+    if (!value) return NR::TURBULENCE_TURBULENCE; // 'turbulence' is default
     switch(value[0]){
         case 'f':
-            if (strncmp(value, "fractalNoise", 12) == 0) return 0;
+            if (strncmp(value, "fractalNoise", 12) == 0) return NR::TURBULENCE_FRACTALNOISE;
             break;
         case 't':
-            if (strncmp(value, "turbulence", 10) == 0) return 1;
+            if (strncmp(value, "turbulence", 10) == 0) return NR::TURBULENCE_TURBULENCE;
             break;
     }
-    return 1; // 'turbulence' is default
+    return NR::TURBULENCE_TURBULENCE; // 'turbulence' is default
 }
 
 /**
@@ -154,21 +155,24 @@ sp_feTurbulence_set(SPObject *object, unsigned int key, gchar const *value)
     int read_int;
     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;
@@ -176,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;
@@ -183,13 +188,15 @@ 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;
         case SP_ATTR_TYPE:
-            read_int = sp_feTurbulence_read_type(value);
-            if (read_int != feTurbulence->type){
-                feTurbulence->type = read_int;
+            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;
@@ -223,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;
@@ -261,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);
 }
 
 /*