Implement a cache for the scaled images

No point in scaling them every time the user looks at the dive. Over time
this may waste some memory (especially if people have a ton of pictures
and let the process run a very long time). For now I won't worry about
that.

Fixes #577

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2014-07-01 09:02:10 -07:00
parent 2af7aefd73
commit 6548773ad6

View file

@ -2,6 +2,7 @@
#include <dive.h>
#include <QtConcurrentMap>
#include <QDir>
#include <QHash>
DivePictureModel *DivePictureModel::instance()
{
@ -18,10 +19,16 @@ typedef QList<SPixmap> SPixmapList;
SPixmap scaleImages(const QString &s)
{
QImage p = QImage(s).scaled(128, 128, Qt::KeepAspectRatio);
static QHash <QString, QImage > cache;
SPixmap ret;
ret.first = s;
ret.second = p;
if (cache.contains(s)) {
ret.second = cache.value(s);
} else {
QImage p = QImage(s).scaled(128, 128, Qt::KeepAspectRatio);
cache.insert(s, p);
ret.second = p;
}
return ret;
}