Code

Added skeleton files for other filter primitives' SP-objects. Added blur slider on...
authorhaa_rodrigues <haa_rodrigues@users.sourceforge.net>
Wed, 2 Aug 2006 21:31:59 +0000 (21:31 +0000)
committerhaa_rodrigues <haa_rodrigues@users.sourceforge.net>
Wed, 2 Aug 2006 21:31:59 +0000 (21:31 +0000)
54 files changed:
src/Makefile_insert
src/attributes-test.h
src/attributes.cpp
src/attributes.h
src/desktop-style.cpp
src/desktop-style.h
src/dialogs/object-properties.cpp
src/sp-feblend-fns.h [new file with mode: 0644]
src/sp-feblend.cpp [new file with mode: 0644]
src/sp-feblend.h [new file with mode: 0644]
src/sp-fecolormatrix-fns.h [new file with mode: 0644]
src/sp-fecolormatrix.cpp [new file with mode: 0644]
src/sp-fecolormatrix.h [new file with mode: 0644]
src/sp-fecomponenttransfer.cpp [new file with mode: 0644]
src/sp-fecomponenttransfer.h [new file with mode: 0644]
src/sp-fecomposite-fns.h [new file with mode: 0644]
src/sp-fecomposite.cpp [new file with mode: 0644]
src/sp-fecomposite.h [new file with mode: 0644]
src/sp-feconvolvematrix-fns.h [new file with mode: 0644]
src/sp-feconvolvematrix.cpp [new file with mode: 0644]
src/sp-feconvolvematrix.h [new file with mode: 0644]
src/sp-fediffuselighting-fns.h [new file with mode: 0644]
src/sp-fediffuselighting.cpp [new file with mode: 0644]
src/sp-fediffuselighting.h [new file with mode: 0644]
src/sp-fedisplacementmap-fns.h [new file with mode: 0644]
src/sp-fedisplacementmap.cpp [new file with mode: 0644]
src/sp-fedisplacementmap.h [new file with mode: 0644]
src/sp-feflood-fns.h [new file with mode: 0644]
src/sp-feflood.cpp [new file with mode: 0644]
src/sp-feflood.h [new file with mode: 0644]
src/sp-feimage-fns.h [new file with mode: 0644]
src/sp-feimage.cpp [new file with mode: 0644]
src/sp-feimage.h [new file with mode: 0644]
src/sp-femerge-fns.h [new file with mode: 0644]
src/sp-femerge.cpp [new file with mode: 0644]
src/sp-femerge.h [new file with mode: 0644]
src/sp-femorphology-fns.h [new file with mode: 0644]
src/sp-femorphology.cpp [new file with mode: 0644]
src/sp-femorphology.h [new file with mode: 0644]
src/sp-feoffset-fns.h [new file with mode: 0644]
src/sp-feoffset.cpp [new file with mode: 0644]
src/sp-feoffset.h [new file with mode: 0644]
src/sp-fespecularlighting-fns.h [new file with mode: 0644]
src/sp-fespecularlighting.cpp [new file with mode: 0644]
src/sp-fespecularlighting.h [new file with mode: 0644]
src/sp-fetile-fns.h [new file with mode: 0644]
src/sp-fetile.cpp [new file with mode: 0644]
src/sp-fetile.h [new file with mode: 0644]
src/sp-feturbulence-fns.h [new file with mode: 0644]
src/sp-feturbulence.cpp [new file with mode: 0644]
src/sp-feturbulence.h [new file with mode: 0644]
src/sp-object-repr.cpp
src/style.cpp
src/style.h

index dd65108ce02f0ba80fc1b90b6bb1daa48db31849..0b236eeca9afa5c0f4a3d38da065ea7eb7e00197 100644 (file)
@@ -143,10 +143,40 @@ libinkpre_a_SOURCES =     \
        sp-cursor.cpp sp-cursor.h       \
        sp-defs.cpp sp-defs.h   \
        sp-ellipse.cpp sp-ellipse.h     \
+       sp-feblend.cpp sp-feblend.h     \
+       sp-feblend-fns.h        \
+       sp-fecolormatrix.cpp sp-fecolormatrix.h \
+       sp-fecolormatrix-fns.h  \
+       sp-fecomponenttransfer.cpp sp-fecomponenttransfer.h     \
+       sp-fecomponenttransfer-fns.h    \
+       sp-fecomposite.cpp sp-fecomposite.h     \
+       sp-fecomposite-fns.h    \
+       sp-feconvolvematrix.cpp sp-feconvolvematrix.h   \
+       sp-feconvolvematrix-fns.h       \
+       sp-fediffuselighting.cpp sp-fediffuselighting.h \
+       sp-fediffuselighting-fns.h      \
+       sp-fedisplacementmap.cpp sp-fedisplacementmap.h \
+       sp-fedisplacementmap-fns.h      \
+       sp-feflood.cpp sp-feflood.h     \
+       sp-feflood-fns.h        \
+       sp-feimage.cpp sp-feimage.h     \
+       sp-feimage-fns.h        \
+       sp-femerge.cpp sp-femerge.h     \
+       sp-femerge-fns.h        \
+       sp-femorphology.cpp sp-femorphology.h   \
+       sp-femorphology-fns.h   \
+       sp-feoffset.cpp sp-feoffset.h   \
+       sp-feoffset-fns.h       \
+       sp-fespecularlighting.cpp sp-fespecularlighting.h       \
+       sp-fespecularlighting-fns.h     \
+       sp-fetile.cpp sp-fetile.h       \
+       sp-fetile-fns.h \
+       sp-feturbulence.cpp sp-feturbulence.h   \
+       sp-feturbulence-fns.h   \       
        sp-filter-fns.h \
-       sp-filter-reference.cpp       \
-       sp-filter-reference.h       \
-        sp-filter-units.h       \
+       sp-filter-reference.cpp \
+       sp-filter-reference.h   \
+       sp-filter-units.h       \
        sp-filter.cpp sp-filter.h       \
        sp-flowdiv.h sp-flowdiv.cpp \
        sp-flowregion.h sp-flowregion.cpp \
