diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2019-02-02 21:23:52 +0100 |
---|---|---|
committer | Robert C. Helling <helling@atdotde.de> | 2019-02-07 16:06:43 +0100 |
commit | 8a8063c1cd7b8e5eae861a8d7eeb89e7e3251e03 (patch) | |
tree | 261d1a78d4c21378e08380def3775823b82fe079 /core | |
parent | 07b0df215f5562657a3a2c9dd20a95d489e8dcd3 (diff) | |
download | subsurface-8a8063c1cd7b8e5eae861a8d7eeb89e7e3251e03.tar.gz |
Profile: add "synchronous" mode for picture plotting
The thumbnails were fetched in the background to achieve a
snappier UI. The problem with that is that on LaTeX etc.
export only placeholder thumbnails were shown.
Therefore, implement a synchronous mode. This only tries
to fetch cached thumbnails or calculate thumbnails for
images. Videos and remote files are not supported.
Fixes #1963
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'core')
-rw-r--r-- | core/imagedownloader.cpp | 17 | ||||
-rw-r--r-- | core/imagedownloader.h | 10 |
2 files changed, 23 insertions, 4 deletions
diff --git a/core/imagedownloader.cpp b/core/imagedownloader.cpp index d78409a3c..1559b129b 100644 --- a/core/imagedownloader.cpp +++ b/core/imagedownloader.cpp @@ -456,8 +456,23 @@ void Thumbnailer::imageDownloadFailed(QString filename) workingOn.remove(filename); } -QImage Thumbnailer::fetchThumbnail(const QString &filename) +QImage Thumbnailer::fetchThumbnail(const QString &filename, bool synchronous) { + if (synchronous) { + // In synchronous mode, first try the thumbnail cache. + Thumbnail thumbnail = getThumbnailFromCache(filename); + if (!thumbnail.img.isNull()) + return thumbnail.img; + + // If that didn't work, try to thumbnail the image. + thumbnail = getHashedImage(filename, false); + if (thumbnail.type == MEDIATYPE_STILL_LOADING || thumbnail.img.isNull()) + return failImage; // No support for delayed thumbnails (web). + + int size = maxThumbnailSize(); + return thumbnail.img.scaled(size, size, Qt::KeepAspectRatio); + } + QMutexLocker l(&lock); // We are not currently fetching this thumbnail - add it to the list. diff --git a/core/imagedownloader.h b/core/imagedownloader.h index e0d70f59f..280383250 100644 --- a/core/imagedownloader.h +++ b/core/imagedownloader.h @@ -31,9 +31,13 @@ public: static Thumbnailer *instance(); // Schedule a thumbnail for fetching or calculation. - // Returns a placeholder thumbnail. The actual thumbnail will be sent - // via a signal later. - QImage fetchThumbnail(const QString &filename); + // If synchronous is false, returns a placeholder thumbnail. + // The actual thumbnail will be sent via a signal later. + // If synchronous is true, try to fetch the actual thumbnail. + // In this mode only precalculated thumbnails or thumbnails + // from pictures are returned. Video extraction and remote + // images are not supported. + QImage fetchThumbnail(const QString &filename, bool synchronous); // Schedule multiple thumbnails for forced recalculation void calculateThumbnails(const QVector<QString> &filenames); |