diff --git a/src/map/encmap.cpp b/src/map/encmap.cpp index 6372f819..8bfa5403 100644 --- a/src/map/encmap.cpp +++ b/src/map/encmap.cpp @@ -30,6 +30,7 @@ void ENCMap::load() void ENCMap::unload() { + cancelJobs(true); _data.clear(); } @@ -56,7 +57,7 @@ int ENCMap::zoomFit(const QSize &size, const RectC &rect) int ENCMap::zoomIn() { - cancelJobs(); + cancelJobs(false); _zoom = qMin(_zoom + 1, ZOOMS.max()); updateTransform(); @@ -65,7 +66,7 @@ int ENCMap::zoomIn() int ENCMap::zoomOut() { - cancelJobs(); + cancelJobs(false); _zoom = qMax(_zoom - 1, ZOOMS.min()); updateTransform(); @@ -141,10 +142,10 @@ void ENCMap::jobFinished(ENCMapJob *job) emit tilesLoaded(); } -void ENCMap::cancelJobs() +void ENCMap::cancelJobs(bool wait) { for (int i = 0; i < _jobs.size(); i++) - _jobs.at(i)->cancel(); + _jobs.at(i)->cancel(wait); } QString ENCMap::key(int zoom, const QPoint &xy) const diff --git a/src/map/encmap.h b/src/map/encmap.h index 3341477e..ddea3d41 100644 --- a/src/map/encmap.h +++ b/src/map/encmap.h @@ -23,7 +23,12 @@ public: _future = QtConcurrent::map(_tiles, &ENC::RasterTile::render); _watcher.setFuture(_future); } - void cancel() {_future.cancel();} + void cancel(bool wait) + { + _future.cancel(); + if (wait) + _future.waitForFinished(); + } const QList &tiles() const {return _tiles;} signals: @@ -82,7 +87,7 @@ private: bool isRunning(int zoom, const QPoint &xy) const; void runJob(ENCMapJob *job); void removeJob(ENCMapJob *job); - void cancelJobs(); + void cancelJobs(bool wait); QString key(int zoom, const QPoint &xy) const; ENC::MapData _data;