[Digikam-devel] extragear/graphics/digikam/digikam

Gilles Caulier caulier.gilles at gmail.com
Fri Nov 23 07:27:53 GMT 2007


SVN commit 740390 by cgilles:

digiKam from trunk (KDE4): following Marcel tips by IRC, We use now a dedicaced Multithreaded Thumbnail Loader 
instance from digiKam core for all kipi-plugins we need thumb. We never use default KDE thumbnails loader with 
all kipi-plugins running under digiKam.
Why ? : because KDE thumnails loader is slow, do not work properlly with JPEG and PNG, do not support RAW pictures,
do not rotate properlly thumbs accordinly to Exif or Xmp metadata, etc...

It's perfect... To test it, start SendImages kipi-plugin for ex. and add new pictures to e-mail on the list.
Look how is render the pictures thumb on the left of open file dialog (Standard KDE + new preview widget). 
This rock! digiKam and kipi-plugins because more homogenous now.

CCMAIL: digikam-devel at kde.org


 M  +44 -36    kipiinterface.cpp  
 M  +10 -4     kipiinterface.h  


--- trunk/extragear/graphics/digikam/digikam/kipiinterface.cpp #740389:740390
@@ -248,7 +248,7 @@
 //-- Image Collection ------------------------------------------------------------
 
 DigikamImageCollection::DigikamImageCollection( Type tp, Album* album, const QString& filter )
