diff --git a/src/display/drawing-item.cpp b/src/display/drawing-item.cpp index 111fa15b357498e0f2cd8c2664793180eea43a35..08b9b5163271c690acdff93ba9b8bbc998ca8765 100644 --- a/src/display/drawing-item.cpp +++ b/src/display/drawing-item.cpp @@ -876,7 +876,7 @@ DrawingItem::render(DrawingContext &dc, Geom::IntRect const &area, unsigned flag cachect.setOperator(CAIRO_OPERATOR_SOURCE); cachect.setSource(&intermediate); cachect.fill(); - Geom::OptIntRect cl = _cacheRect(true); + Geom::OptIntRect cl = _cacheRect(); if (_filter && render_filters && cl) { _cache->markClean(*cl); } else { @@ -1185,29 +1185,23 @@ inline void expandByScale(Geom::IntRect &rect, double scale) } -Geom::OptIntRect DrawingItem::_cacheRect(bool cropped) +Geom::OptIntRect DrawingItem::_cacheRect() { Geom::OptIntRect r = _drawbox & _drawing.cacheLimit(); - if (_filter && _drawing.renderFilters() && r && r != _drawbox) { + if (_filter && _drawing.cacheLimit() && _drawing.renderFilters() && r && r != _drawbox) { // we check unfiltered item is emought inside the cache area to render properly Geom::OptIntRect canvas = r; expandByScale(*canvas, 0.5); Geom::OptIntRect valid = Geom::intersect(canvas, _bbox); if (!valid) { - expandByScale(*r, 2); valid = _bbox; // contract the item _bbox to get reduced size to render. $ seems good enought expandByScale(*valid, 0.5); // now we get the nearest point to cache area - Geom::IntPoint center = (*r).midpoint(); + Geom::IntPoint center = (*_drawing.cacheLimit()).midpoint(); Geom::IntPoint nearest = (*valid).nearestEdgePoint(center); r.expandTo(nearest); } - valid = _drawbox & r; - // to reduce banding if item filtered overflow iarea area - if (cropped && r && _drawbox != valid) { - expandByScale(*r, 5. / 6.); - } return _drawbox & r; } return r; diff --git a/src/display/drawing-item.h b/src/display/drawing-item.h index 08dbaadca100bcf26e76788843f4e7f0c4a9ad33..1cd677bd2827d55c183b4c93ff3cc4fe2deaa983 100644 --- a/src/display/drawing-item.h +++ b/src/display/drawing-item.h @@ -164,7 +164,7 @@ protected: void _markForRendering(); void _invalidateFilterBackground(Geom::IntRect const &area); double _cacheScore(); - Geom::OptIntRect _cacheRect(bool cropped = false); + Geom::OptIntRect _cacheRect(); virtual unsigned _updateItem(Geom::IntRect const &/*area*/, UpdateContext const &/*ctx*/, unsigned /*flags*/, unsigned /*reset*/) { return 0; } virtual unsigned _renderItem(DrawingContext &/*dc*/, Geom::IntRect const &/*area*/, unsigned /*flags*/,