diff options
| author | Felipe Corr??a da Silva Sanches <juca@members.fsf.org> | 2008-02-25 16:50:06 +0000 |
|---|---|---|
| committer | jucablues <jucablues@users.sourceforge.net> | 2008-02-25 16:50:06 +0000 |
| commit | 86af613c3292dbc7fc513b3d311b418c8a179253 (patch) | |
| tree | 34cec1a22f0e86d6fc93e314ca2f7c67a2f78561 /src | |
| parent | fix converting 3d boxes to path and ungrouping - do not lose selection, prese... (diff) | |
| download | inkscape-86af613c3292dbc7fc513b3d311b418c8a179253.tar.gz inkscape-86af613c3292dbc7fc513b3d311b418c8a179253.zip | |
fix for bug #195314: feImage filter not updating filtered region when
referenced object changes
(bzr r4850)
Diffstat (limited to 'src')
| -rw-r--r-- | src/sp-feimage.cpp | 20 | ||||
| -rw-r--r-- | src/sp-feimage.h | 3 |
2 files changed, 16 insertions, 7 deletions
diff --git a/src/sp-feimage.cpp b/src/sp-feimage.cpp index d72435f2c..2628d397c 100644 --- a/src/sp-feimage.cpp +++ b/src/sp-feimage.cpp @@ -118,11 +118,20 @@ sp_feImage_build(SPObject *object, SPDocument *document, Inkscape::XML::Node *re static void sp_feImage_release(SPObject *object) { + SPFeImage *feImage = SP_FEIMAGE(object); + feImage->_modified_connection.disconnect(); + if (feImage->SVGElemRef) delete feImage->SVGElemRef; if (((SPObjectClass *) feImage_parent_class)->release) ((SPObjectClass *) feImage_parent_class)->release(object); } +static void +sp_feImage_elem_modified(SPObject* /*href*/, guint /*flags*/, SPObject* obj) +{ + obj->parent->requestModified(SP_OBJECT_MODIFIED_FLAG); +} + /** * Sets a specific value in the SPFeImage. */ @@ -132,7 +141,6 @@ sp_feImage_set(SPObject *object, unsigned int key, gchar const *value) SPFeImage *feImage = SP_FEIMAGE(object); (void)feImage; Inkscape::URI* SVGElem_uri; - Inkscape::URIReference* SVGElemRef; switch(key) { /*DEAL WITH SETTING ATTRIBUTES HERE*/ case SP_ATTR_XLINK_HREF: @@ -141,15 +149,13 @@ sp_feImage_set(SPObject *object, unsigned int key, gchar const *value) if (!feImage->href) return; try{ SVGElem_uri = new Inkscape::URI(feImage->href); - SVGElemRef = new Inkscape::URIReference(feImage->document); + feImage->SVGElemRef = new Inkscape::URIReference(feImage->document); feImage->from_element = true; - SVGElemRef->attach(*SVGElem_uri); - feImage->SVGElem = SP_ITEM(SVGElemRef->getObject()); + feImage->SVGElemRef->attach(*SVGElem_uri); + feImage->SVGElem = SP_ITEM(feImage->SVGElemRef->getObject()); g_free(SVGElem_uri); - g_free(SVGElemRef); - //TODO: maybe keeping SVGElemRef we can observe changes to the - // referenced object and trigger updates of the filtered object + feImage->_modified_connection = ((SPObject*) feImage->SVGElem)->connectModified(sigc::bind(sigc::ptr_fun(&sp_feImage_elem_modified), object)); object->requestModified(SP_OBJECT_MODIFIED_FLAG); break; } diff --git a/src/sp-feimage.h b/src/sp-feimage.h index d66a4fb77..dc432a672 100644 --- a/src/sp-feimage.h +++ b/src/sp-feimage.h @@ -18,6 +18,7 @@ #include "sp-feimage-fns.h" #include "svg/svg-length.h" #include "sp-item.h" +#include "uri-references.h" /* FeImage base class */ class SPFeImageClass; @@ -29,6 +30,8 @@ struct SPFeImage : public SPFilterPrimitive { SPDocument *document; bool from_element; SPItem* SVGElem; + Inkscape::URIReference* SVGElemRef; + sigc::connection _modified_connection; }; struct SPFeImageClass { |