-                      : tp_( tp ), album_(album), imgFilter_(filter)
+                      : m_tp( tp ), m_album(album), m_imgFilter(filter)
 {
     if (!album)
     {
@@ -262,24 +262,24 @@
 
 QString DigikamImageCollection::name()
 {
-    if ( album_->type() == Album::TAG )
+    if ( m_album->type() == Album::TAG )
     {
-        return i18n("Tag: %1",album_->title());
+        return i18n("Tag: %1",m_album->title());
     }
     else
-        return album_->title();
+        return m_album->title();
 }
 
 QString DigikamImageCollection::category()
 {
-    if ( album_->type() == Album::PHYSICAL )
+    if ( m_album->type() == Album::PHYSICAL )
     {
-        PAlbum *p = dynamic_cast<PAlbum*>(album_);
+        PAlbum *p = dynamic_cast<PAlbum*>(m_album);
         return p->collection();
     }
-    else if ( album_->type() == Album::TAG )
+    else if ( m_album->type() == Album::TAG )
     {
-        TAlbum *p = dynamic_cast<TAlbum*>(album_);
+        TAlbum *p = dynamic_cast<TAlbum*>(m_album);
         return i18n("Tag: %1",p->tagPath());
     }
     else
@@ -288,9 +288,9 @@
 
 QDate DigikamImageCollection::date()
 {
-    if ( album_->type() == Album::PHYSICAL )
+    if ( m_album->type() == Album::PHYSICAL )
     {
-        PAlbum *p = dynamic_cast<PAlbum*>(album_);
+        PAlbum *p = dynamic_cast<PAlbum*>(m_album);
         return p->date();
     }
     else
@@ -299,9 +299,9 @@
 
 QString DigikamImageCollection::comment()
 {
-    if ( album_->type() == Album::PHYSICAL )
+    if ( m_album->type() == Album::PHYSICAL )
     {
-        PAlbum *p = dynamic_cast<PAlbum*>(album_);
+        PAlbum *p = dynamic_cast<PAlbum*>(m_album);
         return p->caption();
     }
     else
@@ -310,20 +310,20 @@
 
 KUrl::List DigikamImageCollection::images()
 {
-    switch ( tp_ )
+    switch ( m_tp )
     {
         case AllItems:
         {
-            if (album_->type() == Album::PHYSICAL)
+            if (m_album->type() == Album::PHYSICAL)
             {
-                return imagesFromPAlbum(dynamic_cast<PAlbum*>(album_));
+                return imagesFromPAlbum(dynamic_cast<PAlbum*>(m_album));
             }
-            else if (album_->type() == Album::TAG)
+            else if (m_album->type() == Album::TAG)
             {
-                return imagesFromTAlbum(dynamic_cast<TAlbum*>(album_));
+                return imagesFromTAlbum(dynamic_cast<TAlbum*>(m_album));
             }
-            else if (album_->type() == Album::DATE || 
-                    album_->type() == Album::SEARCH)
+            else if (m_album->type() == Album::DATE || 
+                    m_album->type() == Album::SEARCH)
             {
                 AlbumItemHandler* handler = AlbumManager::instance()->getItemHandler();
     
@@ -392,7 +392,7 @@
 
     KUrl::List urlList;
 
-    NameFilter nameFilter(imgFilter_);
+    NameFilter nameFilter(m_imgFilter);
 
     for (QStringList::iterator it = urls.begin(); it != urls.end(); ++it)
     {
@@ -412,7 +412,7 @@
 
     KUrl::List urlList;
 
-    NameFilter nameFilter(imgFilter_);
+    NameFilter nameFilter(m_imgFilter);
 
     for (QStringList::iterator it = urls.begin(); it != urls.end(); ++it)
     {
@@ -425,9 +425,9 @@
 
 KUrl DigikamImageCollection::path()
 {
-    if (album_->type() == Album::PHYSICAL)
+    if (m_album->type() == Album::PHYSICAL)
     {
-        PAlbum *p = dynamic_cast<PAlbum*>(album_);
+        PAlbum *p = dynamic_cast<PAlbum*>(m_album);
         KUrl url;
         url.setPath(p->folderPath());
         return url;
@@ -441,9 +441,9 @@
 
 KUrl DigikamImageCollection::uploadPath()
 {
-    if (album_->type() == Album::PHYSICAL)
+    if (m_album->type() == Album::PHYSICAL)
     {
-        PAlbum *p = dynamic_cast<PAlbum*>(album_);
+        PAlbum *p = dynamic_cast<PAlbum*>(m_album);
         KUrl url;
         url.setPath(p->folderPath());
         return url;
@@ -467,7 +467,7 @@
 
 bool DigikamImageCollection::isDirectory()
 {
-    if (album_->type() == Album::PHYSICAL)
+    if (m_album->type() == Album::PHYSICAL)
         return true;
     else
         return false;
@@ -476,7 +476,7 @@
 bool DigikamImageCollection::operator==(ImageCollectionShared& imgCollection)
 {
     DigikamImageCollection* thatCollection = static_cast<DigikamImageCollection*>(&imgCollection);
-    return (album_ == thatCollection->album_);
+    return (m_album == thatCollection->m_album);
 }
 
 //-- LibKipi interface -----------------------------------------------------------
@@ -484,15 +484,22 @@
 DigikamKipiInterface::DigikamKipiInterface( QObject *parent, const char *name)
                     : KIPI::Interface( parent, name )
 {
+    m_thumbLoadThread = new ThumbnailLoadThread();
+
+    // Set cache size to 256 to have the max quality thumb.
+    m_thumbLoadThread->setThumbnailSize(256);          
+    m_thumbLoadThread->setSendSurrogatePixmap(true);
+    m_thumbLoadThread->setExifRotate(AlbumSettings::instance()->getExifRotate());
+
     m_albumManager = AlbumManager::instance();
 
-    connect( m_albumManager, SIGNAL( signalAlbumItemsSelected( bool ) ),
-             this, SLOT( slotSelectionChanged( bool ) ) );
+    connect(m_albumManager, SIGNAL( signalAlbumItemsSelected( bool ) ),
+            this, SLOT( slotSelectionChanged( bool ) ));
 
-    connect( m_albumManager, SIGNAL( signalAlbumCurrentChanged(Album*) ),
-             this, SLOT( slotCurrentAlbumChanged(Album*) ) );
+    connect(m_albumManager, SIGNAL( signalAlbumCurrentChanged(Album*) ),
+            this, SLOT( slotCurrentAlbumChanged(Album*) ));
 
-    connect(ThumbnailLoadThread::defaultThread(), SIGNAL(signalThumbnailLoaded(const LoadingDescription&, const QPixmap&)),
+    connect(m_thumbLoadThread, SIGNAL(signalThumbnailLoaded(const LoadingDescription&, const QPixmap&)),
             this, SLOT(slotThumbnailLoaded(const LoadingDescription&, const QPixmap&)));
 }
 
@@ -661,15 +668,16 @@
             s->getRawFileFilter());
 }
 
-void DigikamKipiInterface::thumbnail( const KUrl& url, int /*size*/ )
+void DigikamKipiInterface::thumbnail(const KUrl& url, int /*size*/)
 {
-    ThumbnailLoadThread::defaultThread()->find(url.path());
+    // NOTE: size is not used here. Cache use the max pixmap size to store thumbs (256).
+    m_thumbLoadThread->find(url.path());
 }
 
-void DigikamKipiInterface::thumbnails( const KUrl::List& list, int /*size*/ )
+void DigikamKipiInterface::thumbnails(const KUrl::List& list, int size)
 {
     for (KUrl::List::const_iterator it = list.begin() ; it != list.end() ; ++it)
-        ThumbnailLoadThread::defaultThread()->find((*it).path());
+        thumbnail((*it).path(), size);
 }
 
 void DigikamKipiInterface::slotThumbnailLoaded(const LoadingDescription& desc, const QPixmap& pix)
--- trunk/extragear/graphics/digikam/digikam/kipiinterface.h #740389:740390
@@ -63,6 +63,7 @@
 namespace Digikam
 {
 
+class ThumbnailLoadThread;
 class AlbumManager;
 class Album;
 class PAlbum;
@@ -143,9 +144,10 @@
     
 private:
 
-    Type     tp_;
-    Album   *album_;
-    QString  imgFilter_;
+    QString  m_imgFilter;
+
+    Type     m_tp;
+    Album   *m_album;
 };
 
 
@@ -164,11 +166,14 @@
     KIPI::ImageCollection currentSelection();
     QList<KIPI::ImageCollection> allAlbums();
     KIPI::ImageInfo info( const KUrl& );
+
     bool addImage( const KUrl&, QString& errmsg );
     void delImage( const KUrl& );
     void refreshImages( const KUrl::List& urls );
+
     int features() const;
     QString fileExtensions();
+
     void thumbnail( const KUrl& url, int size );
     void thumbnails( const KUrl::List& list, int size );
 
@@ -183,7 +188,8 @@
 
 private:
 
-    AlbumManager *m_albumManager;
+    AlbumManager        *m_albumManager;
+    ThumbnailLoadThread *m_thumbLoadThread;
 };
 
 }  // namespace Digikam



More information about the Digikam-devel mailing list