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

List:       kde-commits
Subject:    branches/work/parley-practice/parley/src/practice
From:       Daniel Laidig <d.laidig () gmx ! de>
Date:       2010-04-12 22:32:58
Message-ID: 20100412223258.819CEAC897 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1114181 by laidig:

use the new QImage based scaling

however, the old scaling mode is also enabled and we have to figure out what works \
best

 M  +15 -5     themedbackgroundrenderer.cpp  
 M  +2 -1      themedbackgroundrenderer.h  


--- branches/work/parley-practice/parley/src/practice/themedbackgroundrenderer.cpp \
#1114180:1114181 @@ -24,7 +24,7 @@
 using namespace Practice;
 
 ThemedBackgroundRenderer::ThemedBackgroundRenderer(QObject* parent)
-    : QObject(parent), m_queuedRequest(false)
+    : QObject(parent), m_queuedRequest(false), m_isFastScaledRender(true)
 {
     m_cache.setSaveFilename(KStandardDirs::locateLocal("appdata", \
                "practicethemecache.bin"));
     connect(&m_watcher, SIGNAL(finished()), this, SLOT(renderingFinished()));
@@ -57,16 +57,17 @@
     m_rects.append(qMakePair<QString, QRect>(name, rect));
 }
 
-void ThemedBackgroundRenderer::updateBackground()
+void ThemedBackgroundRenderer::updateBackground(bool fastScale)
 {
     if (m_size.isEmpty()) {
-        qWarning() << "trying to render with an invalid size";
+        kDebug() << "trying to render with an invalid size";
+        return;
     }
     if (m_future.isRunning()) {
         m_queuedRequest = true;
         return;
     }
-    m_future = QtConcurrent::run(this, &ThemedBackgroundRenderer::renderBackground, \
false); +    m_future = QtConcurrent::run(this, \
&ThemedBackgroundRenderer::renderBackground, fastScale);  \
m_watcher.setFuture(m_future);  }
 
@@ -74,10 +75,16 @@
 {
     emit backgroundChanged(QPixmap::fromImage(m_future.result()));
     m_future = QFuture<QImage>();
-    if (m_queuedRequest) {
+    if (m_queuedRequest) { // another request happened in the meantime
         m_queuedRequest = false;
         updateBackground();
+        return;
     }
+    if (m_isFastScaledRender) { // the just finished rendering is based on scaled \
QImages, not on SVGs, so we have to render the final version +        m_queuedRequest \
= false; +        updateBackground(false); //TODO: delay with timer?
+        return;
+    }
 }
 
 QPixmap ThemedBackgroundRenderer::getPixmapForId(const QString& id)
@@ -102,6 +109,8 @@
 
 QImage ThemedBackgroundRenderer::renderBackground(bool fastScale)
 {
+    m_isFastScaledRender = false;
+
     QTime t = QTime::currentTime();
     QImage image(m_size, QImage::Format_ARGB32_Premultiplied);
     image.fill(QColor(Qt::transparent).rgba());
@@ -184,6 +193,7 @@
     } else if(fastScale && !m_cache.imageSize(id).isEmpty()) {
         kDebug() << "FAST SCALE for:" << id;
         image = m_cache.getImage(id).scaled(itemRect.size(), Qt::IgnoreAspectRatio, \
Qt::FastTransformation); +        m_isFastScaledRender = true;
     } else {
         kDebug() << "NOT IN CACHE, render svg:" << id;
         image = QImage(itemRect.size(), QImage::Format_ARGB32_Premultiplied);
--- branches/work/parley-practice/parley/src/practice/themedbackgroundrenderer.h \
#1114180:1114181 @@ -63,7 +63,7 @@
     void setSize(const QSize& size);
     void clearRects();
     void addRect(const QString& name, const QRect& rect);
-    void updateBackground();
+    void updateBackground(bool fastScale = true);
 
     void renderingFinished();
 
@@ -84,6 +84,7 @@
     QList<QPair<QString, QRect> > m_rects;
     QSize m_size;
     bool m_queuedRequest;
+    bool m_isFastScaledRender;
 };
 
 }


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

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