diff options
| author | Krzysztof Kosi??ski <tweenk.pl@gmail.com> | 2013-10-01 13:25:44 +0000 |
|---|---|---|
| committer | Krzysztof KosiĆski <tweenk.pl@gmail.com> | 2013-10-01 13:25:44 +0000 |
| commit | 87d93e27330577c2fd632dbaccbd3103884aa590 (patch) | |
| tree | 2acaa8e8ab51a4dbaef40bd22bd780bdaceae0db /src/display/drawing-item.cpp | |
| parent | Fix possible bug in DrawingItem code (diff) | |
| download | inkscape-87d93e27330577c2fd632dbaccbd3103884aa590.tar.gz inkscape-87d93e27330577c2fd632dbaccbd3103884aa590.zip | |
Comprehensive fix for the issues with disappearing filtered objects.
Fixes #304407 and possibly a few other bugs.
Revert incorrect _item_bbox changes from r12528.
Fixed bugs:
- https://launchpad.net/bugs/304407
(bzr r12648)
Diffstat (limited to 'src/display/drawing-item.cpp')
| -rw-r--r-- | src/display/drawing-item.cpp | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/src/display/drawing-item.cpp b/src/display/drawing-item.cpp index b2b3e68a2..71a7f8906 100644 --- a/src/display/drawing-item.cpp +++ b/src/display/drawing-item.cpp @@ -290,17 +290,10 @@ DrawingItem::setZOrder(unsigned z) _markForRendering(); } -void DrawingItem::setItemBounds(Geom::OptRect const &bounds) -{ - if (!bounds) return; - Geom::IntRect copy = bounds->roundOutwards(); - if (_filter) _filter->area_enlarge(copy, this); - this->setFilterBounds(copy); -} - -void DrawingItem::setFilterBounds(Geom::OptRect const &bounds) +void +DrawingItem::setItemBounds(Geom::OptRect const &bounds) { - if (bounds) _filter_bbox = bounds; + _item_bbox = bounds; } /** @@ -368,10 +361,14 @@ DrawingItem::update(Geom::IntRect const &area, UpdateContext const &ctx, unsigne if (to_update & STATE_BBOX) { // compute drawbox - if (_filter && render_filters && _filter_bbox) { - Geom::OptRect enlarged = _filter_bbox; - *enlarged *= ctm(); - _drawbox = enlarged->roundOutwards(); + if (_filter && render_filters) { + Geom::OptRect enlarged = _filter->filter_effect_area(_item_bbox); + if (enlarged) { + *enlarged *= ctm(); + _drawbox = enlarged->roundOutwards(); + } else { + _drawbox = Geom::OptIntRect(); + } } else { _drawbox = _bbox; } |
