diff options
| author | Tavmjong Bah <tavmjong@free.fr> | 2014-03-01 09:19:51 +0000 |
|---|---|---|
| committer | tavmjong-free <tavmjong@free.fr> | 2014-03-01 09:19:51 +0000 |
| commit | c986b61b956280bfd0b24c1dddf758216e6940f8 (patch) | |
| tree | 29e4674c3858c7a8964dceb294bb34bb68ff5a9d /src/sp-filter.cpp | |
| parent | Code cleanup and indentation. (diff) | |
| download | inkscape-c986b61b956280bfd0b24c1dddf758216e6940f8.tar.gz inkscape-c986b61b956280bfd0b24c1dddf758216e6940f8.zip | |
Use viewport when calculating filter primitive region when 'primitiveUnits' set to "userSpaceOnUse".
(bzr r13083)
Diffstat (limited to 'src/sp-filter.cpp')
| -rw-r--r-- | src/sp-filter.cpp | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/sp-filter.cpp b/src/sp-filter.cpp index 0e3d2d5ce..e8319baca 100644 --- a/src/sp-filter.cpp +++ b/src/sp-filter.cpp @@ -213,7 +213,6 @@ void SPFilter::update(SPCtx *ctx, guint flags) { // Note: This only works for root viewport since this routine is not called after // setting a new viewport. A true fix requires a strategy like SPItemView or SPMarkerView. if(this->filterUnits == SP_FILTER_UNITS_USERSPACEONUSE) { - std::cout << " userSpaceOnUse" << std::endl; if (this->x.unit == SVGLength::PERCENT) { this->x._set = true; this->x.computed = this->x.value * ictx->viewport.width(); @@ -238,6 +237,25 @@ void SPFilter::update(SPCtx *ctx, guint flags) { } + // Update filter primitives in order to update filter primitive area + // (SPObject::ActionUpdate is not actually used) + unsigned childflags = flags; + + if (flags & SP_OBJECT_MODIFIED_FLAG) { + childflags |= SP_OBJECT_PARENT_MODIFIED_FLAG; + } + childflags &= SP_OBJECT_MODIFIED_CASCADE; + + GSList *l = g_slist_reverse(this->childList(true, SPObject::ActionUpdate)); + while (l) { + SPObject *child = SP_OBJECT (l->data); + l = g_slist_remove (l, child); + if( SP_IS_FILTER_PRIMITIVE( child ) ) { + child->updateDisplay(ctx, childflags); + } + sp_object_unref(child); + } + SPObject::update(ctx, flags); } |
