[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdegraphics/gwenview
From:       Aurélien Gâteau <aurelien.gateau () free ! fr>
Date:       2008-06-26 15:54:24
Message-ID: 1214495664.772447.27340.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 824722 by gateau:

Introduced a ThumbnailSize enum, and use it in ThumbnailLoadJob.


 M  +2 -1      app/thumbnailviewhelper.cpp  
 M  +22 -32    lib/thumbnailloadjob.cpp  
 M  +6 -5      lib/thumbnailloadjob.h  
 A             lib/thumbnailsize.cpp   [License: GPL (v2+)]
 A             lib/thumbnailsize.h   [License: GPL (v2+)]
 M  +4 -4      tests/thumbnailloadjobtest.cpp  


--- trunk/KDE/kdegraphics/gwenview/app/thumbnailviewhelper.cpp #824721:824722
@@ -89,8 +89,9 @@
 		filteredList << item;
 	}
 	if (filteredList.size() > 0) {
+		ThumbnailSize::Enum size = ThumbnailSize::fromPixelSize(THUMBNAIL_SIZE);
 		if (!d->mThumbnailLoadJob) {
-			d->mThumbnailLoadJob = new ThumbnailLoadJob(filteredList, THUMBNAIL_SIZE);
+			d->mThumbnailLoadJob = new ThumbnailLoadJob(filteredList, size);
 			connect(d->mThumbnailLoadJob, SIGNAL(thumbnailLoaded(const KFileItem&, const \
QPixmap&, const QSize&)),  SIGNAL(thumbnailLoaded(const KFileItem&, const \
QPixmap&)));  d->mThumbnailLoadJob->start();
--- trunk/KDE/kdegraphics/gwenview/lib/thumbnailloadjob.cpp #824721:824722
@@ -74,10 +74,6 @@
 #endif
 
 
-static const int THUMBNAILSIZE_MIN = 48;
-static const int THUMBNAILSIZE_NORMAL = 128;
-static const int THUMBNAILSIZE_LARGE = 256;
-
 static QString generateOriginalUri(const KUrl& url_) {
 	KUrl url = url_;
 	// Don't include the password if any
@@ -86,7 +82,7 @@
 }
 
 
-static QString generateThumbnailPath(const QString& uri, int size) {
+static QString generateThumbnailPath(const QString& uri, ThumbnailSize::Enum size) {
 	KMD5 md5( QFile::encodeName(uri) );
 	QString baseDir=ThumbnailLoadJob::thumbnailBaseDir(size);
 	return baseDir + QString(QFile::encodeName( md5.hexDigest())) + ".png";
@@ -104,7 +100,7 @@
 	const QString& originalUri, time_t originalTime, int originalSize, const QString& \
originalMimeType,  const QString& pixPath,
 	const QString& thumbnailPath,
-	int size)
+	ThumbnailSize::Enum size)
 {
 	QMutexLocker lock( &mMutex );
 	assert( mPixPath.isNull());
@@ -171,6 +167,7 @@
 	mImage = QImage();
 	bool loaded=false;
 	bool needCaching=true;
+	int pixelSize = ThumbnailSize::pixelSize(mThumbnailSize);
 
 	// If it's a Jpeg, try to load a small image directly from the file
 	if (isJpeg()) {
@@ -181,8 +178,8 @@
 		mImage = content.thumbnail();
 
 		if( !mImage.isNull()
-			&& ( mImage.width() >= mThumbnailSize // don't use small thumbnails
-			|| mImage.height() >= mThumbnailSize )) {
+			&& ( mImage.width() >= pixelSize // don't use small thumbnails
+			|| mImage.height() >= pixelSize )) {
 			loaded = true;
 			needCaching = false;
 		}
@@ -203,13 +200,12 @@
 		if (originalImage.load(mPixPath)) {
 			mOriginalWidth=originalImage.width();
 			mOriginalHeight=originalImage.height();
-			int thumbSize=mThumbnailSize<=THUMBNAILSIZE_NORMAL ? THUMBNAILSIZE_NORMAL : \
THUMBNAILSIZE_LARGE;  
-			if (qMax(mOriginalWidth, mOriginalHeight)<=thumbSize ) {
+			if (qMax(mOriginalWidth, mOriginalHeight)<=pixelSize ) {
 				mImage=originalImage;
 				needCaching = false;
 			} else {
-				mImage = originalImage.scaled(thumbSize, thumbSize, Qt::KeepAspectRatio);
+				mImage = originalImage.scaled(pixelSize, pixelSize, Qt::KeepAspectRatio);
 			}
 			loaded = true;
 		}
@@ -285,7 +281,7 @@
 	jpeg_read_header(&cinfo, true);
 
 	// Get image size and check if we need a thumbnail
-	int size= mThumbnailSize <= THUMBNAILSIZE_NORMAL ? THUMBNAILSIZE_NORMAL : \
THUMBNAILSIZE_LARGE; +	int size = ThumbnailSize::pixelSize(mThumbnailSize);
 	int imgSize = qMax(cinfo.image_width, cinfo.image_height);
 
 	if (imgSize<=size) {
@@ -374,12 +370,15 @@
 }
 
 
-QString ThumbnailLoadJob::thumbnailBaseDir(int size) {
+QString ThumbnailLoadJob::thumbnailBaseDir(ThumbnailSize::Enum size) {
 	QString dir = thumbnailBaseDir();
-	if (size<=THUMBNAILSIZE_NORMAL) {
-		dir+="normal/";
-	} else {
-		dir+="large/";
+	switch (size) {
+	case ThumbnailSize::Normal:
+		dir += "normal/";
+		break;
+	case ThumbnailSize::Large:
+		dir += "large/";
+		break;
 	}
 	return dir;
 }
@@ -387,8 +386,8 @@
 
 void ThumbnailLoadJob::deleteImageThumbnail(const KUrl& url) {
 	QString uri=generateOriginalUri(url);
-	QFile::remove(generateThumbnailPath(uri, THUMBNAILSIZE_NORMAL));
-	QFile::remove(generateThumbnailPath(uri, THUMBNAILSIZE_LARGE));
+	QFile::remove(generateThumbnailPath(uri, ThumbnailSize::Normal));
+	QFile::remove(generateThumbnailPath(uri, ThumbnailSize::Large));
 }
 
 
@@ -397,7 +396,7 @@
 // ThumbnailLoadJob implementation
 //
 //------------------------------------------------------------------------
-ThumbnailLoadJob::ThumbnailLoadJob(const KFileItemList& items, int size)
+ThumbnailLoadJob::ThumbnailLoadJob(const KFileItemList& items, ThumbnailSize::Enum \
size)  : KIO::Job()
 , mState( STATE_NEXTTHUMB )
 , mThumbnailSize(size)
@@ -405,7 +404,7 @@
 	LOG((int)this);
 
 	mBrokenPixmap = KIconLoader::global()->loadIcon("image-missing",
-		KIconLoader::NoGroup, THUMBNAILSIZE_MIN);
+		KIconLoader::NoGroup, 48);
 
 	// Look for images and store the items in our todo list
 	Q_ASSERT(!items.empty());
@@ -665,7 +664,7 @@
 		mState=STATE_PREVIEWJOB;
 		KFileItemList list;
 		list.append(mCurrentItem);
-		KIO::Job* job=KIO::filePreview(list, mThumbnailSize);
+		KIO::Job* job=KIO::filePreview(list, ThumbnailSize::pixelSize(mThumbnailSize));
 		//job->ui()->setWindow(KApplication::kApplication()->activeWindow());
 		connect(job, SIGNAL(gotPreview(const KFileItem&, const QPixmap&)),
 			this, SLOT(slotGotPreview(const KFileItem&, const QPixmap&)) );
@@ -691,16 +690,7 @@
 
 void ThumbnailLoadJob::emitThumbnailLoaded(const QImage& img, const QSize& size) {
 	LOG(mCurrentItem.url());
-	int biggestDimension=qMax(img.width(), img.height());
-
-	QImage thumbImg;
-	if (biggestDimension>mThumbnailSize) {
-		// Scale down thumbnail if necessary
-		thumbImg = img.scaled(mThumbnailSize, mThumbnailSize, Qt::KeepAspectRatio);
-	} else {
-		thumbImg = img;
-	}
-	QPixmap thumb = QPixmap::fromImage(thumbImg);
+	QPixmap thumb = QPixmap::fromImage(img);
 	emit thumbnailLoaded(mCurrentItem, thumb, size);
 }
 
--- trunk/KDE/kdegraphics/gwenview/lib/thumbnailloadjob.h #824721:824722
@@ -38,6 +38,7 @@
 #include <kfileitem.h>
 
 // Local
+#include <lib/thumbnailsize.h>
 
 namespace Gwenview {
 class ThumbnailThread : public QThread {
@@ -52,7 +53,7 @@
 		const QString& originalMimeType,
 		const QString& pixPath,
 		const QString& thumbnailPath,
-		int size);
+		ThumbnailSize::Enum size);
 
 	void cancel();
 
@@ -78,7 +79,7 @@
 	int mOriginalHeight;
 	QMutex mMutex;
 	QWaitCondition mCond;
-	int mThumbnailSize;
+	ThumbnailSize::Enum mThumbnailSize;
 	bool mCancel;
 };
 
@@ -91,7 +92,7 @@
 	/**
 	 * Create a job for determining the pixmaps of the images in the @p itemList
 	 */
-	ThumbnailLoadJob(const KFileItemList& itemList, int size);
+	ThumbnailLoadJob(const KFileItemList& itemList, ThumbnailSize::Enum size);
 	virtual ~ThumbnailLoadJob();
 
 	/**
@@ -127,7 +128,7 @@
 	/**
 	 * Returns the thumbnail base dir, for the @p size
 	 */
-	static QString thumbnailBaseDir(int size);
+	static QString thumbnailBaseDir(ThumbnailSize::Enum size);
 
 
 	/**
@@ -172,7 +173,7 @@
 	QString mTempPath;
 
 	// Thumbnail size
-	int mThumbnailSize;
+	ThumbnailSize::Enum mThumbnailSize;
 
 	QPixmap mBrokenPixmap;
 
--- trunk/KDE/kdegraphics/gwenview/tests/thumbnailloadjobtest.cpp #824721:824722
@@ -83,7 +83,7 @@
 		KFileItem item(KFileItem::Unknown, KFileItem::Unknown, url);
 		list << item;
 	}
-	QPointer<ThumbnailLoadJob> job = new ThumbnailLoadJob(list, 128);
+	QPointer<ThumbnailLoadJob> job = new ThumbnailLoadJob(list, ThumbnailSize::Normal);
 	// FIXME: job->exec() causes a double free(), so wait for the job to be
 	// deleted instead
 	//job->exec();
@@ -92,7 +92,7 @@
 		QTest::qWait(100);
 	}
 
-	QDir thumbnailDir = ThumbnailLoadJob::thumbnailBaseDir(128);
+	QDir thumbnailDir = ThumbnailLoadJob::thumbnailBaseDir(ThumbnailSize::Normal);
 	// There should be 2 files, because small.png is too small to have a
 	// thumbnail
 	QStringList entryList = thumbnailDir.entryList(QStringList("*.png"));
@@ -112,7 +112,7 @@
 	KFileItem item(KFileItem::Unknown, KFileItem::Unknown, url);
 	list << item;
 
-	QPointer<ThumbnailLoadJob> job = new ThumbnailLoadJob(list, 128);
+	QPointer<ThumbnailLoadJob> job = new ThumbnailLoadJob(list, ThumbnailSize::Normal);
 	// FIXME: job->exec() causes a double free(), so wait for the job to be
 	// deleted instead
 	//job->exec();
@@ -121,7 +121,7 @@
 		QTest::qWait(100);
 	}
 
-	QDir thumbnailDir = ThumbnailLoadJob::thumbnailBaseDir(128);
+	QDir thumbnailDir = ThumbnailLoadJob::thumbnailBaseDir(ThumbnailSize::Normal);
 	QStringList entryList = thumbnailDir.entryList(QStringList("*.png"));
 	QCOMPARE(entryList.count(), 1);
 }


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic