From a0a8d020201e0e38a63d9aa3dce228d7d9e6fb35 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Thu, 14 Mar 2013 12:42:39 +0100 Subject: Various changes. (bzr r11608.1.48) --- src/sp-filter.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'src/sp-filter.cpp') diff --git a/src/sp-filter.cpp b/src/sp-filter.cpp index a20856f53..85a898958 100644 --- a/src/sp-filter.cpp +++ b/src/sp-filter.cpp @@ -86,7 +86,7 @@ sp_filter_class_init(SPFilterClass *klass) filter_parent_class = (SPObjectClass*)g_type_class_peek_parent(klass); - sp_object_class->build = sp_filter_build; + //sp_object_class->build = sp_filter_build; sp_object_class->release = sp_filter_release; sp_object_class->write = sp_filter_write; sp_object_class->set = sp_filter_set; @@ -130,9 +130,10 @@ sp_filter_init(SPFilter *filter) static void sp_filter_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) { - if (((SPObjectClass *) filter_parent_class)->build) { - ((SPObjectClass *) filter_parent_class)->build(object, document, repr); - } +// if (((SPObjectClass *) filter_parent_class)->build) { +// ((SPObjectClass *) filter_parent_class)->build(object, document, repr); +// } + // CPPIFY: todo //Read values of key attributes from XML nodes into object. object->readAttr( "filterUnits" ); -- cgit v1.2.3 From 3d7b1356600880a43e44e864cab08fff29cd23af Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sat, 30 Mar 2013 00:45:33 +0100 Subject: Added "virtual pads" to - SPFeFuncNode - SPFeDistantLight - SPFeMergeNode - SPFePointLight - SPFeSpotLight - SPFilter - SPFont - SPGuide Changes in SPItem and SPNamedView. (bzr r11608.1.49) --- src/sp-filter.cpp | 327 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 306 insertions(+), 21 deletions(-) (limited to 'src/sp-filter.cpp') diff --git a/src/sp-filter.cpp b/src/sp-filter.cpp index 85a898958..2a2c6de1c 100644 --- a/src/sp-filter.cpp +++ b/src/sp-filter.cpp @@ -95,9 +95,19 @@ sp_filter_class_init(SPFilterClass *klass) sp_object_class->remove_child = sp_filter_remove_child; } +CFilter::CFilter(SPFilter* filter) : CObject(filter) { + this->spfilter = filter; +} + +CFilter::~CFilter() { +} + static void sp_filter_init(SPFilter *filter) { + filter->cfilter = new CFilter(filter); + filter->cobject = filter->cfilter; + filter->href = new SPFilterReference(filter); filter->href->changedSignal().connect(sigc::bind(sigc::ptr_fun(filter_ref_changed), filter)); @@ -127,13 +137,28 @@ sp_filter_init(SPFilter *filter) * 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_filter_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) -{ +//static void +//sp_filter_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *repr) +//{ // if (((SPObjectClass *) filter_parent_class)->build) { // ((SPObjectClass *) filter_parent_class)->build(object, document, repr); // } - // CPPIFY: todo +// //Read values of key attributes from XML nodes into object. +// object->readAttr( "filterUnits" ); +// object->readAttr( "primitiveUnits" ); +// object->readAttr( "x" ); +// object->readAttr( "y" ); +// object->readAttr( "width" ); +// object->readAttr( "height" ); +// object->readAttr( "filterRes" ); +// object->readAttr( "xlink:href" ); +// +////is this necessary? +// document->addResource("filter", object); +//} + +void CFilter::onBuild(SPDocument *document, Inkscape::XML::Node *repr) { + SPFilter* object = this->spfilter; //Read values of key attributes from XML nodes into object. object->readAttr( "filterUnits" ); @@ -154,6 +179,33 @@ sp_filter_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *rep */ static void sp_filter_release(SPObject *object) { +// SPFilter *filter = SP_FILTER(object); +// +// if (object->document) { +// // Unregister ourselves +// object->document->removeResource("filter", object); +// } +// +////TODO: release resources here +// +// //release href +// if (filter->href) { +// filter->modified_connection.disconnect(); +// filter->href->detach(); +// delete filter->href; +// filter->href = NULL; +// } +// +// filter->modified_connection.~connection(); +// delete filter->_image_name; +// +// if (((SPObjectClass *) filter_parent_class)->release) +// ((SPObjectClass *) filter_parent_class)->release(object); + ((SPFilter*)object)->cfilter->onRelease(); +} + +void CFilter::onRelease() { + SPFilter* object = this->spfilter; SPFilter *filter = SP_FILTER(object); if (object->document) { @@ -174,8 +226,9 @@ static void sp_filter_release(SPObject *object) filter->modified_connection.~connection(); delete filter->_image_name; - if (((SPObjectClass *) filter_parent_class)->release) - ((SPObjectClass *) filter_parent_class)->release(object); +// if (((SPObjectClass *) filter_parent_class)->release) +// ((SPObjectClass *) filter_parent_class)->release(object); + CObject::onRelease(); } /** @@ -184,6 +237,81 @@ static void sp_filter_release(SPObject *object) static void sp_filter_set(SPObject *object, unsigned int key, gchar const *value) { +// SPFilter *filter = SP_FILTER(object); +// +// switch (key) { +// case SP_ATTR_FILTERUNITS: +// if (value) { +// if (!strcmp(value, "userSpaceOnUse")) { +// filter->filterUnits = SP_FILTER_UNITS_USERSPACEONUSE; +// } else { +// filter->filterUnits = SP_FILTER_UNITS_OBJECTBOUNDINGBOX; +// } +// filter->filterUnits_set = TRUE; +// } else { +// filter->filterUnits = SP_FILTER_UNITS_OBJECTBOUNDINGBOX; +// filter->filterUnits_set = FALSE; +// } +// object->requestModified(SP_OBJECT_MODIFIED_FLAG); +// break; +// case SP_ATTR_PRIMITIVEUNITS: +// if (value) { +// if (!strcmp(value, "objectBoundingBox")) { +// filter->primitiveUnits = SP_FILTER_UNITS_OBJECTBOUNDINGBOX; +// } else { +// filter->primitiveUnits = SP_FILTER_UNITS_USERSPACEONUSE; +// } +// filter->primitiveUnits_set = TRUE; +// } else { +// filter->primitiveUnits = SP_FILTER_UNITS_USERSPACEONUSE; +// filter->primitiveUnits_set = FALSE; +// } +// object->requestModified(SP_OBJECT_MODIFIED_FLAG); +// break; +// case SP_ATTR_X: +// filter->x.readOrUnset(value); +// object->requestModified(SP_OBJECT_MODIFIED_FLAG); +// break; +// case SP_ATTR_Y: +// filter->y.readOrUnset(value); +// object->requestModified(SP_OBJECT_MODIFIED_FLAG); +// break; +// case SP_ATTR_WIDTH: +// filter->width.readOrUnset(value); +// object->requestModified(SP_OBJECT_MODIFIED_FLAG); +// break; +// case SP_ATTR_HEIGHT: +// filter->height.readOrUnset(value); +// object->requestModified(SP_OBJECT_MODIFIED_FLAG); +// break; +// case SP_ATTR_FILTERRES: +// filter->filterRes.set(value); +// object->requestModified(SP_OBJECT_MODIFIED_FLAG); +// break; +// case SP_ATTR_XLINK_HREF: +// if (value) { +// try { +// filter->href->attach(Inkscape::URI(value)); +// } catch (Inkscape::BadURIException &e) { +// g_warning("%s", e.what()); +// filter->href->detach(); +// } +// } else { +// filter->href->detach(); +// } +// break; +// default: +// // See if any parents need this value. +// if (((SPObjectClass *) filter_parent_class)->set) { +// ((SPObjectClass *) filter_parent_class)->set(object, key, value); +// } +// break; +// } + ((SPFilter*)object)->cfilter->onSet(key, value); +} + +void CFilter::onSet(unsigned int key, gchar const *value) { + SPFilter* object = this->spfilter; SPFilter *filter = SP_FILTER(object); switch (key) { @@ -249,9 +377,10 @@ sp_filter_set(SPObject *object, unsigned int key, gchar const *value) break; default: // See if any parents need this value. - if (((SPObjectClass *) filter_parent_class)->set) { - ((SPObjectClass *) filter_parent_class)->set(object, key, value); - } +// if (((SPObjectClass *) filter_parent_class)->set) { +// ((SPObjectClass *) filter_parent_class)->set(object, key, value); +// } + CObject::onSet(key, value); break; } } @@ -262,6 +391,22 @@ sp_filter_set(SPObject *object, unsigned int key, gchar const *value) static void sp_filter_update(SPObject *object, SPCtx *ctx, guint flags) { +// //SPFilter *filter = SP_FILTER(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 *) filter_parent_class)->update) { +// ((SPObjectClass *) filter_parent_class)->update(object, ctx, flags); +// } + ((SPFilter*)object)->cfilter->onUpdate(ctx, flags); +} + +void CFilter::onUpdate(SPCtx *ctx, guint flags) { //SPFilter *filter = SP_FILTER(object); if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG | @@ -271,9 +416,10 @@ sp_filter_update(SPObject *object, SPCtx *ctx, guint flags) } - if (((SPObjectClass *) filter_parent_class)->update) { - ((SPObjectClass *) filter_parent_class)->update(object, ctx, flags); - } +// if (((SPObjectClass *) filter_parent_class)->update) { +// ((SPObjectClass *) filter_parent_class)->update(object, ctx, flags); +// } + CObject::onUpdate(ctx, flags); } /** @@ -282,6 +428,120 @@ sp_filter_update(SPObject *object, SPCtx *ctx, guint flags) static Inkscape::XML::Node * sp_filter_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags) { +// SPFilter *filter = SP_FILTER(object); +// +// // Original from sp-item-group.cpp +// if (flags & SP_OBJECT_WRITE_BUILD) { +// if (!repr) { +// repr = doc->createElement("svg:filter"); +// } +// GSList *l = NULL; +// for ( SPObject *child = object->firstChild(); child; child = child->getNext() ) { +// Inkscape::XML::Node *crepr = child->updateRepr(doc, NULL, flags); +// if (crepr) { +// l = g_slist_prepend (l, crepr); +// } +// } +// while (l) { +// repr->addChild((Inkscape::XML::Node *) l->data, NULL); +// Inkscape::GC::release((Inkscape::XML::Node *) l->data); +// l = g_slist_remove (l, l->data); +// } +// } else { +// for ( SPObject *child = object->firstChild() ; child; child = child->getNext() ) { +// child->updateRepr(flags); +// } +// } +// +// if ((flags & SP_OBJECT_WRITE_ALL) || filter->filterUnits_set) { +// switch (filter->filterUnits) { +// case SP_FILTER_UNITS_USERSPACEONUSE: +// repr->setAttribute("filterUnits", "userSpaceOnUse"); +// break; +// default: +// repr->setAttribute("filterUnits", "objectBoundingBox"); +// break; +// } +// } +// +// if ((flags & SP_OBJECT_WRITE_ALL) || filter->primitiveUnits_set) { +// switch (filter->primitiveUnits) { +// case SP_FILTER_UNITS_OBJECTBOUNDINGBOX: +// repr->setAttribute("primitiveUnits", "objectBoundingBox"); +// break; +// default: +// repr->setAttribute("primitiveUnits", "userSpaceOnUse"); +// break; +// } +// } +// +// if (filter->x._set) { +// sp_repr_set_svg_double(repr, "x", filter->x.computed); +// } else { +// repr->setAttribute("x", NULL); +// } +// +// if (filter->y._set) { +// sp_repr_set_svg_double(repr, "y", filter->y.computed); +// } else { +// repr->setAttribute("y", NULL); +// } +// +// if (filter->width._set) { +// sp_repr_set_svg_double(repr, "width", filter->width.computed); +// } else { +// repr->setAttribute("width", NULL); +// } +// +// if (filter->height._set) { +// sp_repr_set_svg_double(repr, "height", filter->height.computed); +// } else { +// repr->setAttribute("height", NULL); +// } +// +// if (filter->filterRes.getNumber()>=0) { +// gchar *tmp = filter->filterRes.getValueString(); +// repr->setAttribute("filterRes", tmp); +// g_free(tmp); +// } else { +// repr->setAttribute("filterRes", NULL); +// } +// +// if (filter->href->getURI()) { +// gchar *uri_string = filter->href->getURI()->toString(); +// repr->setAttribute("xlink:href", uri_string); +// g_free(uri_string); +// } +// +// // TODO: This is evil, correctly implement support for color-interpolation-filters!!! +// // The color-interpolation-filters attribute is initially set to linearRGB according to the SVG standard. +// // However, Inkscape completely ignores it and implicitly assumes that it is sRGB (like color-interpolation). +// // This results in a discrepancy between Inkscape and other renderers in how they render filters. +// // To mitigate this problem I've (Jasper van de Gronde,th.v.d.gronde@hccnet.nl) added this to ensure that at least +// // any filters written by Inkscape will henceforth be rendered the same in other renderers. +// // In the future Inkscape should have proper support for the color-interpolation properties and this should be changed. +// +// // repr->setAttribute("color-interpolation-filters", "sRGB"); +// +// // Actually, the above line is not correct as the attribute is only allowed on filter +// // primitives and not objects. However, it is allowed as a property in a style +// // attribute. Note, this property must also be set in sp-filter-chemistry, filter_new() as the +// // code here is not necessarily called when a new filter is created. 29 Aug 2011 Tav. +// SPCSSAttr *css = sp_repr_css_attr_new(); +// sp_repr_css_set_property(css, "color-interpolation-filters", "sRGB"); +// sp_repr_css_change(repr, css, "style"); +// sp_repr_css_attr_unref(css); +// +// if (((SPObjectClass *) filter_parent_class)->write) { +// ((SPObjectClass *) filter_parent_class)->write(object, doc, repr, flags); +// } +// +// return repr; + return ((SPFilter*)object)->cfilter->onWrite(doc, repr, flags); +} + +Inkscape::XML::Node* CFilter::onWrite(Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags) { + SPFilter* object = this->spfilter; SPFilter *filter = SP_FILTER(object); // Original from sp-item-group.cpp @@ -386,9 +646,10 @@ sp_filter_write(SPObject *object, Inkscape::XML::Document *doc, Inkscape::XML::N sp_repr_css_change(repr, css, "style"); sp_repr_css_attr_unref(css); - if (((SPObjectClass *) filter_parent_class)->write) { - ((SPObjectClass *) filter_parent_class)->write(object, doc, repr, flags); - } +// if (((SPObjectClass *) filter_parent_class)->write) { +// ((SPObjectClass *) filter_parent_class)->write(object, doc, repr, flags); +// } + CObject::onWrite(doc, repr, flags); return repr; } @@ -424,10 +685,22 @@ static void filter_ref_modified(SPObject */*href*/, guint /*flags*/, SPFilter *f static void sp_filter_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XML::Node *ref) { +// //SPFilter *f = SP_FILTER(object); +// +// if (((SPObjectClass *) filter_parent_class)->child_added) +// (* ((SPObjectClass *) filter_parent_class)->child_added)(object, child, ref); +// +// object->requestModified(SP_OBJECT_MODIFIED_FLAG); + ((SPFilter*)object)->cfilter->onChildAdded(child, ref); +} + +void CFilter::onChildAdded(Inkscape::XML::Node *child, Inkscape::XML::Node *ref) { + SPFilter* object = this->spfilter; //SPFilter *f = SP_FILTER(object); - if (((SPObjectClass *) filter_parent_class)->child_added) - (* ((SPObjectClass *) filter_parent_class)->child_added)(object, child, ref); +// if (((SPObjectClass *) filter_parent_class)->child_added) +// (* ((SPObjectClass *) filter_parent_class)->child_added)(object, child, ref); + CObject::onChildAdded(child, ref); object->requestModified(SP_OBJECT_MODIFIED_FLAG); } @@ -438,12 +711,24 @@ sp_filter_child_added(SPObject *object, Inkscape::XML::Node *child, Inkscape::XM static void sp_filter_remove_child(SPObject *object, Inkscape::XML::Node *child) { -// SPFilter *f = SP_FILTER(object); +//// SPFilter *f = SP_FILTER(object); +// +// if (((SPObjectClass *) filter_parent_class)->remove_child) +// (* ((SPObjectClass *) filter_parent_class)->remove_child)(object, child); +// +// object->requestModified(SP_OBJECT_MODIFIED_FLAG); + ((SPFilter*)object)->cfilter->onRemoveChild(child); +} - if (((SPObjectClass *) filter_parent_class)->remove_child) - (* ((SPObjectClass *) filter_parent_class)->remove_child)(object, child); +void CFilter::onRemoveChild(Inkscape::XML::Node *child) { + SPFilter* object = this->spfilter; + // SPFilter *f = SP_FILTER(object); - object->requestModified(SP_OBJECT_MODIFIED_FLAG); +// if (((SPObjectClass *) filter_parent_class)->remove_child) +// (* ((SPObjectClass *) filter_parent_class)->remove_child)(object, child); + CObject::onRemoveChild(child); + + object->requestModified(SP_OBJECT_MODIFIED_FLAG); } void sp_filter_build_renderer(SPFilter *sp_filter, Inkscape::Filters::Filter *nr_filter) -- cgit v1.2.3 From d11fee42d0d56f0720aba8ad01b1318e5f715593 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sat, 30 Mar 2013 00:46:34 +0100 Subject: Replaced virtual function call to "build_renderer". (bzr r11608.1.53) --- src/sp-filter.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'src/sp-filter.cpp') diff --git a/src/sp-filter.cpp b/src/sp-filter.cpp index 2a2c6de1c..db6b933e7 100644 --- a/src/sp-filter.cpp +++ b/src/sp-filter.cpp @@ -760,11 +760,13 @@ void sp_filter_build_renderer(SPFilter *sp_filter, Inkscape::Filters::Filter *nr if (SP_IS_FILTER_PRIMITIVE(primitive_obj)) { SPFilterPrimitive *primitive = SP_FILTER_PRIMITIVE(primitive_obj); g_assert(primitive != NULL); - if (((SPFilterPrimitiveClass*) G_OBJECT_GET_CLASS(primitive))->build_renderer) { - ((SPFilterPrimitiveClass *) G_OBJECT_GET_CLASS(primitive))->build_renderer(primitive, nr_filter); - } else { - g_warning("Cannot build filter renderer: missing builder"); - } + +// if (((SPFilterPrimitiveClass*) G_OBJECT_GET_CLASS(primitive))->build_renderer) { +// ((SPFilterPrimitiveClass *) G_OBJECT_GET_CLASS(primitive))->build_renderer(primitive, nr_filter); +// } else { +// g_warning("Cannot build filter renderer: missing builder"); +// } // CPPIFY: => FilterPrimitive should be abstract. + primitive->cfilterprimitive->onBuildRenderer(nr_filter); } primitive_obj = primitive_obj->next; } -- cgit v1.2.3 From 957c3e4b7909d42c5a13f1b1dd583f877fc32259 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sat, 30 Mar 2013 00:46:57 +0100 Subject: Removed function pointers from SPObject and subclasses. Added some missing virtual pads for classes that were hidden by preprocessor macros. (bzr r11608.1.55) --- src/sp-filter.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src/sp-filter.cpp') diff --git a/src/sp-filter.cpp b/src/sp-filter.cpp index db6b933e7..1af450c8b 100644 --- a/src/sp-filter.cpp +++ b/src/sp-filter.cpp @@ -87,12 +87,12 @@ sp_filter_class_init(SPFilterClass *klass) filter_parent_class = (SPObjectClass*)g_type_class_peek_parent(klass); //sp_object_class->build = sp_filter_build; - sp_object_class->release = sp_filter_release; - sp_object_class->write = sp_filter_write; - sp_object_class->set = sp_filter_set; - sp_object_class->update = sp_filter_update; - sp_object_class->child_added = sp_filter_child_added; - sp_object_class->remove_child = sp_filter_remove_child; +// sp_object_class->release = sp_filter_release; +// sp_object_class->write = sp_filter_write; +// sp_object_class->set = sp_filter_set; +// sp_object_class->update = sp_filter_update; +// sp_object_class->child_added = sp_filter_child_added; +// sp_object_class->remove_child = sp_filter_remove_child; } CFilter::CFilter(SPFilter* filter) : CObject(filter) { -- cgit v1.2.3 From 7df6616da5ea2debb86838366ddf746841549cdb Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sat, 30 Mar 2013 00:56:13 +0100 Subject: Renamed virtual function names. (bzr r11608.1.57) --- src/sp-filter.cpp | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) (limited to 'src/sp-filter.cpp') diff --git a/src/sp-filter.cpp b/src/sp-filter.cpp index 01328adbe..0f9d47478 100644 --- a/src/sp-filter.cpp +++ b/src/sp-filter.cpp @@ -92,7 +92,7 @@ sp_filter_init(SPFilter *filter) * 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. */ -void CFilter::onBuild(SPDocument *document, Inkscape::XML::Node *repr) { +void CFilter::build(SPDocument *document, Inkscape::XML::Node *repr) { SPFilter* object = this->spfilter; //Read values of key attributes from XML nodes into object. @@ -106,7 +106,7 @@ void CFilter::onBuild(SPDocument *document, Inkscape::XML::Node *repr) { object->readAttr( "filterRes" ); object->readAttr( "xlink:href" ); - CObject::onBuild(document, repr); + CObject::build(document, repr); //is this necessary? document->addResource("filter", object); @@ -115,7 +115,7 @@ void CFilter::onBuild(SPDocument *document, Inkscape::XML::Node *repr) { /** * Drops any allocated memory. */ -void CFilter::onRelease() { +void CFilter::release() { SPFilter* object = this->spfilter; SPFilter *filter = SP_FILTER(object); @@ -137,13 +137,13 @@ void CFilter::onRelease() { filter->modified_connection.~connection(); delete filter->_image_name; - CObject::onRelease(); + CObject::release(); } /** * Sets a specific value in the SPFilter. */ -void CFilter::onSet(unsigned int key, gchar const *value) { +void CFilter::set(unsigned int key, gchar const *value) { SPFilter* object = this->spfilter; SPFilter *filter = SP_FILTER(object); @@ -210,7 +210,7 @@ void CFilter::onSet(unsigned int key, gchar const *value) { break; default: // See if any parents need this value. - CObject::onSet(key, value); + CObject::set(key, value); break; } } @@ -218,7 +218,7 @@ void CFilter::onSet(unsigned int key, gchar const *value) { /** * Receives update notifications. */ -void CFilter::onUpdate(SPCtx *ctx, guint flags) { +void CFilter::update(SPCtx *ctx, guint flags) { //SPFilter *filter = SP_FILTER(object); if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG | @@ -228,13 +228,13 @@ void CFilter::onUpdate(SPCtx *ctx, guint flags) { } - CObject::onUpdate(ctx, flags); + CObject::update(ctx, flags); } /** * Writes its settings to an incoming repr object, if any. */ -Inkscape::XML::Node* CFilter::onWrite(Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags) { +Inkscape::XML::Node* CFilter::write(Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags) { SPFilter* object = this->spfilter; SPFilter *filter = SP_FILTER(object); @@ -321,7 +321,7 @@ Inkscape::XML::Node* CFilter::onWrite(Inkscape::XML::Document *doc, Inkscape::XM g_free(uri_string); } - CObject::onWrite(doc, repr, flags); + CObject::write(doc, repr, flags); return repr; } @@ -354,11 +354,11 @@ static void filter_ref_modified(SPObject */*href*/, guint /*flags*/, SPFilter *f /** * Callback for child_added event. */ -void CFilter::onChildAdded(Inkscape::XML::Node *child, Inkscape::XML::Node *ref) { +void CFilter::child_added(Inkscape::XML::Node *child, Inkscape::XML::Node *ref) { SPFilter* object = this->spfilter; //SPFilter *f = SP_FILTER(object); - CObject::onChildAdded(child, ref); + CObject::child_added(child, ref); object->requestModified(SP_OBJECT_MODIFIED_FLAG); } @@ -366,11 +366,11 @@ void CFilter::onChildAdded(Inkscape::XML::Node *child, Inkscape::XML::Node *ref) /** * Callback for remove_child event. */ -void CFilter::onRemoveChild(Inkscape::XML::Node *child) { +void CFilter::remove_child(Inkscape::XML::Node *child) { SPFilter* object = this->spfilter; // SPFilter *f = SP_FILTER(object); - CObject::onRemoveChild(child); + CObject::remove_child(child); object->requestModified(SP_OBJECT_MODIFIED_FLAG); } @@ -410,7 +410,7 @@ void sp_filter_build_renderer(SPFilter *sp_filter, Inkscape::Filters::Filter *nr // } else { // g_warning("Cannot build filter renderer: missing builder"); // } // CPPIFY: => FilterPrimitive should be abstract. - primitive->cfilterprimitive->onBuildRenderer(nr_filter); + primitive->cfilterprimitive->build_renderer(nr_filter); } primitive_obj = primitive_obj->next; } -- cgit v1.2.3 From a5d6e692d661f0bf7648e64e8fcb04588bb8f3ab Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Mon, 1 Apr 2013 00:07:00 +0200 Subject: Prepared exchange of casting macros. (bzr r11608.1.63) --- src/sp-filter.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/sp-filter.cpp') diff --git a/src/sp-filter.cpp b/src/sp-filter.cpp index 0f9d47478..67fdd1ed9 100644 --- a/src/sp-filter.cpp +++ b/src/sp-filter.cpp @@ -59,6 +59,7 @@ static void sp_filter_init(SPFilter *filter) { filter->cfilter = new CFilter(filter); + filter->typeHierarchy.insert(typeid(SPFilter)); delete filter->cobject; filter->cobject = filter->cfilter; -- cgit v1.2.3 From 69f3b6f1abb2bb422935d43262e1e99aab359954 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Tue, 2 Apr 2013 01:41:30 +0200 Subject: Added constructors to SP classes. (bzr r11608.1.67) --- src/sp-filter.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'src/sp-filter.cpp') diff --git a/src/sp-filter.cpp b/src/sp-filter.cpp index 67fdd1ed9..998c28865 100644 --- a/src/sp-filter.cpp +++ b/src/sp-filter.cpp @@ -41,7 +41,7 @@ using std::pair; static void filter_ref_changed(SPObject *old_ref, SPObject *ref, SPFilter *filter); static void filter_ref_modified(SPObject *href, guint flags, SPFilter *filter); -G_DEFINE_TYPE(SPFilter, sp_filter, SP_TYPE_OBJECT); +G_DEFINE_TYPE(SPFilter, sp_filter, G_TYPE_OBJECT); static void sp_filter_class_init(SPFilterClass *klass) @@ -55,9 +55,9 @@ CFilter::CFilter(SPFilter* filter) : CObject(filter) { CFilter::~CFilter() { } -static void -sp_filter_init(SPFilter *filter) -{ +SPFilter::SPFilter() : SPObject() { + SPFilter* filter = this; + filter->cfilter = new CFilter(filter); filter->typeHierarchy.insert(typeid(SPFilter)); @@ -88,6 +88,12 @@ sp_filter_init(SPFilter *filter) new (&filter->modified_connection) sigc::connection(); } +static void +sp_filter_init(SPFilter *filter) +{ + new (filter) SPFilter(); +} + /** * Reads the Inkscape::XML::Node, and initializes SPFilter variables. For this to get called, * our name must be associated with a repr via "sp_object_type_register". Best done through -- cgit v1.2.3 From d1af3566872dfff2aeec84859c87f1f8d13f79df Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Tue, 2 Apr 2013 19:14:36 +0200 Subject: Registered classes with new factory. Hkern, Vkern and FeFuncX have to be rewritten, as they aren't real classes. (bzr r11608.1.69) --- src/sp-filter.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/sp-filter.cpp') diff --git a/src/sp-filter.cpp b/src/sp-filter.cpp index 998c28865..db1887715 100644 --- a/src/sp-filter.cpp +++ b/src/sp-filter.cpp @@ -41,6 +41,16 @@ using std::pair; static void filter_ref_changed(SPObject *old_ref, SPObject *ref, SPFilter *filter); static void filter_ref_modified(SPObject *href, guint flags, SPFilter *filter); +#include "sp-factory.h" + +namespace { + SPObject* createFilter() { + return new SPFilter(); + } + + bool filterRegistered = SPFactory::instance().registerObject("svg:filter", createFilter); +} + G_DEFINE_TYPE(SPFilter, sp_filter, G_TYPE_OBJECT); static void -- cgit v1.2.3 From 7b7e0294b0c06a8d3ec19b73486a91e12cf67adf Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sat, 6 Apr 2013 22:16:05 +0200 Subject: Merged more classes. (bzr r11608.1.84) --- src/sp-filter.cpp | 89 +++++++++++++++++++++---------------------------------- 1 file changed, 34 insertions(+), 55 deletions(-) (limited to 'src/sp-filter.cpp') diff --git a/src/sp-filter.cpp b/src/sp-filter.cpp index db1887715..80dc0ecdc 100644 --- a/src/sp-filter.cpp +++ b/src/sp-filter.cpp @@ -51,66 +51,45 @@ namespace { bool filterRegistered = SPFactory::instance().registerObject("svg:filter", createFilter); } -G_DEFINE_TYPE(SPFilter, sp_filter, G_TYPE_OBJECT); +SPFilter::SPFilter() : SPObject(), CObject(this) { + delete this->cobject; + this->cobject = this; -static void -sp_filter_class_init(SPFilterClass *klass) -{ -} - -CFilter::CFilter(SPFilter* filter) : CObject(filter) { - this->spfilter = filter; -} - -CFilter::~CFilter() { -} + this->href = new SPFilterReference(this); + this->href->changedSignal().connect(sigc::bind(sigc::ptr_fun(filter_ref_changed), this)); -SPFilter::SPFilter() : SPObject() { - SPFilter* filter = this; + this->x = 0; + this->y = 0; + this->width = 0; + this->height = 0; - filter->cfilter = new CFilter(filter); - filter->typeHierarchy.insert(typeid(SPFilter)); + this->filterUnits = SP_FILTER_UNITS_OBJECTBOUNDINGBOX; + this->primitiveUnits = SP_FILTER_UNITS_USERSPACEONUSE; + this->filterUnits_set = FALSE; + this->primitiveUnits_set = FALSE; - delete filter->cobject; - filter->cobject = filter->cfilter; + this->_renderer = NULL; - filter->href = new SPFilterReference(filter); - filter->href->changedSignal().connect(sigc::bind(sigc::ptr_fun(filter_ref_changed), filter)); + this->_image_name = new std::map; + this->_image_name->clear(); + this->_image_number_next = 0; - filter->x = 0; - filter->y = 0; - filter->width = 0; - filter->height = 0; + this->filterRes = NumberOptNumber(); - filter->filterUnits = SP_FILTER_UNITS_OBJECTBOUNDINGBOX; - filter->primitiveUnits = SP_FILTER_UNITS_USERSPACEONUSE; - filter->filterUnits_set = FALSE; - filter->primitiveUnits_set = FALSE; - - filter->_renderer = NULL; - - filter->_image_name = new std::map; - filter->_image_name->clear(); - filter->_image_number_next = 0; - - filter->filterRes = NumberOptNumber(); - - new (&filter->modified_connection) sigc::connection(); + new (&this->modified_connection) sigc::connection(); } -static void -sp_filter_init(SPFilter *filter) -{ - new (filter) SPFilter(); +SPFilter::~SPFilter() { } + /** * Reads the Inkscape::XML::Node, and initializes SPFilter 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. */ -void CFilter::build(SPDocument *document, Inkscape::XML::Node *repr) { - SPFilter* object = this->spfilter; +void SPFilter::build(SPDocument *document, Inkscape::XML::Node *repr) { + SPFilter* object = this; //Read values of key attributes from XML nodes into object. object->readAttr( "style" ); // struct not derived from SPItem, we need to do this ourselves. @@ -132,8 +111,8 @@ void CFilter::build(SPDocument *document, Inkscape::XML::Node *repr) { /** * Drops any allocated memory. */ -void CFilter::release() { - SPFilter* object = this->spfilter; +void SPFilter::release() { + SPFilter* object = this; SPFilter *filter = SP_FILTER(object); if (object->document) { @@ -160,8 +139,8 @@ void CFilter::release() { /** * Sets a specific value in the SPFilter. */ -void CFilter::set(unsigned int key, gchar const *value) { - SPFilter* object = this->spfilter; +void SPFilter::set(unsigned int key, gchar const *value) { + SPFilter* object = this; SPFilter *filter = SP_FILTER(object); switch (key) { @@ -235,7 +214,7 @@ void CFilter::set(unsigned int key, gchar const *value) { /** * Receives update notifications. */ -void CFilter::update(SPCtx *ctx, guint flags) { +void SPFilter::update(SPCtx *ctx, guint flags) { //SPFilter *filter = SP_FILTER(object); if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG | @@ -251,8 +230,8 @@ void CFilter::update(SPCtx *ctx, guint flags) { /** * Writes its settings to an incoming repr object, if any. */ -Inkscape::XML::Node* CFilter::write(Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags) { - SPFilter* object = this->spfilter; +Inkscape::XML::Node* SPFilter::write(Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags) { + SPFilter* object = this; SPFilter *filter = SP_FILTER(object); // Original from sp-item-group.cpp @@ -371,8 +350,8 @@ static void filter_ref_modified(SPObject */*href*/, guint /*flags*/, SPFilter *f /** * Callback for child_added event. */ -void CFilter::child_added(Inkscape::XML::Node *child, Inkscape::XML::Node *ref) { - SPFilter* object = this->spfilter; +void SPFilter::child_added(Inkscape::XML::Node *child, Inkscape::XML::Node *ref) { + SPFilter* object = this; //SPFilter *f = SP_FILTER(object); CObject::child_added(child, ref); @@ -383,8 +362,8 @@ void CFilter::child_added(Inkscape::XML::Node *child, Inkscape::XML::Node *ref) /** * Callback for remove_child event. */ -void CFilter::remove_child(Inkscape::XML::Node *child) { - SPFilter* object = this->spfilter; +void SPFilter::remove_child(Inkscape::XML::Node *child) { + SPFilter* object = this; // SPFilter *f = SP_FILTER(object); CObject::remove_child(child); -- cgit v1.2.3 From d06e9965e2120f4bf6c79c9f94c1d90c04f9d80f Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sun, 7 Apr 2013 17:10:06 +0200 Subject: Merged FilterPrimitive and subclasses. (bzr r11608.1.85) --- src/sp-filter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/sp-filter.cpp') diff --git a/src/sp-filter.cpp b/src/sp-filter.cpp index 80dc0ecdc..1eb25f9c1 100644 --- a/src/sp-filter.cpp +++ b/src/sp-filter.cpp @@ -406,7 +406,7 @@ void sp_filter_build_renderer(SPFilter *sp_filter, Inkscape::Filters::Filter *nr // } else { // g_warning("Cannot build filter renderer: missing builder"); // } // CPPIFY: => FilterPrimitive should be abstract. - primitive->cfilterprimitive->build_renderer(nr_filter); + primitive->build_renderer(nr_filter); } primitive_obj = primitive_obj->next; } -- cgit v1.2.3 From 27e2102f96a5554bcd5310ec11435d155773b279 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Sun, 7 Apr 2013 18:28:22 +0200 Subject: Merge Object and subclasses. Merging of SP- and C-classes complete. (bzr r11608.1.86) --- src/sp-filter.cpp | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) (limited to 'src/sp-filter.cpp') diff --git a/src/sp-filter.cpp b/src/sp-filter.cpp index 1eb25f9c1..2a566efa2 100644 --- a/src/sp-filter.cpp +++ b/src/sp-filter.cpp @@ -51,10 +51,7 @@ namespace { bool filterRegistered = SPFactory::instance().registerObject("svg:filter", createFilter); } -SPFilter::SPFilter() : SPObject(), CObject(this) { - delete this->cobject; - this->cobject = this; - +SPFilter::SPFilter() : SPObject() { this->href = new SPFilterReference(this); this->href->changedSignal().connect(sigc::bind(sigc::ptr_fun(filter_ref_changed), this)); @@ -102,7 +99,7 @@ void SPFilter::build(SPDocument *document, Inkscape::XML::Node *repr) { object->readAttr( "filterRes" ); object->readAttr( "xlink:href" ); - CObject::build(document, repr); + SPObject::build(document, repr); //is this necessary? document->addResource("filter", object); @@ -133,7 +130,7 @@ void SPFilter::release() { filter->modified_connection.~connection(); delete filter->_image_name; - CObject::release(); + SPObject::release(); } /** @@ -206,7 +203,7 @@ void SPFilter::set(unsigned int key, gchar const *value) { break; default: // See if any parents need this value. - CObject::set(key, value); + SPObject::set(key, value); break; } } @@ -224,7 +221,7 @@ void SPFilter::update(SPCtx *ctx, guint flags) { } - CObject::update(ctx, flags); + SPObject::update(ctx, flags); } /** @@ -317,7 +314,7 @@ Inkscape::XML::Node* SPFilter::write(Inkscape::XML::Document *doc, Inkscape::XML g_free(uri_string); } - CObject::write(doc, repr, flags); + SPObject::write(doc, repr, flags); return repr; } @@ -354,7 +351,7 @@ void SPFilter::child_added(Inkscape::XML::Node *child, Inkscape::XML::Node *ref) SPFilter* object = this; //SPFilter *f = SP_FILTER(object); - CObject::child_added(child, ref); + SPObject::child_added(child, ref); object->requestModified(SP_OBJECT_MODIFIED_FLAG); } @@ -366,7 +363,7 @@ void SPFilter::remove_child(Inkscape::XML::Node *child) { SPFilter* object = this; // SPFilter *f = SP_FILTER(object); - CObject::remove_child(child); + SPObject::remove_child(child); object->requestModified(SP_OBJECT_MODIFIED_FLAG); } -- cgit v1.2.3 From beecbea1b415d5b9536f2309c4f30fc258e346f5 Mon Sep 17 00:00:00 2001 From: Markus Engel Date: Wed, 31 Jul 2013 22:51:23 +0200 Subject: Cleaned up a bit; fixed struct vs. class forward declarations. (bzr r11608.1.111) --- src/sp-filter.cpp | 176 ++++++++++++++++++++++++------------------------------ 1 file changed, 78 insertions(+), 98 deletions(-) (limited to 'src/sp-filter.cpp') diff --git a/src/sp-filter.cpp b/src/sp-filter.cpp index 2a566efa2..91389bf7d 100644 --- a/src/sp-filter.cpp +++ b/src/sp-filter.cpp @@ -51,7 +51,12 @@ namespace { bool filterRegistered = SPFactory::instance().registerObject("svg:filter", createFilter); } -SPFilter::SPFilter() : SPObject() { +SPFilter::SPFilter() + : SPObject(), filterUnits(SP_FILTER_UNITS_OBJECTBOUNDINGBOX), filterUnits_set(FALSE), + primitiveUnits(SP_FILTER_UNITS_USERSPACEONUSE), primitiveUnits_set(FALSE), + filterRes(NumberOptNumber()), + _renderer(NULL), _image_name(new std::map), _image_number_next(0) +{ this->href = new SPFilterReference(this); this->href->changedSignal().connect(sigc::bind(sigc::ptr_fun(filter_ref_changed), this)); @@ -60,20 +65,7 @@ SPFilter::SPFilter() : SPObject() { this->width = 0; this->height = 0; - this->filterUnits = SP_FILTER_UNITS_OBJECTBOUNDINGBOX; - this->primitiveUnits = SP_FILTER_UNITS_USERSPACEONUSE; - this->filterUnits_set = FALSE; - this->primitiveUnits_set = FALSE; - - this->_renderer = NULL; - - this->_image_name = new std::map; this->_image_name->clear(); - this->_image_number_next = 0; - - this->filterRes = NumberOptNumber(); - - new (&this->modified_connection) sigc::connection(); } SPFilter::~SPFilter() { @@ -86,49 +78,43 @@ SPFilter::~SPFilter() { * sp-object-repr.cpp's repr_name_entries array. */ void SPFilter::build(SPDocument *document, Inkscape::XML::Node *repr) { - SPFilter* object = this; - //Read values of key attributes from XML nodes into object. - object->readAttr( "style" ); // struct not derived from SPItem, we need to do this ourselves. - object->readAttr( "filterUnits" ); - object->readAttr( "primitiveUnits" ); - object->readAttr( "x" ); - object->readAttr( "y" ); - object->readAttr( "width" ); - object->readAttr( "height" ); - object->readAttr( "filterRes" ); - object->readAttr( "xlink:href" ); + this->readAttr( "style" ); // struct not derived from SPItem, we need to do this ourselves. + this->readAttr( "filterUnits" ); + this->readAttr( "primitiveUnits" ); + this->readAttr( "x" ); + this->readAttr( "y" ); + this->readAttr( "width" ); + this->readAttr( "height" ); + this->readAttr( "filterRes" ); + this->readAttr( "xlink:href" ); SPObject::build(document, repr); //is this necessary? - document->addResource("filter", object); + document->addResource("filter", this); } /** * Drops any allocated memory. */ void SPFilter::release() { - SPFilter* object = this; - SPFilter *filter = SP_FILTER(object); - - if (object->document) { + if (this->document) { // Unregister ourselves - object->document->removeResource("filter", object); + this->document->removeResource("filter", this); } //TODO: release resources here //release href - if (filter->href) { - filter->modified_connection.disconnect(); - filter->href->detach(); - delete filter->href; - filter->href = NULL; + if (this->href) { + this->modified_connection.disconnect(); + this->href->detach(); + delete this->href; + this->href = NULL; } - filter->modified_connection.~connection(); - delete filter->_image_name; + delete this->_image_name; SPObject::release(); } @@ -137,68 +123,69 @@ void SPFilter::release() { * Sets a specific value in the SPFilter. */ void SPFilter::set(unsigned int key, gchar const *value) { - SPFilter* object = this; - SPFilter *filter = SP_FILTER(object); - switch (key) { case SP_ATTR_FILTERUNITS: if (value) { if (!strcmp(value, "userSpaceOnUse")) { - filter->filterUnits = SP_FILTER_UNITS_USERSPACEONUSE; + this->filterUnits = SP_FILTER_UNITS_USERSPACEONUSE; } else { - filter->filterUnits = SP_FILTER_UNITS_OBJECTBOUNDINGBOX; + this->filterUnits = SP_FILTER_UNITS_OBJECTBOUNDINGBOX; } - filter->filterUnits_set = TRUE; + + this->filterUnits_set = TRUE; } else { - filter->filterUnits = SP_FILTER_UNITS_OBJECTBOUNDINGBOX; - filter->filterUnits_set = FALSE; + this->filterUnits = SP_FILTER_UNITS_OBJECTBOUNDINGBOX; + this->filterUnits_set = FALSE; } - object->requestModified(SP_OBJECT_MODIFIED_FLAG); + + this->requestModified(SP_OBJECT_MODIFIED_FLAG); break; case SP_ATTR_PRIMITIVEUNITS: if (value) { if (!strcmp(value, "objectBoundingBox")) { - filter->primitiveUnits = SP_FILTER_UNITS_OBJECTBOUNDINGBOX; + this->primitiveUnits = SP_FILTER_UNITS_OBJECTBOUNDINGBOX; } else { - filter->primitiveUnits = SP_FILTER_UNITS_USERSPACEONUSE; + this->primitiveUnits = SP_FILTER_UNITS_USERSPACEONUSE; } - filter->primitiveUnits_set = TRUE; + + this->primitiveUnits_set = TRUE; } else { - filter->primitiveUnits = SP_FILTER_UNITS_USERSPACEONUSE; - filter->primitiveUnits_set = FALSE; + this->primitiveUnits = SP_FILTER_UNITS_USERSPACEONUSE; + this->primitiveUnits_set = FALSE; } - object->requestModified(SP_OBJECT_MODIFIED_FLAG); + + this->requestModified(SP_OBJECT_MODIFIED_FLAG); break; case SP_ATTR_X: - filter->x.readOrUnset(value); - object->requestModified(SP_OBJECT_MODIFIED_FLAG); + this->x.readOrUnset(value); + this->requestModified(SP_OBJECT_MODIFIED_FLAG); break; case SP_ATTR_Y: - filter->y.readOrUnset(value); - object->requestModified(SP_OBJECT_MODIFIED_FLAG); + this->y.readOrUnset(value); + this->requestModified(SP_OBJECT_MODIFIED_FLAG); break; case SP_ATTR_WIDTH: - filter->width.readOrUnset(value); - object->requestModified(SP_OBJECT_MODIFIED_FLAG); + this->width.readOrUnset(value); + this->requestModified(SP_OBJECT_MODIFIED_FLAG); break; case SP_ATTR_HEIGHT: - filter->height.readOrUnset(value); - object->requestModified(SP_OBJECT_MODIFIED_FLAG); + this->height.readOrUnset(value); + this->requestModified(SP_OBJECT_MODIFIED_FLAG); break; case SP_ATTR_FILTERRES: - filter->filterRes.set(value); - object->requestModified(SP_OBJECT_MODIFIED_FLAG); + this->filterRes.set(value); + this->requestModified(SP_OBJECT_MODIFIED_FLAG); break; case SP_ATTR_XLINK_HREF: if (value) { try { - filter->href->attach(Inkscape::URI(value)); + this->href->attach(Inkscape::URI(value)); } catch (Inkscape::BadURIException &e) { g_warning("%s", e.what()); - filter->href->detach(); + this->href->detach(); } } else { - filter->href->detach(); + this->href->detach(); } break; default: @@ -212,8 +199,6 @@ void SPFilter::set(unsigned int key, gchar const *value) { * Receives update notifications. */ void SPFilter::update(SPCtx *ctx, guint flags) { - //SPFilter *filter = SP_FILTER(object); - if (flags & (SP_OBJECT_MODIFIED_FLAG | SP_OBJECT_STYLE_MODIFIED_FLAG | SP_OBJECT_VIEWPORT_MODIFIED_FLAG)) { @@ -228,34 +213,34 @@ void SPFilter::update(SPCtx *ctx, guint flags) { * Writes its settings to an incoming repr object, if any. */ Inkscape::XML::Node* SPFilter::write(Inkscape::XML::Document *doc, Inkscape::XML::Node *repr, guint flags) { - SPFilter* object = this; - SPFilter *filter = SP_FILTER(object); - // Original from sp-item-group.cpp if (flags & SP_OBJECT_WRITE_BUILD) { if (!repr) { - repr = doc->createElement("svg:filter"); + repr = doc->createElement("svg:this"); } + GSList *l = NULL; - for ( SPObject *child = object->firstChild(); child; child = child->getNext() ) { + for ( SPObject *child = this->firstChild(); child; child = child->getNext() ) { Inkscape::XML::Node *crepr = child->updateRepr(doc, NULL, flags); + if (crepr) { l = g_slist_prepend (l, crepr); } } + while (l) { repr->addChild((Inkscape::XML::Node *) l->data, NULL); Inkscape::GC::release((Inkscape::XML::Node *) l->data); l = g_slist_remove (l, l->data); } } else { - for ( SPObject *child = object->firstChild() ; child; child = child->getNext() ) { + for ( SPObject *child = this->firstChild() ; child; child = child->getNext() ) { child->updateRepr(flags); } } - if ((flags & SP_OBJECT_WRITE_ALL) || filter->filterUnits_set) { - switch (filter->filterUnits) { + if ((flags & SP_OBJECT_WRITE_ALL) || this->filterUnits_set) { + switch (this->filterUnits) { case SP_FILTER_UNITS_USERSPACEONUSE: repr->setAttribute("filterUnits", "userSpaceOnUse"); break; @@ -265,8 +250,8 @@ Inkscape::XML::Node* SPFilter::write(Inkscape::XML::Document *doc, Inkscape::XML } } - if ((flags & SP_OBJECT_WRITE_ALL) || filter->primitiveUnits_set) { - switch (filter->primitiveUnits) { + if ((flags & SP_OBJECT_WRITE_ALL) || this->primitiveUnits_set) { + switch (this->primitiveUnits) { case SP_FILTER_UNITS_OBJECTBOUNDINGBOX: repr->setAttribute("primitiveUnits", "objectBoundingBox"); break; @@ -276,40 +261,40 @@ Inkscape::XML::Node* SPFilter::write(Inkscape::XML::Document *doc, Inkscape::XML } } - if (filter->x._set) { - sp_repr_set_svg_double(repr, "x", filter->x.computed); + if (this->x._set) { + sp_repr_set_svg_double(repr, "x", this->x.computed); } else { repr->setAttribute("x", NULL); } - if (filter->y._set) { - sp_repr_set_svg_double(repr, "y", filter->y.computed); + if (this->y._set) { + sp_repr_set_svg_double(repr, "y", this->y.computed); } else { repr->setAttribute("y", NULL); } - if (filter->width._set) { - sp_repr_set_svg_double(repr, "width", filter->width.computed); + if (this->width._set) { + sp_repr_set_svg_double(repr, "width", this->width.computed); } else { repr->setAttribute("width", NULL); } - if (filter->height._set) { - sp_repr_set_svg_double(repr, "height", filter->height.computed); + if (this->height._set) { + sp_repr_set_svg_double(repr, "height", this->height.computed); } else { repr->setAttribute("height", NULL); } - if (filter->filterRes.getNumber()>=0) { - gchar *tmp = filter->filterRes.getValueString(); + if (this->filterRes.getNumber()>=0) { + gchar *tmp = this->filterRes.getValueString(); repr->setAttribute("filterRes", tmp); g_free(tmp); } else { repr->setAttribute("filterRes", NULL); } - if (filter->href->getURI()) { - gchar *uri_string = filter->href->getURI()->toString(); + if (this->href->getURI()) { + gchar *uri_string = this->href->getURI()->toString(); repr->setAttribute("xlink:href", uri_string); g_free(uri_string); } @@ -329,6 +314,7 @@ filter_ref_changed(SPObject *old_ref, SPObject *ref, SPFilter *filter) if (old_ref) { filter->modified_connection.disconnect(); } + if ( SP_IS_FILTER(ref) && ref != filter ) { @@ -348,24 +334,18 @@ static void filter_ref_modified(SPObject */*href*/, guint /*flags*/, SPFilter *f * Callback for child_added event. */ void SPFilter::child_added(Inkscape::XML::Node *child, Inkscape::XML::Node *ref) { - SPFilter* object = this; - //SPFilter *f = SP_FILTER(object); - SPObject::child_added(child, ref); - object->requestModified(SP_OBJECT_MODIFIED_FLAG); + this->requestModified(SP_OBJECT_MODIFIED_FLAG); } /** * Callback for remove_child event. */ void SPFilter::remove_child(Inkscape::XML::Node *child) { - SPFilter* object = this; - // SPFilter *f = SP_FILTER(object); - SPObject::remove_child(child); - object->requestModified(SP_OBJECT_MODIFIED_FLAG); + this->requestModified(SP_OBJECT_MODIFIED_FLAG); } void sp_filter_build_renderer(SPFilter *sp_filter, Inkscape::Filters::Filter *nr_filter) -- cgit v1.2.3