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

List:       kde-commits
Subject:    KDE/kdegames/kpat/libkcardgame
From:       Parker Coates <parker.coates () kdemail ! net>
Date:       2011-02-01 20:57:14
Message-ID: 20110201205714.22C1FAC8C0 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1218292 by coates:

Use renderCard() from both main and rendering threads.

I'm not sure why this wasn't done originally, but it only makes sense to
avoid the code duplication.

 M  +14 -21    kabstractcarddeck.cpp  
 M  +1 -1      kabstractcarddeck_p.h  


--- trunk/KDE/kdegames/kpat/libkcardgame/kabstractcarddeck.cpp #1218291:1218292
@@ -87,18 +87,8 @@
         if ( !d->cache->contains( key ) )
         {
             kDebug() << "Renderering" << key << "in rendering thread.";
-
-            QImage img = QImage( m_size, QImage::Format_ARGB32 );
-            img.fill( Qt::transparent );
-            QPainter p( &img );
-            {
-                QMutexLocker l( &(d->rendererMutex) );
-                d->renderer()->render( &p, element );
-            }
-            p.end();
-
+            QImage img = d->renderCard( element, m_size );
             d->cache->insertImage( key, img );
-
             emit renderingDone( element, img );
         }
     }
@@ -142,17 +132,14 @@
 }
 
 
-QPixmap KAbstractCardDeckPrivate::renderCard( const QString & element )
+QImage KAbstractCardDeckPrivate::renderCard( const QString & element, const QSize & size )
 {
-    QString key = keyForPixmap( element , currentCardSize );
-    kDebug() << "Renderering" << key << "in main thread.";
-
     // Note that we don't use Format_ARGB32_Premultiplied as it sacrifices some
     // colour accuracy at low opacities for performance. Normally this wouldn't
     // be an issue, but in card games we often will have, say, 52 pixmaps
     // stacked on top of one another, which causes these colour inaccuracies to
     // add up to the point that they're very visible.
-    QImage img( currentCardSize, QImage::Format_ARGB32 );
+    QImage img( size, QImage::Format_ARGB32 );
     img.fill( Qt::transparent );
     QPainter p( &img );
     {
@@ -173,9 +160,7 @@
     }
     p.end();
 
-    cache->insertImage( key, img );
-
-    return QPixmap::fromImage( img );
+    return img;
 }
 
 
@@ -214,13 +199,21 @@
     QPixmap & stored = it.value().cardPixmap;
     if ( stored.size() != currentCardSize )
     {
-        if ( !cache->findPixmap( keyForPixmap( elementId , currentCardSize ), &stored ) )
+        QString key = keyForPixmap( elementId , currentCardSize );
+        if ( !cache->findPixmap( key, &stored ) )
         {
             if ( stored.isNull() )
-                stored = renderCard( elementId );
+            {
+                kDebug() << "Renderering" << key << "in main thread.";
+                QImage img = renderCard( elementId, currentCardSize );
+                cache->insertImage( key, img );
+                stored = QPixmap::fromImage( img );
+            }
             else
+            {
                 stored = stored.scaled( currentCardSize );
         }
+        }
         Q_ASSERT( stored.size() == currentCardSize );
     }
     return stored;
--- trunk/KDE/kdegames/kpat/libkcardgame/kabstractcarddeck_p.h #1218291:1218292
@@ -73,7 +73,7 @@
     ~KAbstractCardDeckPrivate();
 
     QSvgRenderer * renderer();
-    QPixmap renderCard( const QString & element );
+    QImage renderCard( const QString & element, const QSize & size );
     QSizeF unscaledCardSize();
     QPixmap requestPixmap( quint32 id, bool faceUp );
     void updateCardSize( const QSize & size );
[prev in list] [next in list] [prev in thread] [next in thread] 

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