[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