summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 32a37f9)
raw | patch | inline | side by side (parent: 32a37f9)
author | haa_rodrigues <haa_rodrigues@users.sourceforge.net> | |
Wed, 2 Aug 2006 21:31:59 +0000 (21:31 +0000) | ||
committer | haa_rodrigues <haa_rodrigues@users.sourceforge.net> | |
Wed, 2 Aug 2006 21:31:59 +0000 (21:31 +0000) |
54 files changed:
diff --git a/src/Makefile_insert b/src/Makefile_insert
index dd65108ce02f0ba80fc1b90b6bb1daa48db31849..0b236eeca9afa5c0f4a3d38da065ea7eb7e00197 100644 (file)
--- a/src/Makefile_insert
+++ b/src/Makefile_insert
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 \
diff --git a/src/attributes-test.h b/src/attributes-test.h
index c71b8f04caf730d6f88e02109915070934bcfa88..f0db48ad0d846eee0f90464abbb001974b796e8f 100644 (file)
--- a/src/attributes-test.h
+++ b/src/attributes-test.h
{"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},
diff --git a/src/attributes.cpp b/src/attributes.cpp
index f0ecc1e415ed13bccc0ac252997375062732699e..867e5989c73128be532974de96c62f14760d454f 100644 (file)
--- a/src/attributes.cpp
+++ b/src/attributes.cpp
{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"},
{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"},
{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"},
diff --git a/src/attributes.h b/src/attributes.h
index d80e870061defe57d975679914e022f5da32e4c8..5ef817e49ca6a3dfd330c27e2bf30bffbd8c9451 100644 (file)
--- a/src/attributes.h
+++ b/src/attributes.h
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,
SP_ATTR_MARKERHEIGHT,
SP_ATTR_ORIENT,
/* SPStyleElem */
- SP_ATTR_TYPE,
+ //SP_ATTR_TYPE,
/* Animations */
SP_ATTR_ATTRIBUTENAME,
SP_ATTR_ATTRIBUTETYPE,
SP_ATTR_REPEATDUR,
/* Interpolating animations */
SP_ATTR_CALCMODE,
- SP_ATTR_VALUES,
+ //SP_ATTR_VALUES,
SP_ATTR_KEYTIMES,
SP_ATTR_KEYSPLINES,
SP_ATTR_FROM,
diff --git a/src/desktop-style.cpp b/src/desktop-style.cpp
index c9989df275b0751f10263cf841e7ded0a656053b..ff96f7e8ea033ca15f156cd9419d9f06e521cbec 100644 (file)
--- a/src/desktop-style.cpp
+++ b/src/desktop-style.cpp
}
}
+/**
+ * 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;
}
diff --git a/src/desktop-style.h b/src/desktop-style.h
index 8f8388289e8711a821ae7b5f566108b25bcb4a73..a1fd8a4ffa4d8b50f5f1bfa1b696121e4306a266 100644 (file)
--- a/src/desktop-style.h
+++ b/src/desktop-style.h
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);
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)
#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;
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)
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);
}
+
+/**
+ * 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
--- /dev/null
+++ b/src/sp-feblend-fns.h
@@ -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
--- /dev/null
+++ b/src/sp-feblend.cpp
@@ -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
--- /dev/null
+++ b/src/sp-feblend.h
@@ -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
--- /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
--- /dev/null
+++ b/src/sp-fecolormatrix.cpp
@@ -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
--- /dev/null
+++ b/src/sp-fecolormatrix.h
@@ -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
--- /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
--- /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
--- /dev/null
+++ b/src/sp-fecomposite-fns.h
@@ -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
--- /dev/null
+++ b/src/sp-fecomposite.cpp
@@ -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
--- /dev/null
+++ b/src/sp-fecomposite.h
@@ -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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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
--- /dev/null
+++ b/src/sp-feflood-fns.h
@@ -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
--- /dev/null
+++ b/src/sp-feflood.cpp
@@ -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
--- /dev/null
+++ b/src/sp-feflood.h
@@ -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
--- /dev/null
+++ b/src/sp-feimage-fns.h
@@ -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
--- /dev/null
+++ b/src/sp-feimage.cpp
@@ -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
--- /dev/null
+++ b/src/sp-feimage.h
@@ -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
--- /dev/null
+++ b/src/sp-femerge-fns.h
@@ -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
--- /dev/null
+++ b/src/sp-femerge.cpp
@@ -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
--- /dev/null
+++ b/src/sp-femerge.h
@@ -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
--- /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
--- /dev/null
+++ b/src/sp-femorphology.cpp
@@ -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
--- /dev/null
+++ b/src/sp-femorphology.h
@@ -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
--- /dev/null
+++ b/src/sp-feoffset-fns.h
@@ -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
--- /dev/null
+++ b/src/sp-feoffset.cpp
@@ -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
--- /dev/null
+++ b/src/sp-feoffset.h
@@ -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
--- /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
--- /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
--- /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
--- /dev/null
+++ b/src/sp-fetile-fns.h
@@ -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
--- /dev/null
+++ b/src/sp-fetile.cpp
@@ -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
--- /dev/null
+++ b/src/sp-fetile.h
@@ -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
--- /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
--- /dev/null
+++ b/src/sp-feturbulence.cpp
@@ -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
--- /dev/null
+++ b/src/sp-feturbulence.h
@@ -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 :
diff --git a/src/sp-object-repr.cpp b/src/sp-object-repr.cpp
index 4ffbce04f72ab32674d69ce6ffdfe72693f507bd..2ab53163a53f141bcbf219fe411942666929ec51 100644 (file)
--- a/src/sp-object-repr.cpp
+++ b/src/sp-object-repr.cpp
#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;
{ "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 },
diff --git a/src/style.cpp b/src/style.cpp
index 0eb8b0869cbcd28463ff48f1464b1e1ec303aed2..bd880b857cb4760adaa117b8dd3cf59eb4072643 100644 (file)
--- a/src/style.cpp
+++ b/src/style.cpp
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);
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));}
style->fill_hreffed = false;
style->stroke_hreffed = false;
+ style->filter_hreffed = false;
new (&style->release_connection) sigc::connection();
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();
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,
/* 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:
/* 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;
}
/**
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);
}
* 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")) {
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);
}
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.
*/
diff --git a/src/style.h b/src/style.h
index 1cc4b5a106e595058e8abc1259d397852936cd06..a200a970f2e076ccb38e0f2073d18d6b25116886 100644 (file)
--- a/src/style.h
+++ b/src/style.h
/// style has hreffed its fill/stroke paintservers, needs to release.
bool fill_hreffed;
bool stroke_hreffed;
+ bool filter_hreffed;
sigc::connection release_connection;