summaryrefslogtreecommitdiffstats
path: root/src/display/drawing-surface.cpp
diff options
context:
space:
mode:
authorJabier Arraiza <jabier.arraiza@marker.es>2019-11-19 05:23:04 +0000
committerJabier Arraiza <jabier.arraiza@marker.es>2019-11-19 05:23:04 +0000
commit969361993806dbe679d1065d5a869fbb74163e8e (patch)
tree96d9ad847f6f5236719f06a9964d7f4fca1b72dc /src/display/drawing-surface.cpp
parentMultiple fixes for the objects panel (diff)
downloadinkscape-969361993806dbe679d1065d5a869fbb74163e8e.tar.gz
inkscape-969361993806dbe679d1065d5a869fbb74163e8e.zip
Speedup filtering and panning
Diffstat (limited to '')
-rw-r--r--src/display/drawing-surface.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/display/drawing-surface.cpp b/src/display/drawing-surface.cpp
index 24fc525b1..c84e358f8 100644
--- a/src/display/drawing-surface.cpp
+++ b/src/display/drawing-surface.cpp
@@ -297,8 +297,7 @@ DrawingCache::prepare()
* Paints the clean area from cache and modifies the @a area
* parameter to the bounds of the region that must be repainted.
*/
-void
-DrawingCache::paintFromCache(DrawingContext &dc, Geom::OptIntRect &area)
+void DrawingCache::paintFromCache(DrawingContext &dc, Geom::OptIntRect &area, bool is_filter)
{
if (!area) return;
@@ -312,12 +311,16 @@ DrawingCache::paintFromCache(DrawingContext &dc, Geom::OptIntRect &area)
cairo_region_t *cache_region = cairo_region_copy(dirty_region);
cairo_region_subtract(dirty_region, _clean_region);
+ if (is_filter && !cairo_region_is_empty(dirty_region)) { // To allow fast panning on high zoom on filters
+ return;
+ }
if (cairo_region_is_empty(dirty_region)) {
area = Geom::OptIntRect();
} else {
cairo_rectangle_int_t to_repaint;
cairo_region_get_extents(dirty_region, &to_repaint);
area = _convertRect(to_repaint);
+ markDirty(*area);
cairo_region_subtract_rectangle(cache_region, &to_repaint);
}
cairo_region_destroy(dirty_region);