videocollection/videocollectionwrapper/src/videothumbnaildata_p.cpp
changeset 24 7d93ee07fb27
parent 20 b9e04db066d4
child 52 e3cecb93e76a
--- a/videocollection/videocollectionwrapper/src/videothumbnaildata_p.cpp	Fri May 14 15:53:50 2010 +0300
+++ b/videocollection/videocollectionwrapper/src/videothumbnaildata_p.cpp	Thu May 27 12:53:14 2010 +0300
@@ -15,12 +15,13 @@
 *
 */
 
-// Version : %version: 21 %
+// Version : %version: 24 %
 
 // INCLUDE FILES
 #include <qapplication.h>
 #include <qpixmap.h>
 #include <qtimer.h>
+#include <qpainter.h>
 #include <mpxmediageneraldefs.h>
 #include <hbicon.h>
 
@@ -45,12 +46,16 @@
 // Priority for background thumbnail fetches.
 const int BACKGROUND_FETCH_PRIORITY = 3000;
 
+// Size for default thumbnail, these match with large thumbnail in lists. 
+const int DEFAULT_THUMBNAIL_WIDTH = 114;
+const int DEFAULT_THUMBNAIL_HEIGHT = 64;
+
 /**
  * global qHash function required fo creating hash values for TMPXItemId -keys
  */
 inline uint qHash(TMPXItemId key) 
-{ 
-    QPair<uint, uint> keyPair(key.iId1, key.iId2); 
+{
+    QPair<uint, uint> keyPair(key.iId1, key.iId2);
 
     return qHash(keyPair);
 }
@@ -430,7 +435,7 @@
     {
         if(!mDefaultThumbnails.contains(defaultIdVideo))
         {
-            mDefaultThumbnails[defaultIdVideo] = HbIcon(":/icons/default_thumbnail_video.svg");
+            mDefaultThumbnails[defaultIdVideo] = loadIcon("qtg_large_video");
         }
         return &mDefaultThumbnails[defaultIdVideo].qicon();
     }
@@ -441,7 +446,7 @@
         {
             if(!mDefaultThumbnails.contains(defaultIdAlbum))
             {
-                mDefaultThumbnails[defaultIdAlbum] = HbIcon("qtg_large_video_collection");
+                mDefaultThumbnails[defaultIdAlbum] = loadIcon("qtg_large_video_collection");
             }
             return &mDefaultThumbnails[defaultIdAlbum].qicon();
         }
@@ -453,7 +458,7 @@
             {
                 if(!mDefaultThumbnails.contains(defaultIdDownloads))
                 {
-                    mDefaultThumbnails[defaultIdDownloads] = HbIcon("qtg_large_video_download");
+                    mDefaultThumbnails[defaultIdDownloads] = loadIcon("qtg_large_video_download");
                 }
                 return &mDefaultThumbnails[defaultIdDownloads].qicon();
             }
@@ -462,7 +467,7 @@
             {
                 if(!mDefaultThumbnails.contains(defaultIdCaptured))
                 {
-                    mDefaultThumbnails[defaultIdCaptured] = HbIcon("qtg_large_video_capture");
+                    mDefaultThumbnails[defaultIdCaptured] = loadIcon("qtg_large_video_capture");
                 }
                 return &mDefaultThumbnails[defaultIdCaptured].qicon();
             }
@@ -471,7 +476,7 @@
             {
                 if(!mDefaultThumbnails.contains(defaultIdAlbum))
                 {
-                    mDefaultThumbnails[defaultIdAlbum] = HbIcon("qtg_large_video_collection");
+                    mDefaultThumbnails[defaultIdAlbum] = loadIcon("qtg_large_video_collection");
                 }
                 return &mDefaultThumbnails[defaultIdAlbum].qicon();
             }
@@ -480,6 +485,56 @@
 }
 
 // -----------------------------------------------------------------------------
+// VideoThumbnailDataPrivate::loadIcon()
+// -----------------------------------------------------------------------------
+//
+HbIcon VideoThumbnailDataPrivate::loadIcon(QString iconName)
+{
+    HbIcon icon(iconName);
+    
+    if(!icon.isNull())
+    {
+        QPixmap dest = QPixmap(DEFAULT_THUMBNAIL_WIDTH, DEFAULT_THUMBNAIL_HEIGHT);
+
+        // Scale the icon into the thumbnail area.
+        QPixmap source = icon.pixmap();
+        // Smooth scaling is very expensive (size^2). Therefore we reduce the size
+        // to 2x of the destination size and using fast transformation before doing final smooth scaling.
+        if(source.size().width() > (6*dest.width()) || source.size().height() > (6*dest.height()))
+        {
+            QSize intermediate_size = QSize( dest.width() * 2, dest.height() * 2 );
+            source = source.scaled(intermediate_size, Qt::KeepAspectRatio, Qt::FastTransformation );
+        }
+        QPixmap scaled = source.scaled(dest.size(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
+
+        // Center the icon.
+        int xDiff = 0;
+        int yDiff = 0;
+        if(dest.width() > scaled.width())
+        {
+            xDiff = (dest.width() - scaled.width()) / 2;
+        }
+        if(dest.height() > scaled.height())
+        {
+            yDiff = (dest.height() - scaled.height()) / 2;
+        }
+        
+        // Paint it.
+        QPainter painter(&dest);
+        painter.setCompositionMode(QPainter::CompositionMode_Source);
+        painter.fillRect(dest.rect(), Qt::transparent);
+        painter.drawPixmap(xDiff, yDiff, scaled.width(), scaled.height(), scaled);
+        painter.end();
+        
+        return HbIcon(dest);
+    }
+    else
+    {
+        return HbIcon();
+    }
+}
+
+// -----------------------------------------------------------------------------
 // VideoThumbnailDataPrivate::removeThumbnail()
 // -----------------------------------------------------------------------------
 //