From 969361993806dbe679d1065d5a869fbb74163e8e Mon Sep 17 00:00:00 2001 From: Jabier Arraiza Date: Tue, 19 Nov 2019 05:23:04 +0000 Subject: Speedup filtering and panning --- src/display/drawing-surface.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src/display/drawing-surface.cpp') 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); -- cgit v1.2.3