diff options
| author | Jabier Arraiza <jabier.arraiza@marker.es> | 2019-11-19 05:23:04 +0000 |
|---|---|---|
| committer | Jabier Arraiza <jabier.arraiza@marker.es> | 2019-11-19 05:23:04 +0000 |
| commit | 969361993806dbe679d1065d5a869fbb74163e8e (patch) | |
| tree | 96d9ad847f6f5236719f06a9964d7f4fca1b72dc /src/display/drawing-surface.cpp | |
| parent | Multiple fixes for the objects panel (diff) | |
| download | inkscape-969361993806dbe679d1065d5a869fbb74163e8e.tar.gz inkscape-969361993806dbe679d1065d5a869fbb74163e8e.zip | |
Speedup filtering and panning
Diffstat (limited to 'src/display/drawing-surface.cpp')
| -rw-r--r-- | src/display/drawing-surface.cpp | 7 |
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); |
