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

List:       kde-commits
Subject:    KDE/kdelibs/khtml/misc
From:       Fredrik Höglund <fredrik () kde ! org>
Date:       2008-12-04 17:07:58
Message-ID: 1228410478.724224.4789.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 892586 by fredrik:

Add a code path optimized for paint engines that support ConstantOpacity.

 M  +10 -4     paintbuffer.h  


--- trunk/KDE/kdelibs/khtml/misc/paintbuffer.h #892585:892586
@@ -34,6 +34,7 @@
 #include <QPixmap>
 #include <QStack>
 #include <QPainter>
+#include <QPaintEngine>
 #include <kdebug.h>
 #include <assert.h>
 
@@ -123,10 +124,13 @@
     }
     
     void transfer( float opacity ) {
-        QColor color;
-        color.setAlphaF(opacity);
-        m_painter.setCompositionMode(QPainter::CompositionMode_DestinationIn);
-        m_painter.fillRect(m_rect, color);
+        bool constantOpacity = m_origPainter->paintEngine()->hasFeature(QPaintEngine::ConstantOpacity);
+        if (!constantOpacity) {
+            QColor color;
+            color.setAlphaF(opacity);
+            m_painter.setCompositionMode(QPainter::CompositionMode_DestinationIn);
+            m_painter.fillRect(m_rect, color);
+        }
         m_painter.end();
         QTransform t = m_origPainter->worldTransform();
         QPoint trans(static_cast<int>(t.dx()),static_cast<int>(t.dy()));
@@ -134,6 +138,8 @@
         m_origPainter->resetTransform();
         m_origPainter->setClipRegion(trans.isNull() ? m_region : m_region.translated(trans));
         m_origPainter->setWorldTransform(t);
+        if (constantOpacity)
+            m_origPainter->setOpacity(opacity);
         m_origPainter->drawPixmap(m_off-trans, *m_buf, QRect(0,0,m_rect.width(),m_rect.height()));
         m_origPainter->restore();   
     }
[prev in list] [next in list] [prev in thread] [next in thread] 

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