OSDN Git Service

ファイル読込を別スレッド化
[gefu/Gefu.git] / thumbnailworker.cpp
1 #include "thumbnailworker.h"
2
3 #include <QDebug>
4 #include <QTimer>
5 #include <QThread>
6
7 ThumbnailWorker::ThumbnailWorker() :
8     AbstractWorker(),
9     m_pathList()
10 {
11 }
12
13 void ThumbnailWorker::addPath(const QString &path)
14 {
15     qDebug() << "ThumbnailWorker::addPath()" << path;
16     QMutexLocker locker(&m_mutex);
17     m_pathList << path;
18 }
19
20 void ThumbnailWorker::clearPath()
21 {
22     QMutexLocker locker(&m_mutex);
23     m_pathList.clear();
24 }
25
26 QString ThumbnailWorker::getPath()
27 {
28     QMutexLocker locker(&m_mutex);
29     if (m_pathList.isEmpty()) {
30         return QString();
31     }
32     qDebug() << "ThumbnailWorker::getPath()";
33     return m_pathList.takeFirst();
34 }
35
36 void ThumbnailWorker::run()
37 {
38     qDebug() << "ThumbnailWorker::run() enter.";
39
40     while (!isAborted()) {
41         QString path = getPath();
42         if (!path.isEmpty()) {
43             QPixmap pixmap(path);
44             if (!pixmap.isNull()) {
45                 QSize size(256, 256);
46                 double scaleX = 1.0 * size.width() / pixmap.width();
47                 double scaleY = 1.0 * size.height() / pixmap.height();
48                 double scaleFactor = qMin(scaleX, scaleY);
49                 if (scaleFactor < 1) {
50                     pixmap = pixmap.scaled(pixmap.size() * scaleFactor,
51                                            Qt::IgnoreAspectRatio,
52                                            Qt::SmoothTransformation);
53                 }
54                 emit resultReady(path, pixmap);
55             }
56         }
57         this->thread()->msleep(100);
58     }
59
60     emit finished();
61     qDebug() << "ThumbnailWorker::run() finished.";
62 }