index c71b8f04caf730d6f88e02109915070934bcfa88..f0db48ad0d846eee0f90464abbb001974b796e8f 100644 (file)
@@ -96,10 +96,20 @@ struct {char const *attr; bool supported;} const all_attrs[] = {
     {"end", true},
     {"exponent", false},
     {"externalResourcesRequired", false},
+    {"feBlend", false},
     {"feColorMatrix", false},
+    {"feComponentTransfer", false},
     {"feComposite", false},
+    {"feConvolveMatrix", false},
+    {"feDiffuseLighting", false},
+    {"feDisplacementMap", false},
+    {"feFlood", false},
     {"feGaussianBlur", false},
+    {"feImage", false},
+    {"feMerge", false},
     {"feMorphology", false},
+    {"feOffset", false},
+    {"feSpecularLighting", false},
     {"feTile", false},
     {"fill", true},
     {"fill-opacity", true},
index f0ecc1e415ed13bccc0ac252997375062732699e..867e5989c73128be532974de96c62f14760d454f 100644 (file)
@@ -175,8 +175,70 @@ static SPStyleProp const props[] = {
     {SP_ATTR_FILTERUNITS, "filterUnits"},
     {SP_ATTR_PRIMITIVEUNITS, "primitiveUnits"},
     {SP_ATTR_FILTERRES, "filterRes"},
-    /* SPGaussianBlur */
+    /*feBlend*/
+    {SP_ATTR_MODE, "mode"},
+    {SP_ATTR_IN2, "in2"},
+    /*feColorMatrix*/
+    {SP_ATTR_TYPE, "type"},
+    {SP_ATTR_VALUES, "values"},
+    /*feComponentTransfer*/
+    //{SP_ATTR_TYPE, "type"},
+    {SP_ATTR_TABLEVALUES, "tableValues"},
+    {SP_ATTR_SLOPE, "slope"},
+    {SP_ATTR_INTERCEPT, "intercept"},
+    {SP_ATTR_AMPLITUDE, "amplitude"},
+    {SP_ATTR_EXPONENT, "exponent"},
+    //{SP_ATTR_OFFSET, "offset"},
+    /*feComposite*/
+    {SP_ATTR_OPERATOR, "operator"},
+    {SP_ATTR_K1, "k1"},
+    {SP_ATTR_K2, "k2"},
+    {SP_ATTR_K3, "k3"},
+    {SP_ATTR_K4, "k4"},
+    //{SP_ATTR_IN2, "in2"},
+    /*feConvolveMatrix*/
+    {SP_ATTR_ORDER, "order"},
+    {SP_ATTR_KERNELMATRIX, "kernelMatrix"},
+    {SP_ATTR_DIVISOR, "divisor"},
+    {SP_ATTR_BIAS, "bias"},
+    {SP_ATTR_TARGETX, "targetX"},
+    {SP_ATTR_TARGETY, "targetY"},
+    {SP_ATTR_EDGEMODE, "edgeMode"},
+    {SP_ATTR_KERNELUNITLENGTH, "kernelUnitLength"},
+    {SP_ATTR_PRESERVEALPHA, "preserveAlpha"},
+    /*feDiffuseLighting*/
+    {SP_ATTR_SURFACESCALE, "surfaceScale"},
+    {SP_ATTR_DIFFUSECONSTANT, "diffuseConstant"},
+    //{SP_ATTR_KERNELUNITLENGTH, "kernelUnitLength"},
+    /*feDisplacementMap*/
+    {SP_ATTR_SCALE, "scale"},
+    {SP_ATTR_XCHANNELSELECTOR, "xChannelSelector"},
+    {SP_ATTR_YCHANNELSELECTOR, "yChannelSelector"},
+    //{SP_ATTR_IN2, "in2"},
+    /*feFlood*/
+    {SP_ATTR_FLOODCOLOR, "flood-color"},
+    {SP_ATTR_FLOODOPACITY, "flood-opacity"},
+       /* SPGaussianBlur */
     {SP_ATTR_STDDEVIATION, "stdDeviation"},
+    /*feImage*/
+    /*feMerge*/
+    /*feMorphology*/
+    //{SP_ATTR_OPERATOR, "operator"},
+    {SP_ATTR_RADIUS, "radius"},
+    /*feOffset*/
+    //{SP_ATTR_DX, "dx"},
+    //{SP_ATTR_DY, "dy"},
+       /*feSpecularLighting*/
+    //{SP_ATTR_SURFACESCALE, "surfaceScale"},
+    {SP_ATTR_SPECULARCONSTANT, "specularConstant"},
+    {SP_ATTR_SPECULAREXPONENT, "specularExponent"},
+    /*feTile*/
+    /*feTurbulence*/
+    {SP_ATTR_BASEFREQUENCY, "baseFrequency"},
+       {SP_ATTR_NUMOCTAVES, "numOctaves"},
+    {SP_ATTR_SEED, "seed"},
+    {SP_ATTR_STITCHTILES, "stitchTiles"},
+    //{SP_ATTR_TYPE, "type"},
     /* SPGradient */
     {SP_ATTR_GRADIENTUNITS, "gradientUnits"},
     {SP_ATTR_GRADIENTTRANSFORM, "gradientTransform"},
@@ -201,7 +263,7 @@ static SPStyleProp const props[] = {
     {SP_ATTR_MARKERHEIGHT, "markerHeight"},
     {SP_ATTR_ORIENT, "orient"},
     /* SPStyleElem */
-    {SP_ATTR_TYPE, "type"},
+    //{SP_ATTR_TYPE, "type"},
     /* Animations */
     {SP_ATTR_ATTRIBUTENAME, "attributeName"},
     {SP_ATTR_ATTRIBUTETYPE, "attributeType"},
@@ -215,7 +277,7 @@ static SPStyleProp const props[] = {
     {SP_ATTR_REPEATDUR, "repeatDur"},
     /* Interpolating animations */
     {SP_ATTR_CALCMODE, "calcMode"},
-    {SP_ATTR_VALUES, "values"},
+    //{SP_ATTR_VALUES, "values"},
     {SP_ATTR_KEYTIMES, "keyTimes"},
     {SP_ATTR_KEYSPLINES, "keySplines"},
     {SP_ATTR_FROM, "from"},
index d80e870061defe57d975679914e022f5da32e4c8..5ef817e49ca6a3dfd330c27e2bf30bffbd8c9451 100644 (file)
@@ -175,8 +175,70 @@ enum SPAttributeEnum {
     SP_ATTR_FILTERUNITS,
     SP_ATTR_PRIMITIVEUNITS,
     SP_ATTR_FILTERRES,
-    /* SPGaussianBlur */
+    /*feBlend*/
+    SP_ATTR_MODE,
+    SP_ATTR_IN2,
+    /*feColorMatrix*/
+    SP_ATTR_TYPE,
+    SP_ATTR_VALUES,
+    /*feComponentTransfer*/
+    //SP_ATTR_TYPE,
+    SP_ATTR_TABLEVALUES,
+    SP_ATTR_SLOPE,
+    SP_ATTR_INTERCEPT,
+    SP_ATTR_AMPLITUDE,
+    SP_ATTR_EXPONENT,
+    //SP_ATTR_OFFSET,
+    /*feComposite*/
+    SP_ATTR_OPERATOR,
+    SP_ATTR_K1,
+    SP_ATTR_K2,
+    SP_ATTR_K3,
+    SP_ATTR_K4,
+    //SP_ATTR_IN2,
+    /*feConvolveMatrix*/
+    SP_ATTR_ORDER,
+    SP_ATTR_KERNELMATRIX,
+    SP_ATTR_DIVISOR,
+    SP_ATTR_BIAS,
+    SP_ATTR_TARGETX,
+    SP_ATTR_TARGETY,
+    SP_ATTR_EDGEMODE,
+    SP_ATTR_KERNELUNITLENGTH,
+    SP_ATTR_PRESERVEALPHA,
+    /*feDiffuseLighting*/
+    SP_ATTR_SURFACESCALE,
+    SP_ATTR_DIFFUSECONSTANT,
+    //SP_ATTR_KERNELUNITLENGTH,
+    /*feDisplacementMap*/
+    SP_ATTR_SCALE,
+    SP_ATTR_XCHANNELSELECTOR,
+    SP_ATTR_YCHANNELSELECTOR,
+    //SP_ATTR_IN2,
+    /*feFlood*/
+    SP_ATTR_FLOODCOLOR,
+    SP_ATTR_FLOODOPACITY,
+       /* SPGaussianBlur */
     SP_ATTR_STDDEVIATION,
+    /*feImage*/
+    /*feMerge*/
+    /*feMorphology*/
+    //SP_ATTR_OPERATOR,
+    SP_ATTR_RADIUS,
+    /*feOffset*/
+    //SP_ATTR_DX,
+    //SP_ATTR_DY,
+       /*feSpecularLighting*/
+    //SP_ATTR_SURFACESCALE,
+    SP_ATTR_SPECULARCONSTANT,
+    SP_ATTR_SPECULAREXPONENT,
+    /*feTile*/
+    /*feTurbulence*/
+    SP_ATTR_BASEFREQUENCY,
+       SP_ATTR_NUMOCTAVES,
+    SP_ATTR_SEED,
+    SP_ATTR_STITCHTILES,
+    //SP_ATTR_TYPE,
     /* SPGradient */
     SP_ATTR_GRADIENTUNITS,
     SP_ATTR_GRADIENTTRANSFORM,
@@ -201,7 +263,7 @@ enum SPAttributeEnum {
     SP_ATTR_MARKERHEIGHT,
     SP_ATTR_ORIENT,
     /* SPStyleElem */
-    SP_ATTR_TYPE,
+    //SP_ATTR_TYPE,
     /* Animations */
     SP_ATTR_ATTRIBUTENAME,
     SP_ATTR_ATTRIBUTETYPE,
@@ -215,7 +277,7 @@ enum SPAttributeEnum {
     SP_ATTR_REPEATDUR,
     /* Interpolating animations */
     SP_ATTR_CALCMODE,
-    SP_ATTR_VALUES,
+    //SP_ATTR_VALUES,
     SP_ATTR_KEYTIMES,
     SP_ATTR_KEYSPLINES,
     SP_ATTR_FROM,
index c9989df275b0751f10263cf841e7ded0a656053b..ff96f7e8ea033ca15f156cd9419d9f06e521cbec 100644 (file)
@@ -1009,6 +1009,18 @@ objects_query_fontfamily (GSList *objects, SPStyle *style_res)
     }
 }
 
+/**
+ * Write to style_res the average opacity of a list of objects.
+ */
+int
+objects_query_blur (GSList *objects, SPStyle *style_res)
+{
+    /*************temporary**********/
+    //style_res->opacity.value = SP_SCALE24_FROM_FLOAT(0.5);
+    return QUERY_STYLE_MULTIPLE_SAME;
+    /*************temporary**********/
+}
+
 /**
  * Query the given list of objects for the given property, write
  * the result to style, return appropriate flag.
@@ -1039,8 +1051,10 @@ sp_desktop_query_style_from_list (GSList *list, SPStyle *style, int property)
         return objects_query_fontstyle (list, style);
     } else if (property == QUERY_STYLE_PROPERTY_FONTNUMBERS) {
         return objects_query_fontnumbers (list, style);
-    }
 
+    } else if (property == QUERY_STYLE_PROPERTY_BLUR) {
+        return objects_query_blur (list, style);
+    }
     return QUERY_STYLE_NOTHING;
 }
 
index 8f8388289e8711a821ae7b5f566108b25bcb4a73..a1fd8a4ffa4d8b50f5f1bfa1b696121e4306a266 100644 (file)
@@ -46,7 +46,8 @@ enum { // which property was queried (add when you need more)
     QUERY_STYLE_PROPERTY_FONTFAMILY, // font-family
     QUERY_STYLE_PROPERTY_FONTSTYLE, // font style 
     QUERY_STYLE_PROPERTY_FONTNUMBERS, // size, spacings
-    QUERY_STYLE_PROPERTY_MASTEROPACITY // opacity
+    QUERY_STYLE_PROPERTY_MASTEROPACITY, // opacity
+       QUERY_STYLE_PROPERTY_BLUR // opacity
 };
 
 void sp_desktop_apply_css_recursive(SPObject *o, SPCSSAttr *css, bool skip_lines);
@@ -72,6 +73,8 @@ int objects_query_miterlimit (GSList *objects, SPStyle *style_res);
 int objects_query_strokecap (GSList *objects, SPStyle *style_res);
 int objects_query_strokejoin (GSList *objects, SPStyle *style_res);
 
+int objects_query_blur (GSList *objects, SPStyle *style_res);
+
 int sp_desktop_query_style_from_list (GSList *list, SPStyle *style, int property);
 int sp_desktop_query_style(SPDesktop *desktop, SPStyle *style, int property);
 bool sp_desktop_query_style_all (SPDesktop *desktop, SPStyle *query);
index f96949f5b1444eed439059b9f33938e10542c69a..df750c71b01277a23e340f14ca42f9c6656f3569 100644 (file)
@@ -38,6 +38,8 @@
 #include "desktop-handles.h"
 #include "desktop-style.h"
 #include "document.h"
+#include "document-private.h"
+#include <selection.h>
 #include "xml/repr.h"
 
 static GtkWidget *dlg = NULL;
@@ -50,6 +52,7 @@ static gchar *prefs_path = "dialogs.fillstroke";
 static void sp_fillstroke_selection_modified ( Inkscape::Application *inkscape, Inkscape::Selection *selection, guint flags, GtkObject *base );
 static void sp_fillstroke_selection_changed ( Inkscape::Application *inkscape, Inkscape::Selection *selection, GtkObject *base );
 static void sp_fillstroke_opacity_changed (GtkAdjustment *a, SPWidget *dlg);
+static void sp_fillstroke_blur_changed (GtkAdjustment *a, SPWidget *dlg);
 
 static void
 sp_object_properties_dialog_destroy (GtkObject *object, gpointer data)
@@ -213,6 +216,39 @@ sp_object_properties_dialog (void)
         g_signal_connect ( G_OBJECT (INKSCAPE), "modify_selection", G_CALLBACK (sp_fillstroke_selection_modified), dlg );
         g_signal_connect ( G_OBJECT (INKSCAPE), "activate_desktop", G_CALLBACK (sp_fillstroke_selection_changed), dlg );
 
+        
+        /* Blur */
+/* uncomment to display blur slider*/
+/*        GtkWidget *b_vb = gtk_vbox_new (FALSE, 0);
+        gtk_box_pack_start (GTK_BOX (vb), b_vb, FALSE, FALSE, 2);
+        gtk_object_set_data (GTK_OBJECT (dlg), "blur", b_vb);
+
+        GtkWidget *blur_l_hb = gtk_hbox_new (FALSE, 4);
+        GtkWidget *blur_l = gtk_label_new_with_mnemonic (_("_Blur"));
+        gtk_misc_set_alignment (GTK_MISC (blur_l), 0.0, 1.0);
+        gtk_box_pack_start (GTK_BOX (blur_l_hb), blur_l, FALSE, FALSE, 4);
+        gtk_box_pack_start (GTK_BOX (b_vb), blur_l_hb, FALSE, FALSE, 0);
+
+        GtkWidget *blur_hb = gtk_hbox_new (FALSE, 4);
+        gtk_box_pack_start (GTK_BOX (b_vb), blur_hb, FALSE, FALSE, 0);
+
+        GtkObject *blur_a = gtk_adjustment_new (0.0, 0.0, 1.0, 0.01, 0.1, 0.0);
+        gtk_object_set_data(GTK_OBJECT(dlg), "blur_adjustment", blur_a);
+
+        GtkWidget *blur_s = gtk_hscale_new (GTK_ADJUSTMENT (blur_a));
+        gtk_scale_set_draw_value (GTK_SCALE (blur_s), FALSE);
+        gtk_box_pack_start (GTK_BOX (blur_hb), blur_s, TRUE, TRUE, 4);
+        gtk_label_set_mnemonic_widget (GTK_LABEL(blur_l), blur_s);
+
+        GtkWidget *blur_sb = gtk_spin_button_new (GTK_ADJUSTMENT (blur_a), 0.01, 3);
+        gtk_box_pack_start (GTK_BOX (blur_hb), blur_sb, FALSE, FALSE, 0);
+
+        gtk_signal_connect ( blur_a, "value_changed",
+                             GTK_SIGNAL_FUNC (sp_fillstroke_blur_changed),
+                             dlg );
+                             
+        gtk_widget_show_all (b_vb);
+*/
         sp_fillstroke_selection_changed(NULL, NULL, NULL);
 
         gtk_widget_show (dlg);
@@ -314,6 +350,113 @@ sp_fillstroke_opacity_changed (GtkAdjustment *a, SPWidget *dlg)
 }
 
 
+
+/**
+ * Creates new private filter for the given vector
+ */
+
+static SPFilter *
+sp_filter_get(SPDocument *document, gdouble stdDeviation)
+{
+    g_return_val_if_fail(document != NULL, NULL);
+
+    SPDefs *defs = (SPDefs *) SP_DOCUMENT_DEFS(document);
+
+    // create a new private filter of the requested type
+    Inkscape::XML::Node *repr;
+    repr = sp_repr_new("svg:filter");
+    // privates are garbage-collectable
+    repr->setAttribute("inkscape:collect", "always");
+    
+    Inkscape::XML::Node *b_repr;
+    b_repr = sp_repr_new("svg:feGaussianBlur");
+    // privates are garbage-collectable
+    b_repr->setAttribute("inkscape:collect", "always");
+    
+    
+    Inkscape::CSSOStringStream os;
+    os << CLAMP (stdDeviation, 0.0, 1.0);
+    b_repr->setAttribute("stdDeviation", os.str().c_str());
+    
+    repr->appendChild(b_repr);
+    Inkscape::GC::release(b_repr);
+    
+    /* Append the new private filter to defs */
+    SP_OBJECT_REPR(defs)->appendChild(repr);
+    Inkscape::GC::release(repr);
+
+    // get corresponding object
+    SPFilter *f = (SPFilter *) document->getObjectByRepr(repr);
+    g_assert(f != NULL);
+    g_assert(SP_IS_FILTER(f));
+
+    return f;
+}
+
+/*
+ * TODO: check if selection has a filter applied and change its parameters instead of creating a new one
+ */
+static void
+sp_fillstroke_blur_changed (GtkAdjustment *a, SPWidget *dlg)
+{
+    //if dialog is locked, return 
+    if (gtk_object_get_data (GTK_OBJECT (dlg), "blocked"))
+        return;
+
+     //lock dialog
+    gtk_object_set_data (GTK_OBJECT (dlg), "blocked", GUINT_TO_POINTER (TRUE));
+    
+    //get desktop
+    SPDesktop *desktop = SP_ACTIVE_DESKTOP;
+    if (!desktop) {
+        return;
+    }
+    
+    if(a->value==0.0) //blur set to zero, remove filter
+    {
+        //if there is a filter attached, remove it
+        SPCSSAttr *css = sp_repr_css_attr_new ();
+        sp_repr_css_unset_property (css, "filter");
+        sp_desktop_set_style (desktop, css);
+        sp_repr_css_attr_unref (css);
+
+    } else { //blur non-zero
+        
+        //get current selection
+        Inkscape::Selection *selection = sp_desktop_selection (desktop);
+        //get list of selected items
+        GSList const *items = selection->itemList();
+        //get current document
+        SPDocument *document = sp_desktop_document (desktop);
+        
+        
+        //create new filter with feGaussianBlur primitive
+        SPFilter *constructed = sp_filter_get(document, a->value);
+        
+        //apply created filter to every selected item
+        for (GSList const *i = items; i != NULL; i = i->next) {
+            
+            gchar *val = g_strdup_printf("url(#%s)", SP_OBJECT_ID(constructed));
+        
+            SPCSSAttr *css = sp_repr_css_attr_new();
+            sp_repr_css_set_property(css, "filter", val);
+            g_free(val);
+            sp_repr_css_change_recursive(SP_OBJECT_REPR(SP_ITEM(i->data)), css, "style");
+            
+            sp_desktop_set_style (SP_ACTIVE_DESKTOP, css);
+            sp_repr_css_attr_unref(css);
+            
+            SP_OBJECT(SP_ITEM(i->data))->requestDisplayUpdate(( SP_OBJECT_MODIFIED_FLAG |
+                                            SP_OBJECT_STYLE_MODIFIED_FLAG ));
+        }
+    }
+
+        sp_document_maybe_done (sp_desktop_document (SP_ACTIVE_DESKTOP), "fillstroke:blur", SP_VERB_NONE,  "object-properties.cpp:467");
+
+        gtk_object_set_data (GTK_OBJECT (dlg), "blocked", GUINT_TO_POINTER (FALSE));
+}
+
+
 /*
   Local Variables:
   mode:c++
diff --git a/src/sp-feblend-fns.h b/src/sp-feblend-fns.h
new file mode 100644 (file)
index 0000000..f08ed9d
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef SP_FEBLEND_FNS_H
+#define SP_FEBLEND_FNS_H
+
+/** \file 
+ * Macros and fn declarations related to gaussian blur filter.
+ */
+
+#include <glib-object.h>
+#include <glib/gtypes.h>
+
+namespace Inkscape {
+namespace XML {
+class Node;
+}
+}
+
+class SPFeBlend;
+
+#define SP_TYPE_FEBLEND (sp_feBlend_get_type())
+#define SP_FEBLEND(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEBLEND, SPFeBlend))
+#define SP_FEBLEND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEBLEND, SPFeBlendClass))
+#define SP_IS_FEBLEND(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEBLEND))
+#define SP_IS_FEBLEND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEBLEND))
+
+GType sp_feBlend_get_type();
+
+#endif /* !SP_FEBLEND_FNS_H */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-feblend.cpp b/src/sp-feblend.cpp
new file mode 100644 (file)
index 0000000..41f1cea
--- /dev/null
@@ -0,0 +1,196 @@
+#define __SP_FEBLEND_CPP__
+
+/** \file
+ * SVG <feBlend> implementation.
+ *
+ */
+/*
+ * Authors:
+ *   hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "attributes.h"
+#include "svg/svg.h"
+#include "sp-feblend.h"
+#include "xml/repr.h"
+
+//#define SP_MACROS_SILENT
+//#include "macros.h"
+
+#define DEBUG_FEBLEND
+#ifdef DEBUG_FEBLEND
+# define debug(f, a...) { g_print("%s(%d) %s:", \
+                                  __FILE__,__LINE__,__FUNCTION__); \
+                          g_print(f, ## a); \
+                          g_print("\n"); \
+                        }
+#else
+# define debug(f, a...) /**/
+#endif
+
+/* FeBlend base class */
+
+static void sp_feBlend_class_init(SPFeBlendClass *klass);
+static void sp_feBlend_init(SPFeBlend *feBlend);
+
+static void sp_feBlend_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_feBlend_release(SPObject *object);
+static void sp_feBlend_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_feBlend_update(SPObject *object, SPCtx *ctx, guint flags);
+static Inkscape::XML::Node *sp_feBlend_write(SPObject *object, Inkscape::XML::Node *repr, guint flags);
+
+static SPObjectClass *feBlend_parent_class;
+
+GType
+sp_feBlend_get_type()
+{
+    static GType feBlend_type = 0;
+
+    if (!feBlend_type) {
+        GTypeInfo feBlend_info = {
+            sizeof(SPFeBlendClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_feBlend_class_init,
+            NULL, NULL,
+            sizeof(SPFeBlend),
+            16,
+            (GInstanceInitFunc) sp_feBlend_init,
+            NULL,    /* value_table */
+        };
+        feBlend_type = g_type_register_static(SP_TYPE_OBJECT, "SPFeBlend", &feBlend_info, (GTypeFlags)0);
+    }
+    return feBlend_type;
+}
+
+static void
+sp_feBlend_class_init(SPFeBlendClass *klass)
+{
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+
+    feBlend_parent_class = (SPObjectClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_feBlend_build;
+    sp_object_class->release = sp_feBlend_release;
+    sp_object_class->write = sp_feBlend_write;
+    sp_object_class->set = sp_feBlend_set;
+    sp_object_class->update = sp_feBlend_update;
+}
+
+static void
+sp_feBlend_init(SPFeBlend *feBlend)
+{
+    debug("0x%p",feBlend);
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPFeBlend variables.  For this to get called,
+ * our name must be associated with a repr via "sp_object_type_register".  Best done through
+ * sp-object-repr.cpp's repr_name_entries array.
+ */
+static void
+sp_feBlend_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    debug("0x%p",object);
+    if (((SPObjectClass *) feBlend_parent_class)->build) {
+        ((SPObjectClass *) feBlend_parent_class)->build(object, document, repr);
+    }
+
+    /*LOAD ATTRIBUTES FROM REPR HERE*/
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_feBlend_release(SPObject *object)
+{
+    debug("0x%p",object);
+
+    if (((SPObjectClass *) feBlend_parent_class)->release)
+        ((SPObjectClass *) feBlend_parent_class)->release(object);
+}
+
+/**
+ * Sets a specific value in the SPFeBlend.
+ */
+static void
+sp_feBlend_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    debug("0x%p %s(%u): '%s'",object,
+            sp_attribute_name(key),key,value);
+    SPFeBlend *feBlend = SP_FEBLEND(object);
+
+    switch(key) {\r
+       /*DEAL WITH SETTING ATTRIBUTES HERE*/
+        default:
+            if (((SPObjectClass *) feBlend_parent_class)->set)
+                ((SPObjectClass *) feBlend_parent_class)->set(object, key, value);
+            break;
+    }
+
+}
+
+/**
+ * Receives update notifications.
+ */
+static void
+sp_feBlend_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    debug("0x%p",object);
+
+    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
+                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
+
+        /* do something to trigger redisplay, updates? */
+
+    }
+
+    if (((SPObjectClass *) feBlend_parent_class)->update) {
+        ((SPObjectClass *) feBlend_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_feBlend_write(SPObject *object, Inkscape::XML::Node *repr, guint flags)
+{
+    debug("0x%p",object);
+
+    // 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");
+        } else {
+            repr = SP_OBJECT_REPR(object)->duplicate();
+        }
+    }
+
+    if (((SPObjectClass *) feBlend_parent_class)->write) {
+        ((SPObjectClass *) feBlend_parent_class)->write(object, repr, flags);
+    }
+
+    return repr;
+}
+
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-feblend.h b/src/sp-feblend.h
new file mode 100644 (file)
index 0000000..3119524
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef SP_FEBLEND_H_SEEN
+#define SP_FEBLEND_H_SEEN
+
+/** \file
+ * SVG <feBlend> implementation, see sp-feBlend.cpp.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-filter.h"
+#include "sp-feblend-fns.h"
+
+/* FeBlend base class */
+class SPFeBlendClass;
+
+struct SPFeBlend : public SPFilter {
+    /** BLEND ATTRIBUTES HERE */
+    
+};
+
+struct SPFeBlendClass {
+    SPFilterClass parent_class;
+};
+
+GType sp_feBlend_get_type();
+
+
+#endif /* !SP_FEBLEND_H_SEEN */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-fecolormatrix-fns.h b/src/sp-fecolormatrix-fns.h
new file mode 100644 (file)
index 0000000..3a4a8d3
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef SP_FECOLORMATRIX_FNS_H
+#define SP_FECOLORMATRIX_FNS_H
+
+/** \file 
+ * Macros and fn declarations related to gaussian blur filter.
+ */
+
+#include <glib-object.h>
+#include <glib/gtypes.h>
+
+namespace Inkscape {
+namespace XML {
+class Node;
+}
+}
+
+class SPFeColorMatrix;
+
+#define SP_TYPE_FECOLORMATRIX (sp_feColorMatrix_get_type())
+#define SP_FECOLORMATRIX(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FECOLORMATRIX, SPFeColorMatrix))
+#define SP_FECOLORMATRIX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FECOLORMATRIX, SPFeColorMatrixClass))
+#define SP_IS_FECOLORMATRIX(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FECOLORMATRIX))
+#define SP_IS_FECOLORMATRIX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FECOLORMATRIX))
+
+GType sp_feColorMatrix_get_type();
+
+#endif /* !SP_FECOLORMATRIX_FNS_H */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-fecolormatrix.cpp b/src/sp-fecolormatrix.cpp
new file mode 100644 (file)
index 0000000..eab5bb8
--- /dev/null
@@ -0,0 +1,196 @@
+#define __SP_FECOLORMATRIX_CPP__
+
+/** \file
+ * SVG <feColorMatrix> implementation.
+ *
+ */
+/*
+ * Authors:
+ *   hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "attributes.h"
+#include "svg/svg.h"
+#include "sp-fecolorMatrix.h"
+#include "xml/repr.h"
+
+//#define SP_MACROS_SILENT
+//#include "macros.h"
+
+#define DEBUG_FECOLORMATRIX
+#ifdef DEBUG_FECOLORMATRIX
+# define debug(f, a...) { g_print("%s(%d) %s:", \
+                                  __FILE__,__LINE__,__FUNCTION__); \
+                          g_print(f, ## a); \
+                          g_print("\n"); \
+                        }
+#else
+# define debug(f, a...) /**/
+#endif
+
+/* FeColorMatrix base class */
+
+static void sp_feColorMatrix_class_init(SPFeColorMatrixClass *klass);
+static void sp_feColorMatrix_init(SPFeColorMatrix *feColorMatrix);
+
+static void sp_feColorMatrix_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_feColorMatrix_release(SPObject *object);
+static void sp_feColorMatrix_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_feColorMatrix_update(SPObject *object, SPCtx *ctx, guint flags);
+static Inkscape::XML::Node *sp_feColorMatrix_write(SPObject *object, Inkscape::XML::Node *repr, guint flags);
+
+static SPObjectClass *feColorMatrix_parent_class;
+
+GType
+sp_feColorMatrix_get_type()
+{
+    static GType feColorMatrix_type = 0;
+
+    if (!feColorMatrix_type) {
+        GTypeInfo feColorMatrix_info = {
+            sizeof(SPFeColorMatrixClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_feColorMatrix_class_init,
+            NULL, NULL,
+            sizeof(SPFeColorMatrix),
+            16,
+            (GInstanceInitFunc) sp_feColorMatrix_init,
+            NULL,    /* value_table */
+        };
+        feColorMatrix_type = g_type_register_static(SP_TYPE_OBJECT, "SPFeColorMatrix", &feColorMatrix_info, (GTypeFlags)0);
+    }
+    return feColorMatrix_type;
+}
+
+static void
+sp_feColorMatrix_class_init(SPFeColorMatrixClass *klass)
+{
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+
+    feColorMatrix_parent_class = (SPObjectClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_feColorMatrix_build;
+    sp_object_class->release = sp_feColorMatrix_release;
+    sp_object_class->write = sp_feColorMatrix_write;
+    sp_object_class->set = sp_feColorMatrix_set;
+    sp_object_class->update = sp_feColorMatrix_update;
+}
+
+static void
+sp_feColorMatrix_init(SPFeColorMatrix *feColorMatrix)
+{
+    debug("0x%p",feColorMatrix);
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPFeColorMatrix variables.  For this to get called,
+ * our name must be associated with a repr via "sp_object_type_register".  Best done through
+ * sp-object-repr.cpp's repr_name_entries array.
+ */
+static void
+sp_feColorMatrix_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    debug("0x%p",object);
+    if (((SPObjectClass *) feColorMatrix_parent_class)->build) {
+        ((SPObjectClass *) feColorMatrix_parent_class)->build(object, document, repr);
+    }
+
+    /*LOAD ATTRIBUTES FROM REPR HERE*/
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_feColorMatrix_release(SPObject *object)
+{
+    debug("0x%p",object);
+
+    if (((SPObjectClass *) feColorMatrix_parent_class)->release)
+        ((SPObjectClass *) feColorMatrix_parent_class)->release(object);
+}
+
+/**
+ * Sets a specific value in the SPFeColorMatrix.
+ */
+static void
+sp_feColorMatrix_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    debug("0x%p %s(%u): '%s'",object,
+            sp_attribute_name(key),key,value);
+    SPFeColorMatrix *feColorMatrix = SP_FECOLORMATRIX(object);
+
+    switch(key) {\r
+       /*DEAL WITH SETTING ATTRIBUTES HERE*/
+        default:
+            if (((SPObjectClass *) feColorMatrix_parent_class)->set)
+                ((SPObjectClass *) feColorMatrix_parent_class)->set(object, key, value);
+            break;
+    }
+
+}
+
+/**
+ * Receives update notifications.
+ */
+static void
+sp_feColorMatrix_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    debug("0x%p",object);
+
+    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
+                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
+
+        /* do something to trigger redisplay, updates? */
+
+    }
+
+    if (((SPObjectClass *) feColorMatrix_parent_class)->update) {
+        ((SPObjectClass *) feColorMatrix_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_feColorMatrix_write(SPObject *object, Inkscape::XML::Node *repr, guint flags)
+{
+    debug("0x%p",object);
+
+    // 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");
+        } else {
+            repr = SP_OBJECT_REPR(object)->duplicate();
+        }
+    }
+
+    if (((SPObjectClass *) feColorMatrix_parent_class)->write) {
+        ((SPObjectClass *) feColorMatrix_parent_class)->write(object, repr, flags);
+    }
+
+    return repr;
+}
+
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-fecolormatrix.h b/src/sp-fecolormatrix.h
new file mode 100644 (file)
index 0000000..8f3c809
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef SP_FECOLORMATRIX_H_SEEN
+#define SP_FECOLORMATRIX_H_SEEN
+
+/** \file
+ * SVG <feColorMatrix> implementation, see sp-feColorMatrix.cpp.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-filter.h"
+#include "sp-fecolormatrix-fns.h"
+
+/* FeColorMatrix base class */
+class SPFeColorMatrixClass;
+
+struct SPFeColorMatrix : public SPFilter {
+    /** COLORMATRIX ATTRIBUTES HERE */
+    
+};
+
+struct SPFeColorMatrixClass {
+    SPFilterClass parent_class;
+};
+
+GType sp_feColorMatrix_get_type();
+
+
+#endif /* !SP_FECOLORMATRIX_H_SEEN */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-fecomponenttransfer.cpp b/src/sp-fecomponenttransfer.cpp
new file mode 100644 (file)
index 0000000..ffb6f55
--- /dev/null
@@ -0,0 +1,196 @@
+#define __SP_FECOMPONENTTRANSFER_CPP__
+
+/** \file
+ * SVG <feComponentTransfer> implementation.
+ *
+ */
+/*
+ * Authors:
+ *   hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "attributes.h"
+#include "svg/svg.h"
+#include "sp-fecomponentTransfer.h"
+#include "xml/repr.h"
+
+//#define SP_MACROS_SILENT
+//#include "macros.h"
+
+#define DEBUG_FECOMPONENTTRANSFER
+#ifdef DEBUG_FECOMPONENTTRANSFER
+# define debug(f, a...) { g_print("%s(%d) %s:", \
+                                  __FILE__,__LINE__,__FUNCTION__); \
+                          g_print(f, ## a); \
+                          g_print("\n"); \
+                        }
+#else
+# define debug(f, a...) /**/
+#endif
+
+/* FeComponentTransfer base class */
+
+static void sp_feComponentTransfer_class_init(SPFeComponentTransferClass *klass);
+static void sp_feComponentTransfer_init(SPFeComponentTransfer *feComponentTransfer);
+
+static void sp_feComponentTransfer_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_feComponentTransfer_release(SPObject *object);
+static void sp_feComponentTransfer_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_feComponentTransfer_update(SPObject *object, SPCtx *ctx, guint flags);
+static Inkscape::XML::Node *sp_feComponentTransfer_write(SPObject *object, Inkscape::XML::Node *repr, guint flags);
+
+static SPObjectClass *feComponentTransfer_parent_class;
+
+GType
+sp_feComponentTransfer_get_type()
+{
+    static GType feComponentTransfer_type = 0;
+
+    if (!feComponentTransfer_type) {
+        GTypeInfo feComponentTransfer_info = {
+            sizeof(SPFeComponentTransferClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_feComponentTransfer_class_init,
+            NULL, NULL,
+            sizeof(SPFeComponentTransfer),
+            16,
+            (GInstanceInitFunc) sp_feComponentTransfer_init,
+            NULL,    /* value_table */
+        };
+        feComponentTransfer_type = g_type_register_static(SP_TYPE_OBJECT, "SPFeComponentTransfer", &feComponentTransfer_info, (GTypeFlags)0);
+    }
+    return feComponentTransfer_type;
+}
+
+static void
+sp_feComponentTransfer_class_init(SPFeComponentTransferClass *klass)
+{
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+
+    feComponentTransfer_parent_class = (SPObjectClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_feComponentTransfer_build;
+    sp_object_class->release = sp_feComponentTransfer_release;
+    sp_object_class->write = sp_feComponentTransfer_write;
+    sp_object_class->set = sp_feComponentTransfer_set;
+    sp_object_class->update = sp_feComponentTransfer_update;
+}
+
+static void
+sp_feComponentTransfer_init(SPFeComponentTransfer *feComponentTransfer)
+{
+    debug("0x%p",feComponentTransfer);
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPFeComponentTransfer variables.  For this to get called,
+ * our name must be associated with a repr via "sp_object_type_register".  Best done through
+ * sp-object-repr.cpp's repr_name_entries array.
+ */
+static void
+sp_feComponentTransfer_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    debug("0x%p",object);
+    if (((SPObjectClass *) feComponentTransfer_parent_class)->build) {
+        ((SPObjectClass *) feComponentTransfer_parent_class)->build(object, document, repr);
+    }
+
+    /*LOAD ATTRIBUTES FROM REPR HERE*/
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_feComponentTransfer_release(SPObject *object)
+{
+    debug("0x%p",object);
+
+    if (((SPObjectClass *) feComponentTransfer_parent_class)->release)
+        ((SPObjectClass *) feComponentTransfer_parent_class)->release(object);
+}
+
+/**
+ * Sets a specific value in the SPFeComponentTransfer.
+ */
+static void
+sp_feComponentTransfer_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    debug("0x%p %s(%u): '%s'",object,
+            sp_attribute_name(key),key,value);
+    SPFeComponentTransfer *feComponentTransfer = SP_FECOMPONENTTRANSFER(object);
+
+    switch(key) {\r
+       /*DEAL WITH SETTING ATTRIBUTES HERE*/
+        default:
+            if (((SPObjectClass *) feComponentTransfer_parent_class)->set)
+                ((SPObjectClass *) feComponentTransfer_parent_class)->set(object, key, value);
+            break;
+    }
+
+}
+
+/**
+ * Receives update notifications.
+ */
+static void
+sp_feComponentTransfer_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    debug("0x%p",object);
+
+    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
+                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
+
+        /* do something to trigger redisplay, updates? */
+
+    }
+
+    if (((SPObjectClass *) feComponentTransfer_parent_class)->update) {
+        ((SPObjectClass *) feComponentTransfer_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_feComponentTransfer_write(SPObject *object, Inkscape::XML::Node *repr, guint flags)
+{
+    debug("0x%p",object);
+
+    // 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");
+        } else {
+            repr = SP_OBJECT_REPR(object)->duplicate();
+        }
+    }
+
+    if (((SPObjectClass *) feComponentTransfer_parent_class)->write) {
+        ((SPObjectClass *) feComponentTransfer_parent_class)->write(object, repr, flags);
+    }
+
+    return repr;
+}
+
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-fecomponenttransfer.h b/src/sp-fecomponenttransfer.h
new file mode 100644 (file)
index 0000000..0fb400f
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef SP_FECOMPONENTTRANSFER_H_SEEN
+#define SP_FECOMPONENTTRANSFER_H_SEEN
+
+/** \file
+ * SVG <feComponentTransfer> implementation, see sp-feComponentTransfer.cpp.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-filter.h"
+#include "sp-fecomponenttransfer-fns.h"
+
+/* FeComponentTransfer base class */
+class SPFeComponentTransferClass;
+
+struct SPFeComponentTransfer : public SPFilter {
+    /** COMPONENTTRANSFER ATTRIBUTES HERE */
+    
+};
+
+struct SPFeComponentTransferClass {
+    SPFilterClass parent_class;
+};
+
+GType sp_feComponentTransfer_get_type();
+
+
+#endif /* !SP_FECOMPONENTTRANSFER_H_SEEN */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-fecomposite-fns.h b/src/sp-fecomposite-fns.h
new file mode 100644 (file)
index 0000000..c79cb17
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef SP_FECOMPOSITE_FNS_H
+#define SP_FECOMPOSITE_FNS_H
+
+/** \file 
+ * Macros and fn declarations related to gaussian blur filter.
+ */
+
+#include <glib-object.h>
+#include <glib/gtypes.h>
+
+namespace Inkscape {
+namespace XML {
+class Node;
+}
+}
+
+class SPFeComposite;
+
+#define SP_TYPE_FECOMPOSITE (sp_feComposite_get_type())
+#define SP_FECOMPOSITE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FECOMPOSITE, SPFeComposite))
+#define SP_FECOMPOSITE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FECOMPOSITE, SPFeCompositeClass))
+#define SP_IS_FECOMPOSITE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FECOMPOSITE))
+#define SP_IS_FECOMPOSITE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FECOMPOSITE))
+
+GType sp_feComposite_get_type();
+
+#endif /* !SP_FECOMPOSITE_FNS_H */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-fecomposite.cpp b/src/sp-fecomposite.cpp
new file mode 100644 (file)
index 0000000..621ea30
--- /dev/null
@@ -0,0 +1,196 @@
+#define __SP_FECOMPOSITE_CPP__
+
+/** \file
+ * SVG <feComposite> implementation.
+ *
+ */
+/*
+ * Authors:
+ *   hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "attributes.h"
+#include "svg/svg.h"
+#include "sp-fecomposite.h"
+#include "xml/repr.h"
+
+//#define SP_MACROS_SILENT
+//#include "macros.h"
+
+#define DEBUG_FECOMPOSITE
+#ifdef DEBUG_FECOMPOSITE
+# define debug(f, a...) { g_print("%s(%d) %s:", \
+                                  __FILE__,__LINE__,__FUNCTION__); \
+                          g_print(f, ## a); \
+                          g_print("\n"); \
+                        }
+#else
+# define debug(f, a...) /**/
+#endif
+
+/* FeComposite base class */
+
+static void sp_feComposite_class_init(SPFeCompositeClass *klass);
+static void sp_feComposite_init(SPFeComposite *feComposite);
+
+static void sp_feComposite_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+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 SPObjectClass *feComposite_parent_class;
+
+GType
+sp_feComposite_get_type()
+{
+    static GType feComposite_type = 0;
+
+    if (!feComposite_type) {
+        GTypeInfo feComposite_info = {
+            sizeof(SPFeCompositeClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_feComposite_class_init,
+            NULL, NULL,
+            sizeof(SPFeComposite),
+            16,
+            (GInstanceInitFunc) sp_feComposite_init,
+            NULL,    /* value_table */
+        };
+        feComposite_type = g_type_register_static(SP_TYPE_OBJECT, "SPFeComposite", &feComposite_info, (GTypeFlags)0);
+    }
+    return feComposite_type;
+}
+
+static void
+sp_feComposite_class_init(SPFeCompositeClass *klass)
+{
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+
+    feComposite_parent_class = (SPObjectClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_feComposite_build;
+    sp_object_class->release = sp_feComposite_release;
+    sp_object_class->write = sp_feComposite_write;
+    sp_object_class->set = sp_feComposite_set;
+    sp_object_class->update = sp_feComposite_update;
+}
+
+static void
+sp_feComposite_init(SPFeComposite *feComposite)
+{
+    debug("0x%p",feComposite);
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPFeComposite variables.  For this to get called,
+ * our name must be associated with a repr via "sp_object_type_register".  Best done through
+ * sp-object-repr.cpp's repr_name_entries array.
+ */
+static void
+sp_feComposite_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    debug("0x%p",object);
+    if (((SPObjectClass *) feComposite_parent_class)->build) {
+        ((SPObjectClass *) feComposite_parent_class)->build(object, document, repr);
+    }
+
+    /*LOAD ATTRIBUTES FROM REPR HERE*/
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_feComposite_release(SPObject *object)
+{
+    debug("0x%p",object);
+
+    if (((SPObjectClass *) feComposite_parent_class)->release)
+        ((SPObjectClass *) feComposite_parent_class)->release(object);
+}
+
+/**
+ * Sets a specific value in the SPFeComposite.
+ */
+static void
+sp_feComposite_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    debug("0x%p %s(%u): '%s'",object,
+            sp_attribute_name(key),key,value);
+    SPFeComposite *feComposite = SP_FECOMPOSITE(object);
+
+    switch(key) {\r
+       /*DEAL WITH SETTING ATTRIBUTES HERE*/
+        default:
+            if (((SPObjectClass *) feComposite_parent_class)->set)
+                ((SPObjectClass *) feComposite_parent_class)->set(object, key, value);
+            break;
+    }
+
+}
+
+/**
+ * Receives update notifications.
+ */
+static void
+sp_feComposite_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    debug("0x%p",object);
+
+    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
+                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
+
+        /* do something to trigger redisplay, updates? */
+
+    }
+
+    if (((SPObjectClass *) feComposite_parent_class)->update) {
+        ((SPObjectClass *) feComposite_parent_class)->update(object, ctx, 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)
+{
+    debug("0x%p",object);
+
+    // 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");
+        } else {
+            repr = SP_OBJECT_REPR(object)->duplicate();
+        }
+    }
+
+    if (((SPObjectClass *) feComposite_parent_class)->write) {
+        ((SPObjectClass *) feComposite_parent_class)->write(object, repr, flags);
+    }
+
+    return repr;
+}
+
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-fecomposite.h b/src/sp-fecomposite.h
new file mode 100644 (file)
index 0000000..4683258
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef SP_FECOMPOSITE_H_SEEN
+#define SP_FECOMPOSITE_H_SEEN
+
+/** \file
+ * SVG <feComposite> implementation, see sp-feComposite.cpp.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-filter.h"
+#include "sp-fecomposite-fns.h"
+
+/* FeComposite base class */
+class SPFeCompositeClass;
+
+struct SPFeComposite : public SPFilter {
+    /** COMPOSITE ATTRIBUTES HERE */
+    
+};
+
+struct SPFeCompositeClass {
+    SPFilterClass parent_class;
+};
+
+GType sp_feComposite_get_type();
+
+
+#endif /* !SP_FECOMPOSITE_H_SEEN */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-feconvolvematrix-fns.h b/src/sp-feconvolvematrix-fns.h
new file mode 100644 (file)
index 0000000..76baf7f
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef SP_FECONVOLVEMATRIX_FNS_H
+#define SP_FECONVOLVEMATRIX_FNS_H
+
+/** \file 
+ * Macros and fn declarations related to gaussian blur filter.
+ */
+
+#include <glib-object.h>
+#include <glib/gtypes.h>
+
+namespace Inkscape {
+namespace XML {
+class Node;
+}
+}
+
+class SPFeConvolveMatrix;
+
+#define SP_TYPE_FECONVOLVEMATRIX (sp_feConvolveMatrix_get_type())
+#define SP_FECONVOLVEMATRIX(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FECONVOLVEMATRIX, SPFeConvolveMatrix))
+#define SP_FECONVOLVEMATRIX_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FECONVOLVEMATRIX, SPFeConvolveMatrixClass))
+#define SP_IS_FECONVOLVEMATRIX(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FECONVOLVEMATRIX))
+#define SP_IS_FECONVOLVEMATRIX_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FECONVOLVEMATRIX))
+
+GType sp_feConvolveMatrix_get_type();
+
+#endif /* !SP_FECONVOLVEMATRIX_FNS_H */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-feconvolvematrix.cpp b/src/sp-feconvolvematrix.cpp
new file mode 100644 (file)
index 0000000..0db0367
--- /dev/null
@@ -0,0 +1,196 @@
+#define __SP_FECONVOLVEMATRIX_CPP__
+
+/** \file
+ * SVG <feConvolveMatrix> implementation.
+ *
+ */
+/*
+ * Authors:
+ *   hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "attributes.h"
+#include "svg/svg.h"
+#include "sp-feconvolvematrix.h"
+#include "xml/repr.h"
+
+//#define SP_MACROS_SILENT
+//#include "macros.h"
+
+#define DEBUG_FECONVOLVEMATRIX
+#ifdef DEBUG_FECONVOLVEMATRIX
+# define debug(f, a...) { g_print("%s(%d) %s:", \
+                                  __FILE__,__LINE__,__FUNCTION__); \
+                          g_print(f, ## a); \
+                          g_print("\n"); \
+                        }
+#else
+# define debug(f, a...) /**/
+#endif
+
+/* FeConvolveMatrix base class */
+
+static void sp_feConvolveMatrix_class_init(SPFeConvolveMatrixClass *klass);
+static void sp_feConvolveMatrix_init(SPFeConvolveMatrix *feConvolveMatrix);
+
+static void sp_feConvolveMatrix_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_feConvolveMatrix_release(SPObject *object);
+static void sp_feConvolveMatrix_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_feConvolveMatrix_update(SPObject *object, SPCtx *ctx, guint flags);
+static Inkscape::XML::Node *sp_feConvolveMatrix_write(SPObject *object, Inkscape::XML::Node *repr, guint flags);
+
+static SPObjectClass *feConvolveMatrix_parent_class;
+
+GType
+sp_feConvolveMatrix_get_type()
+{
+    static GType feConvolveMatrix_type = 0;
+
+    if (!feConvolveMatrix_type) {
+        GTypeInfo feConvolveMatrix_info = {
+            sizeof(SPFeConvolveMatrixClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_feConvolveMatrix_class_init,
+            NULL, NULL,
+            sizeof(SPFeConvolveMatrix),
+            16,
+            (GInstanceInitFunc) sp_feConvolveMatrix_init,
+            NULL,    /* value_table */
+        };
+        feConvolveMatrix_type = g_type_register_static(SP_TYPE_OBJECT, "SPFeConvolveMatrix", &feConvolveMatrix_info, (GTypeFlags)0);
+    }
+    return feConvolveMatrix_type;
+}
+
+static void
+sp_feConvolveMatrix_class_init(SPFeConvolveMatrixClass *klass)
+{
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+
+    feConvolveMatrix_parent_class = (SPObjectClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_feConvolveMatrix_build;
+    sp_object_class->release = sp_feConvolveMatrix_release;
+    sp_object_class->write = sp_feConvolveMatrix_write;
+    sp_object_class->set = sp_feConvolveMatrix_set;
+    sp_object_class->update = sp_feConvolveMatrix_update;
+}
+
+static void
+sp_feConvolveMatrix_init(SPFeConvolveMatrix *feConvolveMatrix)
+{
+    debug("0x%p",feConvolveMatrix);
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPFeConvolveMatrix variables.  For this to get called,
+ * our name must be associated with a repr via "sp_object_type_register".  Best done through
+ * sp-object-repr.cpp's repr_name_entries array.
+ */
+static void
+sp_feConvolveMatrix_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    debug("0x%p",object);
+    if (((SPObjectClass *) feConvolveMatrix_parent_class)->build) {
+        ((SPObjectClass *) feConvolveMatrix_parent_class)->build(object, document, repr);
+    }
+
+    /*LOAD ATTRIBUTES FROM REPR HERE*/
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_feConvolveMatrix_release(SPObject *object)
+{
+    debug("0x%p",object);
+
+    if (((SPObjectClass *) feConvolveMatrix_parent_class)->release)
+        ((SPObjectClass *) feConvolveMatrix_parent_class)->release(object);
+}
+
+/**
+ * Sets a specific value in the SPFeConvolveMatrix.
+ */
+static void
+sp_feConvolveMatrix_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    debug("0x%p %s(%u): '%s'",object,
+            sp_attribute_name(key),key,value);
+    SPFeConvolveMatrix *feConvolveMatrix = SP_FECONVOLVEMATRIX(object);
+
+    switch(key) {\r
+       /*DEAL WITH SETTING ATTRIBUTES HERE*/
+        default:
+            if (((SPObjectClass *) feConvolveMatrix_parent_class)->set)
+                ((SPObjectClass *) feConvolveMatrix_parent_class)->set(object, key, value);
+            break;
+    }
+
+}
+
+/**
+ * Receives update notifications.
+ */
+static void
+sp_feConvolveMatrix_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    debug("0x%p",object);
+
+    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
+                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
+
+        /* do something to trigger redisplay, updates? */
+
+    }
+
+    if (((SPObjectClass *) feConvolveMatrix_parent_class)->update) {
+        ((SPObjectClass *) feConvolveMatrix_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_feConvolveMatrix_write(SPObject *object, Inkscape::XML::Node *repr, guint flags)
+{
+    debug("0x%p",object);
+
+    // 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");
+        } else {
+            repr = SP_OBJECT_REPR(object)->duplicate();
+        }
+    }
+
+    if (((SPObjectClass *) feConvolveMatrix_parent_class)->write) {
+        ((SPObjectClass *) feConvolveMatrix_parent_class)->write(object, repr, flags);
+    }
+
+    return repr;
+}
+
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-feconvolvematrix.h b/src/sp-feconvolvematrix.h
new file mode 100644 (file)
index 0000000..911f5d7
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef SP_FECONVOLVEMATRIX_H_SEEN
+#define SP_FECONVOLVEMATRIX_H_SEEN
+
+/** \file
+ * SVG <feConvolveMatrix> implementation, see sp-feConvolveMatrix.cpp.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-filter.h"
+#include "sp-feconvolvematrix-fns.h"
+
+/* FeConvolveMatrix base class */
+class SPFeConvolveMatrixClass;
+
+struct SPFeConvolveMatrix : public SPFilter {
+    /** CONVOLVEMATRIX ATTRIBUTES HERE */
+    
+};
+
+struct SPFeConvolveMatrixClass {
+    SPFilterClass parent_class;
+};
+
+GType sp_feConvolveMatrix_get_type();
+
+
+#endif /* !SP_FECONVOLVEMATRIX_H_SEEN */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-fediffuselighting-fns.h b/src/sp-fediffuselighting-fns.h
new file mode 100644 (file)
index 0000000..b91ed80
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef SP_FEDIFFUSELIGHTING_FNS_H
+#define SP_FEDIFFUSELIGHTING_FNS_H
+
+/** \file 
+ * Macros and fn declarations related to gaussian blur filter.
+ */
+
+#include <glib-object.h>
+#include <glib/gtypes.h>
+
+namespace Inkscape {
+namespace XML {
+class Node;
+}
+}
+
+class SPFeDiffuseLighting;
+
+#define SP_TYPE_FEDIFFUSELIGHTING (sp_feDiffuseLighting_get_type())
+#define SP_FEDIFFUSELIGHTING(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEDIFFUSELIGHTING, SPFeDiffuseLighting))
+#define SP_FEDIFFUSELIGHTING_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEDIFFUSELIGHTING, SPFeDiffuseLightingClass))
+#define SP_IS_FEDIFFUSELIGHTING(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEDIFFUSELIGHTING))
+#define SP_IS_FEDIFFUSELIGHTING_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEDIFFUSELIGHTING))
+
+GType sp_feDiffuseLighting_get_type();
+
+#endif /* !SP_FEDIFFUSELIGHTING_FNS_H */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-fediffuselighting.cpp b/src/sp-fediffuselighting.cpp
new file mode 100644 (file)
index 0000000..5683b33
--- /dev/null
@@ -0,0 +1,196 @@
+#define __SP_FEDIFFUSELIGHTING_CPP__
+
+/** \file
+ * SVG <feDiffuseLighting> implementation.
+ *
+ */
+/*
+ * Authors:
+ *   hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "attributes.h"
+#include "svg/svg.h"
+#include "sp-fediffuselighting.h"
+#include "xml/repr.h"
+
+//#define SP_MACROS_SILENT
+//#include "macros.h"
+
+#define DEBUG_FEDIFFUSELIGHTING
+#ifdef DEBUG_FEDIFFUSELIGHTING
+# define debug(f, a...) { g_print("%s(%d) %s:", \
+                                  __FILE__,__LINE__,__FUNCTION__); \
+                          g_print(f, ## a); \
+                          g_print("\n"); \
+                        }
+#else
+# define debug(f, a...) /**/
+#endif
+
+/* FeDiffuseLighting base class */
+
+static void sp_feDiffuseLighting_class_init(SPFeDiffuseLightingClass *klass);
+static void sp_feDiffuseLighting_init(SPFeDiffuseLighting *feDiffuseLighting);
+
+static void sp_feDiffuseLighting_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_feDiffuseLighting_release(SPObject *object);
+static void sp_feDiffuseLighting_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_feDiffuseLighting_update(SPObject *object, SPCtx *ctx, guint flags);
+static Inkscape::XML::Node *sp_feDiffuseLighting_write(SPObject *object, Inkscape::XML::Node *repr, guint flags);
+
+static SPObjectClass *feDiffuseLighting_parent_class;
+
+GType
+sp_feDiffuseLighting_get_type()
+{
+    static GType feDiffuseLighting_type = 0;
+
+    if (!feDiffuseLighting_type) {
+        GTypeInfo feDiffuseLighting_info = {
+            sizeof(SPFeDiffuseLightingClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_feDiffuseLighting_class_init,
+            NULL, NULL,
+            sizeof(SPFeDiffuseLighting),
+            16,
+            (GInstanceInitFunc) sp_feDiffuseLighting_init,
+            NULL,    /* value_table */
+        };
+        feDiffuseLighting_type = g_type_register_static(SP_TYPE_OBJECT, "SPFeDiffuseLighting", &feDiffuseLighting_info, (GTypeFlags)0);
+    }
+    return feDiffuseLighting_type;
+}
+
+static void
+sp_feDiffuseLighting_class_init(SPFeDiffuseLightingClass *klass)
+{
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+
+    feDiffuseLighting_parent_class = (SPObjectClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_feDiffuseLighting_build;
+    sp_object_class->release = sp_feDiffuseLighting_release;
+    sp_object_class->write = sp_feDiffuseLighting_write;
+    sp_object_class->set = sp_feDiffuseLighting_set;
+    sp_object_class->update = sp_feDiffuseLighting_update;
+}
+
+static void
+sp_feDiffuseLighting_init(SPFeDiffuseLighting *feDiffuseLighting)
+{
+    debug("0x%p",feDiffuseLighting);
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPFeDiffuseLighting variables.  For this to get called,
+ * our name must be associated with a repr via "sp_object_type_register".  Best done through
+ * sp-object-repr.cpp's repr_name_entries array.
+ */
+static void
+sp_feDiffuseLighting_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    debug("0x%p",object);
+    if (((SPObjectClass *) feDiffuseLighting_parent_class)->build) {
+        ((SPObjectClass *) feDiffuseLighting_parent_class)->build(object, document, repr);
+    }
+
+    /*LOAD ATTRIBUTES FROM REPR HERE*/
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_feDiffuseLighting_release(SPObject *object)
+{
+    debug("0x%p",object);
+
+    if (((SPObjectClass *) feDiffuseLighting_parent_class)->release)
+        ((SPObjectClass *) feDiffuseLighting_parent_class)->release(object);
+}
+
+/**
+ * Sets a specific value in the SPFeDiffuseLighting.
+ */
+static void
+sp_feDiffuseLighting_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    debug("0x%p %s(%u): '%s'",object,
+            sp_attribute_name(key),key,value);
+    SPFeDiffuseLighting *feDiffuseLighting = SP_FEDIFFUSELIGHTING(object);
+
+    switch(key) {\r
+       /*DEAL WITH SETTING ATTRIBUTES HERE*/
+        default:
+            if (((SPObjectClass *) feDiffuseLighting_parent_class)->set)
+                ((SPObjectClass *) feDiffuseLighting_parent_class)->set(object, key, value);
+            break;
+    }
+
+}
+
+/**
+ * Receives update notifications.
+ */
+static void
+sp_feDiffuseLighting_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    debug("0x%p",object);
+
+    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
+                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
+
+        /* do something to trigger redisplay, updates? */
+
+    }
+
+    if (((SPObjectClass *) feDiffuseLighting_parent_class)->update) {
+        ((SPObjectClass *) feDiffuseLighting_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_feDiffuseLighting_write(SPObject *object, Inkscape::XML::Node *repr, guint flags)
+{
+    debug("0x%p",object);
+
+    // 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");
+        } else {
+            repr = SP_OBJECT_REPR(object)->duplicate();
+        }
+    }
+
+    if (((SPObjectClass *) feDiffuseLighting_parent_class)->write) {
+        ((SPObjectClass *) feDiffuseLighting_parent_class)->write(object, repr, flags);
+    }
+
+    return repr;
+}
+
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-fediffuselighting.h b/src/sp-fediffuselighting.h
new file mode 100644 (file)
index 0000000..598f380
--- /dev/null
@@ -0,0 +1,83 @@
+#ifndef SP_FEDIFFUSELIGHTING_FNS_H
+#define SP_FEDIFFUSELIGHTING_FNS_H
+
+/** \file 
+ * Macros and fn declarations related to gaussian blur filter.
+ */
+
+#include <glib-object.h>
+#include <glib/gtypes.h>
+
+namespace Inkscape {
+namespace XML {
+class Node;
+}
+}
+
+class SPFeDiffuseLighting;
+
+#define SP_TYPE_FEDIFFUSELIGHTING (sp_feDiffuseLighting_get_type())
+#define SP_FEDIFFUSELIGHTING(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEDIFFUSELIGHTING, SPFeDiffuseLighting))
+#define SP_FEDIFFUSELIGHTING_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEDIFFUSELIGHTING, SPFeDiffuseLightingClass))
+#define SP_IS_FEDIFFUSELIGHTING(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEDIFFUSELIGHTING))
+#define SP_IS_FEDIFFUSELIGHTING_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEDIFFUSELIGHTING))
+
+GType sp_feDiffuseLighting_get_type();
+
+#endif /* !SP_FEDIFFUSELIGHTING_FNS_H */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
+#ifndef SP_FEDIFFUSELIGHTING_H_SEEN
+#define SP_FEDIFFUSELIGHTING_H_SEEN
+
+/** \file
+ * SVG <feDiffuseLighting> implementation, see sp-feDiffuseLighting.cpp.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-filter.h"
+#include "sp-fediffuselighting-fns.h"
+
+/* FeDiffuseLighting base class */
+class SPFeDiffuseLightingClass;
+
+struct SPFeDiffuseLighting : public SPFilter {
+    /** DIFFUSELIGHTING ATTRIBUTES HERE */
+    
+};
+
+struct SPFeDiffuseLightingClass {
+    SPFilterClass parent_class;
+};
+
+GType sp_feDiffuseLighting_get_type();
+
+
+#endif /* !SP_FEDIFFUSELIGHTING_H_SEEN */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-fedisplacementmap-fns.h b/src/sp-fedisplacementmap-fns.h
new file mode 100644 (file)
index 0000000..6d92c6b
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef SP_FEDISPLACEMENTMAP_FNS_H
+#define SP_FEDISPLACEMENTMAP_FNS_H
+
+/** \file 
+ * Macros and fn declarations related to gaussian blur filter.
+ */
+
+#include <glib-object.h>
+#include <glib/gtypes.h>
+
+namespace Inkscape {
+namespace XML {
+class Node;
+}
+}
+
+class SPFeDisplacementMap;
+
+#define SP_TYPE_FEDISPLACEMENTMAP (sp_feDisplacementMap_get_type())
+#define SP_FEDISPLACEMENTMAP(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEDISPLACEMENTMAP, SPFeDisplacementMap))
+#define SP_FEDISPLACEMENTMAP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEDISPLACEMENTMAP, SPFeDisplacementMapClass))
+#define SP_IS_FEDISPLACEMENTMAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEDISPLACEMENTMAP))
+#define SP_IS_FEDISPLACEMENTMAP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEDISPLACEMENTMAP))
+
+GType sp_feDisplacementMap_get_type();
+
+#endif /* !SP_FEDISPLACEMENTMAP_FNS_H */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-fedisplacementmap.cpp b/src/sp-fedisplacementmap.cpp
new file mode 100644 (file)
index 0000000..43eb820
--- /dev/null
@@ -0,0 +1,196 @@
+#define __SP_FEDISPLACEMENTMAP_CPP__
+
+/** \file
+ * SVG <feDisplacementMap> implementation.
+ *
+ */
+/*
+ * Authors:
+ *   hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "attributes.h"
+#include "svg/svg.h"
+#include "sp-fedisplacementmap.h"
+#include "xml/repr.h"
+
+//#define SP_MACROS_SILENT
+//#include "macros.h"
+
+#define DEBUG_FEDISPLACEMENTMAP
+#ifdef DEBUG_FEDISPLACEMENTMAP
+# define debug(f, a...) { g_print("%s(%d) %s:", \
+                                  __FILE__,__LINE__,__FUNCTION__); \
+                          g_print(f, ## a); \
+                          g_print("\n"); \
+                        }
+#else
+# define debug(f, a...) /**/
+#endif
+
+/* FeDisplacementMap base class */
+
+static void sp_feDisplacementMap_class_init(SPFeDisplacementMapClass *klass);
+static void sp_feDisplacementMap_init(SPFeDisplacementMap *feDisplacementMap);
+
+static void sp_feDisplacementMap_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_feDisplacementMap_release(SPObject *object);
+static void sp_feDisplacementMap_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_feDisplacementMap_update(SPObject *object, SPCtx *ctx, guint flags);
+static Inkscape::XML::Node *sp_feDisplacementMap_write(SPObject *object, Inkscape::XML::Node *repr, guint flags);
+
+static SPObjectClass *feDisplacementMap_parent_class;
+
+GType
+sp_feDisplacementMap_get_type()
+{
+    static GType feDisplacementMap_type = 0;
+
+    if (!feDisplacementMap_type) {
+        GTypeInfo feDisplacementMap_info = {
+            sizeof(SPFeDisplacementMapClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_feDisplacementMap_class_init,
+            NULL, NULL,
+            sizeof(SPFeDisplacementMap),
+            16,
+            (GInstanceInitFunc) sp_feDisplacementMap_init,
+            NULL,    /* value_table */
+        };
+        feDisplacementMap_type = g_type_register_static(SP_TYPE_OBJECT, "SPFeDisplacementMap", &feDisplacementMap_info, (GTypeFlags)0);
+    }
+    return feDisplacementMap_type;
+}
+
+static void
+sp_feDisplacementMap_class_init(SPFeDisplacementMapClass *klass)
+{
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+
+    feDisplacementMap_parent_class = (SPObjectClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_feDisplacementMap_build;
+    sp_object_class->release = sp_feDisplacementMap_release;
+    sp_object_class->write = sp_feDisplacementMap_write;
+    sp_object_class->set = sp_feDisplacementMap_set;
+    sp_object_class->update = sp_feDisplacementMap_update;
+}
+
+static void
+sp_feDisplacementMap_init(SPFeDisplacementMap *feDisplacementMap)
+{
+    debug("0x%p",feDisplacementMap);
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPFeDisplacementMap variables.  For this to get called,
+ * our name must be associated with a repr via "sp_object_type_register".  Best done through
+ * sp-object-repr.cpp's repr_name_entries array.
+ */
+static void
+sp_feDisplacementMap_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    debug("0x%p",object);
+    if (((SPObjectClass *) feDisplacementMap_parent_class)->build) {
+        ((SPObjectClass *) feDisplacementMap_parent_class)->build(object, document, repr);
+    }
+
+    /*LOAD ATTRIBUTES FROM REPR HERE*/
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_feDisplacementMap_release(SPObject *object)
+{
+    debug("0x%p",object);
+
+    if (((SPObjectClass *) feDisplacementMap_parent_class)->release)
+        ((SPObjectClass *) feDisplacementMap_parent_class)->release(object);
+}
+
+/**
+ * Sets a specific value in the SPFeDisplacementMap.
+ */
+static void
+sp_feDisplacementMap_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    debug("0x%p %s(%u): '%s'",object,
+            sp_attribute_name(key),key,value);
+    SPFeDisplacementMap *feDisplacementMap = SP_FEDISPLACEMENTMAP(object);
+
+    switch(key) {\r
+       /*DEAL WITH SETTING ATTRIBUTES HERE*/
+        default:
+            if (((SPObjectClass *) feDisplacementMap_parent_class)->set)
+                ((SPObjectClass *) feDisplacementMap_parent_class)->set(object, key, value);
+            break;
+    }
+
+}
+
+/**
+ * Receives update notifications.
+ */
+static void
+sp_feDisplacementMap_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    debug("0x%p",object);
+
+    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
+                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
+
+        /* do something to trigger redisplay, updates? */
+
+    }
+
+    if (((SPObjectClass *) feDisplacementMap_parent_class)->update) {
+        ((SPObjectClass *) feDisplacementMap_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_feDisplacementMap_write(SPObject *object, Inkscape::XML::Node *repr, guint flags)
+{
+    debug("0x%p",object);
+
+    // 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");
+        } else {
+            repr = SP_OBJECT_REPR(object)->duplicate();
+        }
+    }
+
+    if (((SPObjectClass *) feDisplacementMap_parent_class)->write) {
+        ((SPObjectClass *) feDisplacementMap_parent_class)->write(object, repr, flags);
+    }
+
+    return repr;
+}
+
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-fedisplacementmap.h b/src/sp-fedisplacementmap.h
new file mode 100644 (file)
index 0000000..6800d44
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef SP_FEDISPLACEMENTMAP_H_SEEN
+#define SP_FEDISPLACEMENTMAP_H_SEEN
+
+/** \file
+ * SVG <feDisplacementMap> implementation, see sp-feDisplacementMap.cpp.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-filter.h"
+#include "sp-fedisplacementmap-fns.h"
+
+/* FeDisplacementMap base class */
+class SPFeDisplacementMapClass;
+
+struct SPFeDisplacementMap : public SPFilter {
+    /** DISPLACEMENTMAP ATTRIBUTES HERE */
+    
+};
+
+struct SPFeDisplacementMapClass {
+    SPFilterClass parent_class;
+};
+
+GType sp_feDisplacementMap_get_type();
+
+
+#endif /* !SP_FEDISPLACEMENTMAP_H_SEEN */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-feflood-fns.h b/src/sp-feflood-fns.h
new file mode 100644 (file)
index 0000000..8cc5072
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef SP_FEFLOOD_FNS_H
+#define SP_FEFLOOD_FNS_H
+
+/** \file 
+ * Macros and fn declarations related to gaussian blur filter.
+ */
+
+#include <glib-object.h>
+#include <glib/gtypes.h>
+
+namespace Inkscape {
+namespace XML {
+class Node;
+}
+}
+
+class SPFeFlood;
+
+#define SP_TYPE_FEFLOOD (sp_feFlood_get_type())
+#define SP_FEFLOOD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEFLOOD, SPFeFlood))
+#define SP_FEFLOOD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEFLOOD, SPFeFloodClass))
+#define SP_IS_FEFLOOD(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEFLOOD))
+#define SP_IS_FEFLOOD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEFLOOD))
+
+GType sp_feFlood_get_type();
+
+#endif /* !SP_FEFLOOD_FNS_H */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-feflood.cpp b/src/sp-feflood.cpp
new file mode 100644 (file)
index 0000000..e10c871
--- /dev/null
@@ -0,0 +1,196 @@
+#define __SP_FEFLOOD_CPP__
+
+/** \file
+ * SVG <feFlood> implementation.
+ *
+ */
+/*
+ * Authors:
+ *   hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "attributes.h"
+#include "svg/svg.h"
+#include "sp-feflood.h"
+#include "xml/repr.h"
+
+//#define SP_MACROS_SILENT
+//#include "macros.h"
+
+#define DEBUG_FEFLOOD
+#ifdef DEBUG_FEFLOOD
+# define debug(f, a...) { g_print("%s(%d) %s:", \
+                                  __FILE__,__LINE__,__FUNCTION__); \
+                          g_print(f, ## a); \
+                          g_print("\n"); \
+                        }
+#else
+# define debug(f, a...) /**/
+#endif
+
+/* FeFlood base class */
+
+static void sp_feFlood_class_init(SPFeFloodClass *klass);
+static void sp_feFlood_init(SPFeFlood *feFlood);
+
+static void sp_feFlood_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_feFlood_release(SPObject *object);
+static void sp_feFlood_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_feFlood_update(SPObject *object, SPCtx *ctx, guint flags);
+static Inkscape::XML::Node *sp_feFlood_write(SPObject *object, Inkscape::XML::Node *repr, guint flags);
+
+static SPObjectClass *feFlood_parent_class;
+
+GType
+sp_feFlood_get_type()
+{
+    static GType feFlood_type = 0;
+
+    if (!feFlood_type) {
+        GTypeInfo feFlood_info = {
+            sizeof(SPFeFloodClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_feFlood_class_init,
+            NULL, NULL,
+            sizeof(SPFeFlood),
+            16,
+            (GInstanceInitFunc) sp_feFlood_init,
+            NULL,    /* value_table */
+        };
+        feFlood_type = g_type_register_static(SP_TYPE_OBJECT, "SPFeFlood", &feFlood_info, (GTypeFlags)0);
+    }
+    return feFlood_type;
+}
+
+static void
+sp_feFlood_class_init(SPFeFloodClass *klass)
+{
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+
+    feFlood_parent_class = (SPObjectClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_feFlood_build;
+    sp_object_class->release = sp_feFlood_release;
+    sp_object_class->write = sp_feFlood_write;
+    sp_object_class->set = sp_feFlood_set;
+    sp_object_class->update = sp_feFlood_update;
+}
+
+static void
+sp_feFlood_init(SPFeFlood *feFlood)
+{
+    debug("0x%p",feFlood);
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPFeFlood variables.  For this to get called,
+ * our name must be associated with a repr via "sp_object_type_register".  Best done through
+ * sp-object-repr.cpp's repr_name_entries array.
+ */
+static void
+sp_feFlood_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    debug("0x%p",object);
+    if (((SPObjectClass *) feFlood_parent_class)->build) {
+        ((SPObjectClass *) feFlood_parent_class)->build(object, document, repr);
+    }
+
+    /*LOAD ATTRIBUTES FROM REPR HERE*/
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_feFlood_release(SPObject *object)
+{
+    debug("0x%p",object);
+
+    if (((SPObjectClass *) feFlood_parent_class)->release)
+        ((SPObjectClass *) feFlood_parent_class)->release(object);
+}
+
+/**
+ * Sets a specific value in the SPFeFlood.
+ */
+static void
+sp_feFlood_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    debug("0x%p %s(%u): '%s'",object,
+            sp_attribute_name(key),key,value);
+    SPFeFlood *feFlood = SP_FEFLOOD(object);
+
+    switch(key) {\r
+       /*DEAL WITH SETTING ATTRIBUTES HERE*/
+        default:
+            if (((SPObjectClass *) feFlood_parent_class)->set)
+                ((SPObjectClass *) feFlood_parent_class)->set(object, key, value);
+            break;
+    }
+
+}
+
+/**
+ * Receives update notifications.
+ */
+static void
+sp_feFlood_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    debug("0x%p",object);
+
+    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
+                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
+
+        /* do something to trigger redisplay, updates? */
+
+    }
+
+    if (((SPObjectClass *) feFlood_parent_class)->update) {
+        ((SPObjectClass *) feFlood_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_feFlood_write(SPObject *object, Inkscape::XML::Node *repr, guint flags)
+{
+    debug("0x%p",object);
+
+    // 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");
+        } else {
+            repr = SP_OBJECT_REPR(object)->duplicate();
+        }
+    }
+
+    if (((SPObjectClass *) feFlood_parent_class)->write) {
+        ((SPObjectClass *) feFlood_parent_class)->write(object, repr, flags);
+    }
+
+    return repr;
+}
+
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-feflood.h b/src/sp-feflood.h
new file mode 100644 (file)
index 0000000..4fc5da3
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef SP_FEFLOOD_H_SEEN
+#define SP_FEFLOOD_H_SEEN
+
+/** \file
+ * SVG <feFlood> implementation, see sp-feFlood.cpp.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-filter.h"
+#include "sp-feflood-fns.h"
+
+/* FeFlood base class */
+class SPFeFloodClass;
+
+struct SPFeFlood : public SPFilter {
+    /** FLOOD ATTRIBUTES HERE */
+    
+};
+
+struct SPFeFloodClass {
+    SPFilterClass parent_class;
+};
+
+GType sp_feFlood_get_type();
+
+
+#endif /* !SP_FEFLOOD_H_SEEN */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-feimage-fns.h b/src/sp-feimage-fns.h
new file mode 100644 (file)
index 0000000..0a8b453
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef SP_FEIMAGE_FNS_H
+#define SP_FEIMAGE_FNS_H
+
+/** \file 
+ * Macros and fn declarations related to gaussian blur filter.
+ */
+
+#include <glib-object.h>
+#include <glib/gtypes.h>
+
+namespace Inkscape {
+namespace XML {
+class Node;
+}
+}
+
+class SPFeImage;
+
+#define SP_TYPE_FEIMAGE (sp_feImage_get_type())
+#define SP_FEIMAGE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEIMAGE, SPFeImage))
+#define SP_FEIMAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEIMAGE, SPFeImageClass))
+#define SP_IS_FEIMAGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEIMAGE))
+#define SP_IS_FEIMAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEIMAGE))
+
+GType sp_feImage_get_type();
+
+#endif /* !SP_FEIMAGE_FNS_H */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-feimage.cpp b/src/sp-feimage.cpp
new file mode 100644 (file)
index 0000000..08bb1f3
--- /dev/null
@@ -0,0 +1,196 @@
+#define __SP_FEIMAGE_CPP__
+
+/** \file
+ * SVG <feImage> implementation.
+ *
+ */
+/*
+ * Authors:
+ *   hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "attributes.h"
+#include "svg/svg.h"
+#include "sp-feimage.h"
+#include "xml/repr.h"
+
+//#define SP_MACROS_SILENT
+//#include "macros.h"
+
+#define DEBUG_FEIMAGE
+#ifdef DEBUG_FEIMAGE
+# define debug(f, a...) { g_print("%s(%d) %s:", \
+                                  __FILE__,__LINE__,__FUNCTION__); \
+                          g_print(f, ## a); \
+                          g_print("\n"); \
+                        }
+#else
+# define debug(f, a...) /**/
+#endif
+
+/* FeImage base class */
+
+static void sp_feImage_class_init(SPFeImageClass *klass);
+static void sp_feImage_init(SPFeImage *feImage);
+
+static void sp_feImage_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_feImage_release(SPObject *object);
+static void sp_feImage_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_feImage_update(SPObject *object, SPCtx *ctx, guint flags);
+static Inkscape::XML::Node *sp_feImage_write(SPObject *object, Inkscape::XML::Node *repr, guint flags);
+
+static SPObjectClass *feImage_parent_class;
+
+GType
+sp_feImage_get_type()
+{
+    static GType feImage_type = 0;
+
+    if (!feImage_type) {
+        GTypeInfo feImage_info = {
+            sizeof(SPFeImageClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_feImage_class_init,
+            NULL, NULL,
+            sizeof(SPFeImage),
+            16,
+            (GInstanceInitFunc) sp_feImage_init,
+            NULL,    /* value_table */
+        };
+        feImage_type = g_type_register_static(SP_TYPE_OBJECT, "SPFeImage", &feImage_info, (GTypeFlags)0);
+    }
+    return feImage_type;
+}
+
+static void
+sp_feImage_class_init(SPFeImageClass *klass)
+{
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+
+    feImage_parent_class = (SPObjectClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_feImage_build;
+    sp_object_class->release = sp_feImage_release;
+    sp_object_class->write = sp_feImage_write;
+    sp_object_class->set = sp_feImage_set;
+    sp_object_class->update = sp_feImage_update;
+}
+
+static void
+sp_feImage_init(SPFeImage *feImage)
+{
+    debug("0x%p",feImage);
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPFeImage variables.  For this to get called,
+ * our name must be associated with a repr via "sp_object_type_register".  Best done through
+ * sp-object-repr.cpp's repr_name_entries array.
+ */
+static void
+sp_feImage_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    debug("0x%p",object);
+    if (((SPObjectClass *) feImage_parent_class)->build) {
+        ((SPObjectClass *) feImage_parent_class)->build(object, document, repr);
+    }
+
+    /*LOAD ATTRIBUTES FROM REPR HERE*/
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_feImage_release(SPObject *object)
+{
+    debug("0x%p",object);
+
+    if (((SPObjectClass *) feImage_parent_class)->release)
+        ((SPObjectClass *) feImage_parent_class)->release(object);
+}
+
+/**
+ * Sets a specific value in the SPFeImage.
+ */
+static void
+sp_feImage_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    debug("0x%p %s(%u): '%s'",object,
+            sp_attribute_name(key),key,value);
+    SPFeImage *feImage = SP_FEIMAGE(object);
+
+    switch(key) {\r
+       /*DEAL WITH SETTING ATTRIBUTES HERE*/
+        default:
+            if (((SPObjectClass *) feImage_parent_class)->set)
+                ((SPObjectClass *) feImage_parent_class)->set(object, key, value);
+            break;
+    }
+
+}
+
+/**
+ * Receives update notifications.
+ */
+static void
+sp_feImage_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    debug("0x%p",object);
+
+    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
+                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
+
+        /* do something to trigger redisplay, updates? */
+
+    }
+
+    if (((SPObjectClass *) feImage_parent_class)->update) {
+        ((SPObjectClass *) feImage_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_feImage_write(SPObject *object, Inkscape::XML::Node *repr, guint flags)
+{
+    debug("0x%p",object);
+
+    // 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");
+        } else {
+            repr = SP_OBJECT_REPR(object)->duplicate();
+        }
+    }
+
+    if (((SPObjectClass *) feImage_parent_class)->write) {
+        ((SPObjectClass *) feImage_parent_class)->write(object, repr, flags);
+    }
+
+    return repr;
+}
+
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-feimage.h b/src/sp-feimage.h
new file mode 100644 (file)
index 0000000..958c623
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef SP_FEIMAGE_H_SEEN
+#define SP_FEIMAGE_H_SEEN
+
+/** \file
+ * SVG <feImage> implementation, see sp-feImage.cpp.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-filter.h"
+#include "sp-feimage-fns.h"
+
+/* FeImage base class */
+class SPFeImageClass;
+
+struct SPFeImage : public SPFilter {
+    /** IMAGE ATTRIBUTES HERE */
+    
+};
+
+struct SPFeImageClass {
+    SPFilterClass parent_class;
+};
+
+GType sp_feImage_get_type();
+
+
+#endif /* !SP_FEIMAGE_H_SEEN */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-femerge-fns.h b/src/sp-femerge-fns.h
new file mode 100644 (file)
index 0000000..24bda1a
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef SP_FEMERGE_FNS_H
+#define SP_FEMERGE_FNS_H
+
+/** \file 
+ * Macros and fn declarations related to gaussian blur filter.
+ */
+
+#include <glib-object.h>
+#include <glib/gtypes.h>
+
+namespace Inkscape {
+namespace XML {
+class Node;
+}
+}
+
+class SPFeMerge;
+
+#define SP_TYPE_FEMERGE (sp_feMerge_get_type())
+#define SP_FEMERGE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEMERGE, SPFeMerge))
+#define SP_FEMERGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEMERGE, SPFeMergeClass))
+#define SP_IS_FEMERGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEMERGE))
+#define SP_IS_FEMERGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEMERGE))
+
+GType sp_feMerge_get_type();
+
+#endif /* !SP_FEMERGE_FNS_H */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-femerge.cpp b/src/sp-femerge.cpp
new file mode 100644 (file)
index 0000000..6904f5b
--- /dev/null
@@ -0,0 +1,196 @@
+#define __SP_FEMERGE_CPP__
+
+/** \file
+ * SVG <feMerge> implementation.
+ *
+ */
+/*
+ * Authors:
+ *   hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "attributes.h"
+#include "svg/svg.h"
+#include "sp-femerge.h"
+#include "xml/repr.h"
+
+//#define SP_MACROS_SILENT
+//#include "macros.h"
+
+#define DEBUG_FEMERGE
+#ifdef DEBUG_FEMERGE
+# define debug(f, a...) { g_print("%s(%d) %s:", \
+                                  __FILE__,__LINE__,__FUNCTION__); \
+                          g_print(f, ## a); \
+                          g_print("\n"); \
+                        }
+#else
+# define debug(f, a...) /**/
+#endif
+
+/* FeMerge base class */
+
+static void sp_feMerge_class_init(SPFeMergeClass *klass);
+static void sp_feMerge_init(SPFeMerge *feMerge);
+
+static void sp_feMerge_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_feMerge_release(SPObject *object);
+static void sp_feMerge_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_feMerge_update(SPObject *object, SPCtx *ctx, guint flags);
+static Inkscape::XML::Node *sp_feMerge_write(SPObject *object, Inkscape::XML::Node *repr, guint flags);
+
+static SPObjectClass *feMerge_parent_class;
+
+GType
+sp_feMerge_get_type()
+{
+    static GType feMerge_type = 0;
+
+    if (!feMerge_type) {
+        GTypeInfo feMerge_info = {
+            sizeof(SPFeMergeClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_feMerge_class_init,
+            NULL, NULL,
+            sizeof(SPFeMerge),
+            16,
+            (GInstanceInitFunc) sp_feMerge_init,
+            NULL,    /* value_table */
+        };
+        feMerge_type = g_type_register_static(SP_TYPE_OBJECT, "SPFeMerge", &feMerge_info, (GTypeFlags)0);
+    }
+    return feMerge_type;
+}
+
+static void
+sp_feMerge_class_init(SPFeMergeClass *klass)
+{
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+
+    feMerge_parent_class = (SPObjectClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_feMerge_build;
+    sp_object_class->release = sp_feMerge_release;
+    sp_object_class->write = sp_feMerge_write;
+    sp_object_class->set = sp_feMerge_set;
+    sp_object_class->update = sp_feMerge_update;
+}
+
+static void
+sp_feMerge_init(SPFeMerge *feMerge)
+{
+    debug("0x%p",feMerge);
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPFeMerge variables.  For this to get called,
+ * our name must be associated with a repr via "sp_object_type_register".  Best done through
+ * sp-object-repr.cpp's repr_name_entries array.
+ */
+static void
+sp_feMerge_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    debug("0x%p",object);
+    if (((SPObjectClass *) feMerge_parent_class)->build) {
+        ((SPObjectClass *) feMerge_parent_class)->build(object, document, repr);
+    }
+
+    /*LOAD ATTRIBUTES FROM REPR HERE*/
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_feMerge_release(SPObject *object)
+{
+    debug("0x%p",object);
+
+    if (((SPObjectClass *) feMerge_parent_class)->release)
+        ((SPObjectClass *) feMerge_parent_class)->release(object);
+}
+
+/**
+ * Sets a specific value in the SPFeMerge.
+ */
+static void
+sp_feMerge_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    debug("0x%p %s(%u): '%s'",object,
+            sp_attribute_name(key),key,value);
+    SPFeMerge *feMerge = SP_FEMERGE(object);
+
+    switch(key) {\r
+       /*DEAL WITH SETTING ATTRIBUTES HERE*/
+        default:
+            if (((SPObjectClass *) feMerge_parent_class)->set)
+                ((SPObjectClass *) feMerge_parent_class)->set(object, key, value);
+            break;
+    }
+
+}
+
+/**
+ * Receives update notifications.
+ */
+static void
+sp_feMerge_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    debug("0x%p",object);
+
+    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
+                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
+
+        /* do something to trigger redisplay, updates? */
+
+    }
+
+    if (((SPObjectClass *) feMerge_parent_class)->update) {
+        ((SPObjectClass *) feMerge_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_feMerge_write(SPObject *object, Inkscape::XML::Node *repr, guint flags)
+{
+    debug("0x%p",object);
+
+    // 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");
+        } else {
+            repr = SP_OBJECT_REPR(object)->duplicate();
+        }
+    }
+
+    if (((SPObjectClass *) feMerge_parent_class)->write) {
+        ((SPObjectClass *) feMerge_parent_class)->write(object, repr, flags);
+    }
+
+    return repr;
+}
+
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-femerge.h b/src/sp-femerge.h
new file mode 100644 (file)
index 0000000..41bdfa3
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef SP_FEMERGE_H_SEEN
+#define SP_FEMERGE_H_SEEN
+
+/** \file
+ * SVG <feMerge> implementation, see sp-feMerge.cpp.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-filter.h"
+#include "sp-femerge-fns.h"
+
+/* FeMerge base class */
+class SPFeMergeClass;
+
+struct SPFeMerge : public SPFilter {
+    /** MERGE ATTRIBUTES HERE */
+    
+};
+
+struct SPFeMergeClass {
+    SPFilterClass parent_class;
+};
+
+GType sp_feMerge_get_type();
+
+
+#endif /* !SP_FEMERGE_H_SEEN */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-femorphology-fns.h b/src/sp-femorphology-fns.h
new file mode 100644 (file)
index 0000000..a055040
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef SP_FEMORPHOLOGY_FNS_H
+#define SP_FEMORPHOLOGY_FNS_H
+
+/** \file 
+ * Macros and fn declarations related to gaussian blur filter.
+ */
+
+#include <glib-object.h>
+#include <glib/gtypes.h>
+
+namespace Inkscape {
+namespace XML {
+class Node;
+}
+}
+
+class SPFeMorphology;
+
+#define SP_TYPE_FEMORPHOLOGY (sp_feMorphology_get_type())
+#define SP_FEMORPHOLOGY(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEMORPHOLOGY, SPFeMorphology))
+#define SP_FEMORPHOLOGY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEMORPHOLOGY, SPFeMorphologyClass))
+#define SP_IS_FEMORPHOLOGY(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEMORPHOLOGY))
+#define SP_IS_FEMORPHOLOGY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEMORPHOLOGY))
+
+GType sp_feMorphology_get_type();
+
+#endif /* !SP_FEMORPHOLOGY_FNS_H */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-femorphology.cpp b/src/sp-femorphology.cpp
new file mode 100644 (file)
index 0000000..5d01523
--- /dev/null
@@ -0,0 +1,196 @@
+#define __SP_FEMORPHOLOGY_CPP__
+
+/** \file
+ * SVG <feMorphology> implementation.
+ *
+ */
+/*
+ * Authors:
+ *   hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "attributes.h"
+#include "svg/svg.h"
+#include "sp-femorphology.h"
+#include "xml/repr.h"
+
+//#define SP_MACROS_SILENT
+//#include "macros.h"
+
+#define DEBUG_FEMORPHOLOGY
+#ifdef DEBUG_FEMORPHOLOGY
+# define debug(f, a...) { g_print("%s(%d) %s:", \
+                                  __FILE__,__LINE__,__FUNCTION__); \
+                          g_print(f, ## a); \
+                          g_print("\n"); \
+                        }
+#else
+# define debug(f, a...) /**/
+#endif
+
+/* FeMorphology base class */
+
+static void sp_feMorphology_class_init(SPFeMorphologyClass *klass);
+static void sp_feMorphology_init(SPFeMorphology *feMorphology);
+
+static void sp_feMorphology_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_feMorphology_release(SPObject *object);
+static void sp_feMorphology_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_feMorphology_update(SPObject *object, SPCtx *ctx, guint flags);
+static Inkscape::XML::Node *sp_feMorphology_write(SPObject *object, Inkscape::XML::Node *repr, guint flags);
+
+static SPObjectClass *feMorphology_parent_class;
+
+GType
+sp_feMorphology_get_type()
+{
+    static GType feMorphology_type = 0;
+
+    if (!feMorphology_type) {
+        GTypeInfo feMorphology_info = {
+            sizeof(SPFeMorphologyClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_feMorphology_class_init,
+            NULL, NULL,
+            sizeof(SPFeMorphology),
+            16,
+            (GInstanceInitFunc) sp_feMorphology_init,
+            NULL,    /* value_table */
+        };
+        feMorphology_type = g_type_register_static(SP_TYPE_OBJECT, "SPFeMorphology", &feMorphology_info, (GTypeFlags)0);
+    }
+    return feMorphology_type;
+}
+
+static void
+sp_feMorphology_class_init(SPFeMorphologyClass *klass)
+{
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+
+    feMorphology_parent_class = (SPObjectClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_feMorphology_build;
+    sp_object_class->release = sp_feMorphology_release;
+    sp_object_class->write = sp_feMorphology_write;
+    sp_object_class->set = sp_feMorphology_set;
+    sp_object_class->update = sp_feMorphology_update;
+}
+
+static void
+sp_feMorphology_init(SPFeMorphology *feMorphology)
+{
+    debug("0x%p",feMorphology);
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPFeMorphology variables.  For this to get called,
+ * our name must be associated with a repr via "sp_object_type_register".  Best done through
+ * sp-object-repr.cpp's repr_name_entries array.
+ */
+static void
+sp_feMorphology_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    debug("0x%p",object);
+    if (((SPObjectClass *) feMorphology_parent_class)->build) {
+        ((SPObjectClass *) feMorphology_parent_class)->build(object, document, repr);
+    }
+
+    /*LOAD ATTRIBUTES FROM REPR HERE*/
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_feMorphology_release(SPObject *object)
+{
+    debug("0x%p",object);
+
+    if (((SPObjectClass *) feMorphology_parent_class)->release)
+        ((SPObjectClass *) feMorphology_parent_class)->release(object);
+}
+
+/**
+ * Sets a specific value in the SPFeMorphology.
+ */
+static void
+sp_feMorphology_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    debug("0x%p %s(%u): '%s'",object,
+            sp_attribute_name(key),key,value);
+    SPFeMorphology *feMorphology = SP_FEMORPHOLOGY(object);
+
+    switch(key) {\r
+       /*DEAL WITH SETTING ATTRIBUTES HERE*/
+        default:
+            if (((SPObjectClass *) feMorphology_parent_class)->set)
+                ((SPObjectClass *) feMorphology_parent_class)->set(object, key, value);
+            break;
+    }
+
+}
+
+/**
+ * Receives update notifications.
+ */
+static void
+sp_feMorphology_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    debug("0x%p",object);
+
+    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
+                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
+
+        /* do something to trigger redisplay, updates? */
+
+    }
+
+    if (((SPObjectClass *) feMorphology_parent_class)->update) {
+        ((SPObjectClass *) feMorphology_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_feMorphology_write(SPObject *object, Inkscape::XML::Node *repr, guint flags)
+{
+    debug("0x%p",object);
+
+    // 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");
+        } else {
+            repr = SP_OBJECT_REPR(object)->duplicate();
+        }
+    }
+
+    if (((SPObjectClass *) feMorphology_parent_class)->write) {
+        ((SPObjectClass *) feMorphology_parent_class)->write(object, repr, flags);
+    }
+
+    return repr;
+}
+
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-femorphology.h b/src/sp-femorphology.h
new file mode 100644 (file)
index 0000000..c810c03
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef SP_FEMORPHOLOGY_H_SEEN
+#define SP_FEMORPHOLOGY_H_SEEN
+
+/** \file
+ * SVG <feMorphology> implementation, see sp-feMorphology.cpp.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-filter.h"
+#include "sp-femorphology-fns.h"
+
+/* FeMorphology base class */
+class SPFeMorphologyClass;
+
+struct SPFeMorphology : public SPFilter {
+    /** MORPHOLOGY ATTRIBUTES HERE */
+    
+};
+
+struct SPFeMorphologyClass {
+    SPFilterClass parent_class;
+};
+
+GType sp_feMorphology_get_type();
+
+
+#endif /* !SP_FEMORPHOLOGY_H_SEEN */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-feoffset-fns.h b/src/sp-feoffset-fns.h
new file mode 100644 (file)
index 0000000..38561c1
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef SP_FEOFFSET_FNS_H
+#define SP_FEOFFSET_FNS_H
+
+/** \file 
+ * Macros and fn declarations related to gaussian blur filter.
+ */
+
+#include <glib-object.h>
+#include <glib/gtypes.h>
+
+namespace Inkscape {
+namespace XML {
+class Node;
+}
+}
+
+class SPFeOffset;
+
+#define SP_TYPE_FEOFFSET (sp_feOffset_get_type())
+#define SP_FEOFFSET(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FEOFFSET, SPFeOffset))
+#define SP_FEOFFSET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FEOFFSET, SPFeOffsetClass))
+#define SP_IS_FEOFFSET(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FEOFFSET))
+#define SP_IS_FEOFFSET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FEOFFSET))
+
+GType sp_feOffset_get_type();
+
+#endif /* !SP_FEOFFSET_FNS_H */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-feoffset.cpp b/src/sp-feoffset.cpp
new file mode 100644 (file)
index 0000000..3429ceb
--- /dev/null
@@ -0,0 +1,196 @@
+#define __SP_FEOFFSET_CPP__
+
+/** \file
+ * SVG <feOffset> implementation.
+ *
+ */
+/*
+ * Authors:
+ *   hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "attributes.h"
+#include "svg/svg.h"
+#include "sp-feoffset.h"
+#include "xml/repr.h"
+
+//#define SP_MACROS_SILENT
+//#include "macros.h"
+
+#define DEBUG_FEOFFSET
+#ifdef DEBUG_FEOFFSET
+# define debug(f, a...) { g_print("%s(%d) %s:", \
+                                  __FILE__,__LINE__,__FUNCTION__); \
+                          g_print(f, ## a); \
+                          g_print("\n"); \
+                        }
+#else
+# define debug(f, a...) /**/
+#endif
+
+/* FeOffset base class */
+
+static void sp_feOffset_class_init(SPFeOffsetClass *klass);
+static void sp_feOffset_init(SPFeOffset *feOffset);
+
+static void sp_feOffset_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_feOffset_release(SPObject *object);
+static void sp_feOffset_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_feOffset_update(SPObject *object, SPCtx *ctx, guint flags);
+static Inkscape::XML::Node *sp_feOffset_write(SPObject *object, Inkscape::XML::Node *repr, guint flags);
+
+static SPObjectClass *feOffset_parent_class;
+
+GType
+sp_feOffset_get_type()
+{
+    static GType feOffset_type = 0;
+
+    if (!feOffset_type) {
+        GTypeInfo feOffset_info = {
+            sizeof(SPFeOffsetClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_feOffset_class_init,
+            NULL, NULL,
+            sizeof(SPFeOffset),
+            16,
+            (GInstanceInitFunc) sp_feOffset_init,
+            NULL,    /* value_table */
+        };
+        feOffset_type = g_type_register_static(SP_TYPE_OBJECT, "SPFeOffset", &feOffset_info, (GTypeFlags)0);
+    }
+    return feOffset_type;
+}
+
+static void
+sp_feOffset_class_init(SPFeOffsetClass *klass)
+{
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+
+    feOffset_parent_class = (SPObjectClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_feOffset_build;
+    sp_object_class->release = sp_feOffset_release;
+    sp_object_class->write = sp_feOffset_write;
+    sp_object_class->set = sp_feOffset_set;
+    sp_object_class->update = sp_feOffset_update;
+}
+
+static void
+sp_feOffset_init(SPFeOffset *feOffset)
+{
+    debug("0x%p",feOffset);
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPFeOffset variables.  For this to get called,
+ * our name must be associated with a repr via "sp_object_type_register".  Best done through
+ * sp-object-repr.cpp's repr_name_entries array.
+ */
+static void
+sp_feOffset_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    debug("0x%p",object);
+    if (((SPObjectClass *) feOffset_parent_class)->build) {
+        ((SPObjectClass *) feOffset_parent_class)->build(object, document, repr);
+    }
+
+    /*LOAD ATTRIBUTES FROM REPR HERE*/
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_feOffset_release(SPObject *object)
+{
+    debug("0x%p",object);
+
+    if (((SPObjectClass *) feOffset_parent_class)->release)
+        ((SPObjectClass *) feOffset_parent_class)->release(object);
+}
+
+/**
+ * Sets a specific value in the SPFeOffset.
+ */
+static void
+sp_feOffset_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    debug("0x%p %s(%u): '%s'",object,
+            sp_attribute_name(key),key,value);
+    SPFeOffset *feOffset = SP_FEOFFSET(object);
+
+    switch(key) {\r
+       /*DEAL WITH SETTING ATTRIBUTES HERE*/
+        default:
+            if (((SPObjectClass *) feOffset_parent_class)->set)
+                ((SPObjectClass *) feOffset_parent_class)->set(object, key, value);
+            break;
+    }
+
+}
+
+/**
+ * Receives update notifications.
+ */
+static void
+sp_feOffset_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    debug("0x%p",object);
+
+    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
+                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
+
+        /* do something to trigger redisplay, updates? */
+
+    }
+
+    if (((SPObjectClass *) feOffset_parent_class)->update) {
+        ((SPObjectClass *) feOffset_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_feOffset_write(SPObject *object, Inkscape::XML::Node *repr, guint flags)
+{
+    debug("0x%p",object);
+
+    // 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");
+        } else {
+            repr = SP_OBJECT_REPR(object)->duplicate();
+        }
+    }
+
+    if (((SPObjectClass *) feOffset_parent_class)->write) {
+        ((SPObjectClass *) feOffset_parent_class)->write(object, repr, flags);
+    }
+
+    return repr;
+}
+
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-feoffset.h b/src/sp-feoffset.h
new file mode 100644 (file)
index 0000000..7a5c2b7
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef SP_FEOFFSET_H_SEEN
+#define SP_FEOFFSET_H_SEEN
+
+/** \file
+ * SVG <feOffset> implementation, see sp-feOffset.cpp.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-filter.h"
+#include "sp-feoffset-fns.h"
+
+/* FeOffset base class */
+class SPFeOffsetClass;
+
+struct SPFeOffset : public SPFilter {
+    /** OFFSET ATTRIBUTES HERE */
+    
+};
+
+struct SPFeOffsetClass {
+    SPFilterClass parent_class;
+};
+
+GType sp_feOffset_get_type();
+
+
+#endif /* !SP_FEOFFSET_H_SEEN */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-fespecularlighting-fns.h b/src/sp-fespecularlighting-fns.h
new file mode 100644 (file)
index 0000000..bd48ba6
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef SP_FESPECULARLIGHTING_FNS_H
+#define SP_FESPECULARLIGHTING_FNS_H
+
+/** \file 
+ * Macros and fn declarations related to gaussian blur filter.
+ */
+
+#include <glib-object.h>
+#include <glib/gtypes.h>
+
+namespace Inkscape {
+namespace XML {
+class Node;
+}
+}
+
+class SPFeSpecularLighting;
+
+#define SP_TYPE_FESPECULARLIGHTING (sp_feSpecularLighting_get_type())
+#define SP_FESPECULARLIGHTING(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FESPECULARLIGHTING, SPFeSpecularLighting))
+#define SP_FESPECULARLIGHTING_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FESPECULARLIGHTING, SPFeSpecularLightingClass))
+#define SP_IS_FESPECULARLIGHTING(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FESPECULARLIGHTING))
+#define SP_IS_FESPECULARLIGHTING_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FESPECULARLIGHTING))
+
+GType sp_feSpecularLighting_get_type();
+
+#endif /* !SP_FESPECULARLIGHTING_FNS_H */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-fespecularlighting.cpp b/src/sp-fespecularlighting.cpp
new file mode 100644 (file)
index 0000000..4fe25d4
--- /dev/null
@@ -0,0 +1,196 @@
+#define __SP_FESPECULARLIGHTING_CPP__
+
+/** \file
+ * SVG <feSpecularLighting> implementation.
+ *
+ */
+/*
+ * Authors:
+ *   hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "attributes.h"
+#include "svg/svg.h"
+#include "sp-fespecularlighting.h"
+#include "xml/repr.h"
+
+//#define SP_MACROS_SILENT
+//#include "macros.h"
+
+#define DEBUG_FESPECULARLIGHTING
+#ifdef DEBUG_FESPECULARLIGHTING
+# define debug(f, a...) { g_print("%s(%d) %s:", \
+                                  __FILE__,__LINE__,__FUNCTION__); \
+                          g_print(f, ## a); \
+                          g_print("\n"); \
+                        }
+#else
+# define debug(f, a...) /**/
+#endif
+
+/* FeSpecularLighting base class */
+
+static void sp_feSpecularLighting_class_init(SPFeSpecularLightingClass *klass);
+static void sp_feSpecularLighting_init(SPFeSpecularLighting *feSpecularLighting);
+
+static void sp_feSpecularLighting_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_feSpecularLighting_release(SPObject *object);
+static void sp_feSpecularLighting_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_feSpecularLighting_update(SPObject *object, SPCtx *ctx, guint flags);
+static Inkscape::XML::Node *sp_feSpecularLighting_write(SPObject *object, Inkscape::XML::Node *repr, guint flags);
+
+static SPObjectClass *feSpecularLighting_parent_class;
+
+GType
+sp_feSpecularLighting_get_type()
+{
+    static GType feSpecularLighting_type = 0;
+
+    if (!feSpecularLighting_type) {
+        GTypeInfo feSpecularLighting_info = {
+            sizeof(SPFeSpecularLightingClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_feSpecularLighting_class_init,
+            NULL, NULL,
+            sizeof(SPFeSpecularLighting),
+            16,
+            (GInstanceInitFunc) sp_feSpecularLighting_init,
+            NULL,    /* value_table */
+        };
+        feSpecularLighting_type = g_type_register_static(SP_TYPE_OBJECT, "SPFeSpecularLighting", &feSpecularLighting_info, (GTypeFlags)0);
+    }
+    return feSpecularLighting_type;
+}
+
+static void
+sp_feSpecularLighting_class_init(SPFeSpecularLightingClass *klass)
+{
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+
+    feSpecularLighting_parent_class = (SPObjectClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_feSpecularLighting_build;
+    sp_object_class->release = sp_feSpecularLighting_release;
+    sp_object_class->write = sp_feSpecularLighting_write;
+    sp_object_class->set = sp_feSpecularLighting_set;
+    sp_object_class->update = sp_feSpecularLighting_update;
+}
+
+static void
+sp_feSpecularLighting_init(SPFeSpecularLighting *feSpecularLighting)
+{
+    debug("0x%p",feSpecularLighting);
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPFeSpecularLighting variables.  For this to get called,
+ * our name must be associated with a repr via "sp_object_type_register".  Best done through
+ * sp-object-repr.cpp's repr_name_entries array.
+ */
+static void
+sp_feSpecularLighting_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    debug("0x%p",object);
+    if (((SPObjectClass *) feSpecularLighting_parent_class)->build) {
+        ((SPObjectClass *) feSpecularLighting_parent_class)->build(object, document, repr);
+    }
+
+    /*LOAD ATTRIBUTES FROM REPR HERE*/
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_feSpecularLighting_release(SPObject *object)
+{
+    debug("0x%p",object);
+
+    if (((SPObjectClass *) feSpecularLighting_parent_class)->release)
+        ((SPObjectClass *) feSpecularLighting_parent_class)->release(object);
+}
+
+/**
+ * Sets a specific value in the SPFeSpecularLighting.
+ */
+static void
+sp_feSpecularLighting_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    debug("0x%p %s(%u): '%s'",object,
+            sp_attribute_name(key),key,value);
+    SPFeSpecularLighting *feSpecularLighting = SP_FESPECULARLIGHTING(object);
+
+    switch(key) {\r
+       /*DEAL WITH SETTING ATTRIBUTES HERE*/
+        default:
+            if (((SPObjectClass *) feSpecularLighting_parent_class)->set)
+                ((SPObjectClass *) feSpecularLighting_parent_class)->set(object, key, value);
+            break;
+    }
+
+}
+
+/**
+ * Receives update notifications.
+ */
+static void
+sp_feSpecularLighting_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    debug("0x%p",object);
+
+    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
+                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
+
+        /* do something to trigger redisplay, updates? */
+
+    }
+
+    if (((SPObjectClass *) feSpecularLighting_parent_class)->update) {
+        ((SPObjectClass *) feSpecularLighting_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_feSpecularLighting_write(SPObject *object, Inkscape::XML::Node *repr, guint flags)
+{
+    debug("0x%p",object);
+
+    // 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");
+        } else {
+            repr = SP_OBJECT_REPR(object)->duplicate();
+        }
+    }
+
+    if (((SPObjectClass *) feSpecularLighting_parent_class)->write) {
+        ((SPObjectClass *) feSpecularLighting_parent_class)->write(object, repr, flags);
+    }
+
+    return repr;
+}
+
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-fespecularlighting.h b/src/sp-fespecularlighting.h
new file mode 100644 (file)
index 0000000..885215b
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef SP_FESPECULARLIGHTING_H_SEEN
+#define SP_FESPECULARLIGHTING_H_SEEN
+
+/** \file
+ * SVG <feSpecularLighting> implementation, see sp-feSpecularLighting.cpp.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-filter.h"
+#include "sp-fespecularlighting-fns.h"
+
+/* FeSpecularLighting base class */
+class SPFeSpecularLightingClass;
+
+struct SPFeSpecularLighting : public SPFilter {
+    /** SPECULARLIGHTING ATTRIBUTES HERE */
+    
+};
+
+struct SPFeSpecularLightingClass {
+    SPFilterClass parent_class;
+};
+
+GType sp_feSpecularLighting_get_type();
+
+
+#endif /* !SP_FESPECULARLIGHTING_H_SEEN */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-fetile-fns.h b/src/sp-fetile-fns.h
new file mode 100644 (file)
index 0000000..b7c4c5f
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef SP_FETILE_FNS_H
+#define SP_FETILE_FNS_H
+
+/** \file 
+ * Macros and fn declarations related to gaussian blur filter.
+ */
+
+#include <glib-object.h>
+#include <glib/gtypes.h>
+
+namespace Inkscape {
+namespace XML {
+class Node;
+}
+}
+
+class SPFeTile;
+
+#define SP_TYPE_FETILE (sp_feTile_get_type())
+#define SP_FETILE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FETILE, SPFeTile))
+#define SP_FETILE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FETILE, SPFeTileClass))
+#define SP_IS_FETILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FETILE))
+#define SP_IS_FETILE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FETILE))
+
+GType sp_feTile_get_type();
+
+#endif /* !SP_FETILE_FNS_H */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-fetile.cpp b/src/sp-fetile.cpp
new file mode 100644 (file)
index 0000000..a11fbc0
--- /dev/null
@@ -0,0 +1,196 @@
+#define __SP_FETILE_CPP__
+
+/** \file
+ * SVG <feTile> implementation.
+ *
+ */
+/*
+ * Authors:
+ *   hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "attributes.h"
+#include "svg/svg.h"
+#include "sp-fetile.h"
+#include "xml/repr.h"
+
+//#define SP_MACROS_SILENT
+//#include "macros.h"
+
+#define DEBUG_FETILE
+#ifdef DEBUG_FETILE
+# define debug(f, a...) { g_print("%s(%d) %s:", \
+                                  __FILE__,__LINE__,__FUNCTION__); \
+                          g_print(f, ## a); \
+                          g_print("\n"); \
+                        }
+#else
+# define debug(f, a...) /**/
+#endif
+
+/* FeTile base class */
+
+static void sp_feTile_class_init(SPFeTileClass *klass);
+static void sp_feTile_init(SPFeTile *feTile);
+
+static void sp_feTile_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+static void sp_feTile_release(SPObject *object);
+static void sp_feTile_set(SPObject *object, unsigned int key, gchar const *value);
+static void sp_feTile_update(SPObject *object, SPCtx *ctx, guint flags);
+static Inkscape::XML::Node *sp_feTile_write(SPObject *object, Inkscape::XML::Node *repr, guint flags);
+
+static SPObjectClass *feTile_parent_class;
+
+GType
+sp_feTile_get_type()
+{
+    static GType feTile_type = 0;
+
+    if (!feTile_type) {
+        GTypeInfo feTile_info = {
+            sizeof(SPFeTileClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_feTile_class_init,
+            NULL, NULL,
+            sizeof(SPFeTile),
+            16,
+            (GInstanceInitFunc) sp_feTile_init,
+            NULL,    /* value_table */
+        };
+        feTile_type = g_type_register_static(SP_TYPE_OBJECT, "SPFeTile", &feTile_info, (GTypeFlags)0);
+    }
+    return feTile_type;
+}
+
+static void
+sp_feTile_class_init(SPFeTileClass *klass)
+{
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+
+    feTile_parent_class = (SPObjectClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_feTile_build;
+    sp_object_class->release = sp_feTile_release;
+    sp_object_class->write = sp_feTile_write;
+    sp_object_class->set = sp_feTile_set;
+    sp_object_class->update = sp_feTile_update;
+}
+
+static void
+sp_feTile_init(SPFeTile *feTile)
+{
+    debug("0x%p",feTile);
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPFeTile variables.  For this to get called,
+ * our name must be associated with a repr via "sp_object_type_register".  Best done through
+ * sp-object-repr.cpp's repr_name_entries array.
+ */
+static void
+sp_feTile_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    debug("0x%p",object);
+    if (((SPObjectClass *) feTile_parent_class)->build) {
+        ((SPObjectClass *) feTile_parent_class)->build(object, document, repr);
+    }
+
+    /*LOAD ATTRIBUTES FROM REPR HERE*/
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_feTile_release(SPObject *object)
+{
+    debug("0x%p",object);
+
+    if (((SPObjectClass *) feTile_parent_class)->release)
+        ((SPObjectClass *) feTile_parent_class)->release(object);
+}
+
+/**
+ * Sets a specific value in the SPFeTile.
+ */
+static void
+sp_feTile_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    debug("0x%p %s(%u): '%s'",object,
+            sp_attribute_name(key),key,value);
+    SPFeTile *feTile = SP_FETILE(object);
+
+    switch(key) {\r
+       /*DEAL WITH SETTING ATTRIBUTES HERE*/
+        default:
+            if (((SPObjectClass *) feTile_parent_class)->set)
+                ((SPObjectClass *) feTile_parent_class)->set(object, key, value);
+            break;
+    }
+
+}
+
+/**
+ * Receives update notifications.
+ */
+static void
+sp_feTile_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    debug("0x%p",object);
+
+    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
+                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
+
+        /* do something to trigger redisplay, updates? */
+
+    }
+
+    if (((SPObjectClass *) feTile_parent_class)->update) {
+        ((SPObjectClass *) feTile_parent_class)->update(object, ctx, flags);
+    }
+}
+
+/**
+ * Writes its settings to an incoming repr object, if any.
+ */
+static Inkscape::XML::Node *
+sp_feTile_write(SPObject *object, Inkscape::XML::Node *repr, guint flags)
+{
+    debug("0x%p",object);
+
+    // 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");
+        } else {
+            repr = SP_OBJECT_REPR(object)->duplicate();
+        }
+    }
+
+    if (((SPObjectClass *) feTile_parent_class)->write) {
+        ((SPObjectClass *) feTile_parent_class)->write(object, repr, flags);
+    }
+
+    return repr;
+}
+
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-fetile.h b/src/sp-fetile.h
new file mode 100644 (file)
index 0000000..4cec1c3
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef SP_FETILE_H_SEEN
+#define SP_FETILE_H_SEEN
+
+/** \file
+ * SVG <feTile> implementation, see sp-feTile.cpp.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-filter.h"
+#include "sp-fetile-fns.h"
+
+/* FeTile base class */
+class SPFeTileClass;
+
+struct SPFeTile : public SPFilter {
+    /** TILE ATTRIBUTES HERE */
+    
+};
+
+struct SPFeTileClass {
+    SPFilterClass parent_class;
+};
+
+GType sp_feTile_get_type();
+
+
+#endif /* !SP_FETILE_H_SEEN */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-feturbulence-fns.h b/src/sp-feturbulence-fns.h
new file mode 100644 (file)
index 0000000..43b4450
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef SP_FETURBULENCE_FNS_H
+#define SP_FETURBULENCE_FNS_H
+
+/** \file 
+ * Macros and fn declarations related to gaussian blur filter.
+ */
+
+#include <glib-object.h>
+#include <glib/gtypes.h>
+
+namespace Inkscape {
+namespace XML {
+class Node;
+}
+}
+
+class SPFeTurbulence;
+
+#define SP_TYPE_FETURBULENCE (sp_feTurbulence_get_type())
+#define SP_FETURBULENCE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), SP_TYPE_FETURBULENCE, SPFeTurbulence))
+#define SP_FETURBULENCE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), SP_TYPE_FETURBULENCE, SPFeTurbulenceClass))
+#define SP_IS_FETURBULENCE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_FETURBULENCE))
+#define SP_IS_FETURBULENCE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), SP_TYPE_FETURBULENCE))
+
+GType sp_feTurbulence_get_type();
+
+#endif /* !SP_FETURBULENCE_FNS_H */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-feturbulence.cpp b/src/sp-feturbulence.cpp
new file mode 100644 (file)
index 0000000..0122f1f
--- /dev/null
@@ -0,0 +1,196 @@
+#define __SP_FETURBULENCE_CPP__
+
+/** \file
+ * SVG <feTurbulence> implementation.
+ *
+ */
+/*
+ * Authors:
+ *   hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "attributes.h"
+#include "svg/svg.h"
+#include "sp-feturbulence.h"
+#include "xml/repr.h"
+
+//#define SP_MACROS_SILENT
+//#include "macros.h"
+
+#define DEBUG_FETURBULENCE
+#ifdef DEBUG_FETURBULENCE
+# define debug(f, a...) { g_print("%s(%d) %s:", \
+                                  __FILE__,__LINE__,__FUNCTION__); \
+                          g_print(f, ## a); \
+                          g_print("\n"); \
+                        }
+#else
+# define debug(f, a...) /**/
+#endif
+
+/* FeTurbulence base class */
+
+static void sp_feTurbulence_class_init(SPFeTurbulenceClass *klass);
+static void sp_feTurbulence_init(SPFeTurbulence *feTurbulence);
+
+static void sp_feTurbulence_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr);
+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 SPObjectClass *feTurbulence_parent_class;
+
+GType
+sp_feTurbulence_get_type()
+{
+    static GType feTurbulence_type = 0;
+
+    if (!feTurbulence_type) {
+        GTypeInfo feTurbulence_info = {
+            sizeof(SPFeTurbulenceClass),
+            NULL, NULL,
+            (GClassInitFunc) sp_feTurbulence_class_init,
+            NULL, NULL,
+            sizeof(SPFeTurbulence),
+            16,
+            (GInstanceInitFunc) sp_feTurbulence_init,
+            NULL,    /* value_table */
+        };
+        feTurbulence_type = g_type_register_static(SP_TYPE_OBJECT, "SPFeTurbulence", &feTurbulence_info, (GTypeFlags)0);
+    }
+    return feTurbulence_type;
+}
+
+static void
+sp_feTurbulence_class_init(SPFeTurbulenceClass *klass)
+{
+    SPObjectClass *sp_object_class = (SPObjectClass *)klass;
+
+    feTurbulence_parent_class = (SPObjectClass*)g_type_class_peek_parent(klass);
+
+    sp_object_class->build = sp_feTurbulence_build;
+    sp_object_class->release = sp_feTurbulence_release;
+    sp_object_class->write = sp_feTurbulence_write;
+    sp_object_class->set = sp_feTurbulence_set;
+    sp_object_class->update = sp_feTurbulence_update;
+}
+
+static void
+sp_feTurbulence_init(SPFeTurbulence *feTurbulence)
+{
+    debug("0x%p",feTurbulence);
+}
+
+/**
+ * Reads the Inkscape::XML::Node, and initializes SPFeTurbulence variables.  For this to get called,
+ * our name must be associated with a repr via "sp_object_type_register".  Best done through
+ * sp-object-repr.cpp's repr_name_entries array.
+ */
+static void
+sp_feTurbulence_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr)
+{
+    debug("0x%p",object);
+    if (((SPObjectClass *) feTurbulence_parent_class)->build) {
+        ((SPObjectClass *) feTurbulence_parent_class)->build(object, document, repr);
+    }
+
+    /*LOAD ATTRIBUTES FROM REPR HERE*/
+}
+
+/**
+ * Drops any allocated memory.
+ */
+static void
+sp_feTurbulence_release(SPObject *object)
+{
+    debug("0x%p",object);
+
+    if (((SPObjectClass *) feTurbulence_parent_class)->release)
+        ((SPObjectClass *) feTurbulence_parent_class)->release(object);
+}
+
+/**
+ * Sets a specific value in the SPFeTurbulence.
+ */
+static void
+sp_feTurbulence_set(SPObject *object, unsigned int key, gchar const *value)
+{
+    debug("0x%p %s(%u): '%s'",object,
+            sp_attribute_name(key),key,value);
+    SPFeTurbulence *feTurbulence = SP_FETURBULENCE(object);
+
+    switch(key) {\r
+       /*DEAL WITH SETTING ATTRIBUTES HERE*/
+        default:
+            if (((SPObjectClass *) feTurbulence_parent_class)->set)
+                ((SPObjectClass *) feTurbulence_parent_class)->set(object, key, value);
+            break;
+    }
+
+}
+
+/**
+ * Receives update notifications.
+ */
+static void
+sp_feTurbulence_update(SPObject *object, SPCtx *ctx, guint flags)
+{
+    debug("0x%p",object);
+
+    if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG |
+                 SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) {
+
+        /* do something to trigger redisplay, updates? */
+
+    }
+
+    if (((SPObjectClass *) feTurbulence_parent_class)->update) {
+        ((SPObjectClass *) feTurbulence_parent_class)->update(object, ctx, 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)
+{
+    debug("0x%p",object);
+
+    // 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");
+        } else {
+            repr = SP_OBJECT_REPR(object)->duplicate();
+        }
+    }
+
+    if (((SPObjectClass *) feTurbulence_parent_class)->write) {
+        ((SPObjectClass *) feTurbulence_parent_class)->write(object, repr, flags);
+    }
+
+    return repr;
+}
+
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
diff --git a/src/sp-feturbulence.h b/src/sp-feturbulence.h
new file mode 100644 (file)
index 0000000..9040e7a
--- /dev/null
@@ -0,0 +1,45 @@
+#ifndef SP_FETURBULENCE_H_SEEN
+#define SP_FETURBULENCE_H_SEEN
+
+/** \file
+ * SVG <feTurbulence> implementation, see sp-feTurbulence.cpp.
+ */
+/*
+ * Authors:
+ *   Hugo Rodrigues <haa.rodrigues@gmail.com>
+ *
+ * Copyright (C) 2006 Hugo Rodrigues
+ *
+ * Released under GNU GPL, read the file 'COPYING' for more information
+ */
+
+#include "sp-filter.h"
+#include "sp-feturbulence-fns.h"
+
+/* FeTurbulence base class */
+class SPFeTurbulenceClass;
+
+struct SPFeTurbulence : public SPFilter {
+    /** TURBULENCE ATTRIBUTES HERE */
+    
+};
+
+struct SPFeTurbulenceClass {
+    SPFilterClass parent_class;
+};
+
+GType sp_feTurbulence_get_type();
+
+
+#endif /* !SP_FETURBULENCE_H_SEEN */
+
+/*
+  Local Variables:
+  mode:c++
+  c-file-style:"stroustrup"
+  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
+  indent-tabs-mode:nil
+  fill-column:99
+  End:
+*/
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 :
index 4ffbce04f72ab32674d69ce6ffdfe72693f507bd..2ab53163a53f141bcbf219fe411942666929ec51 100644 (file)
 #include "xml/repr.h"
 #include "sp-filter.h"
 #include "sp-gaussian-blur.h"
+#include "sp-feblend.h"
+#include "sp-fecolormatrix.h"
+#include "sp-fecomponenttransfer.h"
+#include "sp-fecomposite.h"
+#include "sp-feconvolvematrix.h"
+#include "sp-fediffuselighting.h"
+#include "sp-fedisplacementmap.h"
+#include "sp-feflood.h"
+#include "sp-feimage.h"
+#include "sp-femerge.h"
+#include "sp-femorphology.h"
+#include "sp-feoffset.h"
+#include "sp-fespecularlighting.h"
+#include "sp-fetile.h"
+#include "sp-feturbulence.h"
 
 enum NameType { REPR_NAME, SODIPODI_TYPE };
 static unsigned const N_NAME_TYPES = SODIPODI_TYPE + 1;
@@ -114,7 +129,22 @@ populate_dtables()
         { "svg:flowRoot", SP_TYPE_FLOWTEXT },
         { "svg:flowSpan", SP_TYPE_FLOWTSPAN },
         { "svg:g", SP_TYPE_GROUP },
-        { "svg:gaussianBlur", SP_TYPE_GAUSSIANBLUR },
+        { "feBlend", SP_TYPE_FEBLEND },
+        { "feColorMatrix", SP_TYPE_FECOLORMATRIX },
+        { "feComponentTransfer", SP_TYPE_FECOMPONENTTRANSFER },
+        { "feComposite", SP_TYPE_FECOMPOSITE },
+        { "feConvolveMatrix", SP_TYPE_FECONVOLVEMATRIX },
+        { "feDiffuseLighting", SP_TYPE_FEDIFFUSELIGHTING },
+        { "feDisplacementMap", SP_TYPE_FEDISPLACEMENTMAP },
+        { "feFlood", SP_TYPE_FEFLOOD },
+        { "feGaussianBlur", SP_TYPE_GAUSSIANBLUR },
+        { "feImage", SP_TYPE_FEIMAGE },
+        { "feMerge", SP_TYPE_FEMERGE },
+        { "feMorphology", SP_TYPE_FEMORPHOLOGY },
+        { "feOffset", SP_TYPE_FEOFFSET },
+        { "feSpecularLighting", SP_TYPE_FESPECULARLIGHTING },
+        { "feTile", SP_TYPE_FETILE },
+        { "feTurbulence", SP_TYPE_FETURBULENCE },
         { "svg:image", SP_TYPE_IMAGE },
         { "svg:line", SP_TYPE_LINE },
         { "svg:linearGradient", SP_TYPE_LINEARGRADIENT },
index 0eb8b0869cbcd28463ff48f1464b1e1ec303aed2..bd880b857cb4760adaa117b8dd3cf59eb4072643 100644 (file)
@@ -118,7 +118,7 @@ static void sp_style_clear(SPStyle *style);
 static void sp_style_merge_property(SPStyle *style, gint id, gchar const *val);
 
 static void sp_style_merge_ipaint(SPStyle *style, SPIPaint *paint, SPIPaint const *parent);
-static void sp_style_merge_ifilter(SPIFilter *child, SPIFilter const *parent);
+static void sp_style_merge_ifilter(SPStyle *style, SPIFilter *child, SPIFilter const *parent);
 static void sp_style_read_dash(SPStyle *style, gchar const *str);
 
 static SPTextStyle *sp_text_style_new(void);
@@ -138,7 +138,7 @@ static void sp_style_read_itextdecoration(SPITextDecoration *val, gchar const *s
 static void sp_style_read_icolor(SPIPaint *paint, gchar const *str, SPStyle *style, SPDocument *document);
 static void sp_style_read_ipaint(SPIPaint *paint, gchar const *str, SPStyle *style, SPDocument *document);
 static void sp_style_read_ifontsize(SPIFontSize *val, gchar const *str);
-static void sp_style_read_ifilter(SPIFilter *f, gchar const *str, SPDocument *document);
+static void sp_style_read_ifilter(SPIFilter *f, gchar const *str, SPStyle *style, SPDocument *document);
 
 static void sp_style_read_penum(SPIEnum *val, Inkscape::XML::Node *repr, gchar const *key, SPStyleEnum const *dict, bool can_explicitly_inherit);
 static void sp_style_read_plength(SPILength *val, Inkscape::XML::Node *repr, gchar const *key);
@@ -160,6 +160,8 @@ static void css2_unescape_unquote(SPIString *val);
 
 static void sp_style_paint_clear(SPStyle *style, SPIPaint *paint);
 
+static void sp_style_filter_clear(SPStyle *style, SPIFilter *filter);
+
 #define SPS_READ_IENUM_IF_UNSET(v,s,d,i) if (!(v)->set) {sp_style_read_ienum((v), (s), (d), (i));}
 #define SPS_READ_PENUM_IF_UNSET(v,r,k,d,i) if (!(v)->set) {sp_style_read_penum((v), (r), (k), (d), (i));}
 
@@ -409,6 +411,7 @@ sp_style_new()
 
     style->fill_hreffed = false;
     style->stroke_hreffed = false;
+    style->filter_hreffed = false;
 
     new (&style->release_connection) sigc::connection();
 
@@ -475,6 +478,7 @@ sp_style_unref(SPStyle *style)
         if (style->text) sp_text_style_unref(style->text);
         sp_style_paint_clear(style, &style->fill);
         sp_style_paint_clear(style, &style->stroke);
+        sp_style_filter_clear(style, &style->filter);
         style->fill_release_connection.disconnect();
         style->fill_release_connection.~connection();
         style->fill_modified_connection.disconnect();
@@ -676,8 +680,7 @@ sp_style_read(SPStyle *style, SPObject *object, Inkscape::XML::Node *repr)
     if (!style->filter.set) {
         val = repr->attribute("filter");
         if (val) {
-            sp_style_read_ifilter(&style->filter, val,
-                                  (object) ? SP_OBJECT_DOCUMENT(object) : NULL);
+               sp_style_read_ifilter(&style->filter, val, style, (object) ? SP_OBJECT_DOCUMENT(object) : NULL);
         }
     }
     SPS_READ_PENUM_IF_UNSET(&style->enable_background, repr,
@@ -917,7 +920,7 @@ sp_style_merge_property(SPStyle *style, gint id, gchar const *val)
             /* Filter */
         case SP_PROP_FILTER:
             if (!style->filter.set && !style->filter.inherit) {
-                sp_style_read_ifilter(&style->filter, val, (style->object) ? SP_OBJECT_DOCUMENT(style->object) : NULL);
+                sp_style_read_ifilter(&style->filter, val, style, (style->object) ? SP_OBJECT_DOCUMENT(style->object) : NULL);
             }
             break;
         case SP_PROP_FLOOD_COLOR:
@@ -1456,7 +1459,7 @@ sp_style_merge_from_parent(SPStyle *const style, SPStyle const *const parent)
 
     /* Filter effects */
     if(style->filter.set && style->filter.inherit) {
-        sp_style_merge_ifilter(&style->filter, &parent->filter);
+        sp_style_merge_ifilter(style, &style->filter, &parent->filter);
     }
 
     if(style->enable_background.inherit) {
@@ -2113,12 +2116,15 @@ sp_style_merge_ipaint(SPStyle *style, SPIPaint *paint, SPIPaint const *parent)
  * Filter effects do not inherit by default
  */
 static void
-sp_style_merge_ifilter(SPIFilter *child, SPIFilter const *parent)
+sp_style_merge_ifilter(SPStyle *style, SPIFilter *child, SPIFilter const *parent)
 {
+    sp_style_filter_clear(style, child);
     child->set = parent->set;
     child->inherit = parent->inherit;
     child->filter = parent->filter;
     child->uri = parent->uri;
+    sp_object_href(SP_OBJECT(child), style);
+    style->filter_hreffed = true;
 }
 
 /**
@@ -2397,6 +2403,7 @@ sp_style_clear(SPStyle *style)
 
     sp_style_paint_clear(style, &style->fill);
     sp_style_paint_clear(style, &style->stroke);
+    sp_style_filter_clear(style, &style->filter);
     if (style->stroke_dash.dash) {
         g_free(style->stroke_dash.dash);
     }
@@ -3100,7 +3107,7 @@ sp_style_read_ifontsize(SPIFontSize *val, gchar const *str)
  * Set SPIFilter object from string.
  */
 static void
-sp_style_read_ifilter(SPIFilter *f, gchar const *str, SPDocument *document)
+sp_style_read_ifilter( SPIFilter *f, gchar const *str, SPStyle * style, SPDocument *document)
 {
     /* Try all possible values: inherit, none, uri */
     if (streq(str, "inherit")) {
@@ -3128,10 +3135,12 @@ sp_style_read_ifilter(SPIFilter *f, gchar const *str, SPDocument *document)
             obj = sp_uri_reference_resolve(document, str);
             if (SP_IS_FILTER(obj)) {
                 f->filter = SP_FILTER(obj);
+                sp_object_href(SP_OBJECT(f->filter), style);  
+                style->filter_hreffed = true;
                 //g_signal_connect(G_OBJECT(f->filter), "release",
-                //                 G_CALLBACK(sp_style_filter_release), style);
+                    //                 G_CALLBACK(sp_style_filter_release), style);
                 //g_signal_connect(G_OBJECT(f->filter), "modified",
-                //                 G_CALLBACK(sp_style_filter_modified), style);
+                    //                 G_CALLBACK(sp_style_filter_modified), style);
             } else {
                 g_warning("Element '%s' not found or is not a filter", f->uri);
             }
@@ -3664,6 +3673,26 @@ sp_style_paint_clear(SPStyle *style, SPIPaint *paint)
     paint->iccColor = NULL;
 }
 
+
+/**
+ * Clear filter object, and disconnect style from paintserver (if present).
+ */
+static void
+sp_style_filter_clear(SPStyle *style, SPIFilter *f)
+{
+
+    if (style->filter_hreffed) {
+        sp_object_hunref(SP_OBJECT(f->filter), style);
+        style->filter_hreffed = false;
+    }
+    //style->fill_release_connection.disconnect();
+    //style->fill_modified_connection.disconnect();
+
+    f->filter = NULL;
+    
+}
+
+
 /**
  * Clear all style property attributes in object.
  */
index 1cc4b5a106e595058e8abc1259d397852936cd06..a200a970f2e076ccb38e0f2073d18d6b25116886 100644 (file)
@@ -345,6 +345,7 @@ struct SPStyle {
     /// style has hreffed its fill/stroke paintservers, needs to release.
     bool fill_hreffed; 
     bool stroke_hreffed; 
+    bool filter_hreffed; 
 
     sigc::connection release_connection;