Dive pictures: Move thumbnail-size to Thumbnailer class

The size of the to-be-created thumbnails was passed from DivePictureModel
to Thumbnailer. This became more and more bothersome, because the size
had to be stored with the request. Calling from Thumbnailer into
DivePictureModel was not an option, since this is not linked to all tests.
Therefore, move these functions to the Thumbnailer class.

Since the maximum thumbnail size is now known to the thumbnailer, the
dummy and failure images can be precalculated, which makes switching
between dives faster.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2018-03-11 10:19:08 +01:00 committed by Dirk Hohndel
parent afe20ce029
commit b450c155fd
4 changed files with 43 additions and 23 deletions

View file

@ -8,8 +8,6 @@
#include <QFileInfo>
static const int maxZoom = 3; // Maximum zoom: thrice of standard size
DivePictureModel *DivePictureModel::instance()
{
static DivePictureModel *self = new DivePictureModel();
@ -19,7 +17,7 @@ DivePictureModel *DivePictureModel::instance()
DivePictureModel::DivePictureModel() : rowDDStart(0),
rowDDEnd(0),
zoomLevel(0.0),
defaultSize(defaultIconMetrics().sz_pic)
defaultSize(Thumbnailer::defaultThumbnailSize())
{
connect(Thumbnailer::instance(), &Thumbnailer::thumbnailChanged,
this, &DivePictureModel::updateThumbnail, Qt::QueuedConnection);
@ -47,22 +45,14 @@ void DivePictureModel::setZoomLevel(int level)
void DivePictureModel::updateZoom()
{
// Calculate size of thumbnails. The standard size is defaultIconMetrics().sz_pic.
// We use exponential scaling so that the central point is the standard
// size and the minimum and maximum extreme points are a third respectively
// three times the standard size.
// Naturally, these three zoom levels are then represented by
// -1.0 (minimum), 0 (standard) and 1.0 (maximum). The actual size is
// calculated as standard_size*3.0^zoomLevel.
size = static_cast<int>(round(defaultSize * pow(maxZoom, zoomLevel)));
size = Thumbnailer::thumbnailSize(zoomLevel);
}
void DivePictureModel::updateThumbnails()
{
int maxSize = defaultSize * maxZoom;
updateZoom();
for (PictureEntry &entry: pictures)
entry.image = Thumbnailer::instance()->fetchThumbnail(entry, maxSize);
entry.image = Thumbnailer::instance()->fetchThumbnail(entry);
}
void DivePictureModel::updateDivePictures()