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

List:       kde-commits
Subject:    KDE/kdebase/workspace/plasma/applets/tasks
From:       Marco Martin <notmart () gmail ! com>
Date:       2009-09-13 17:21:30
Message-ID: 1252862490.737491.7890.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 1022993 by mart:

cache the shadow, should be a lot faster, less oerations on QImage 


 M  +35 -24    abstracttaskitem.cpp  
 M  +4 -1      abstracttaskitem.h  


--- trunk/KDE/kdebase/workspace/plasma/applets/tasks/abstracttaskitem.cpp \
#1022992:1022993 @@ -168,6 +168,7 @@
 void AbstractTaskItem::setText(const QString &text)
 {
     m_text = text;
+    m_cachedShadow = QPixmap();
 }
 
 void AbstractTaskItem::setIcon(const QIcon &icon)
@@ -541,6 +542,29 @@
     itemBackground->setElementPrefix(m_backgroundPrefix);
 }
 
+void AbstractTaskItem::resizeEvent(QGraphicsSceneResizeEvent *event)
+{
+    m_cachedShadow = QPixmap();
+
+    syncActiveRect();
+
+    Plasma::FrameSvg *itemBackground = m_applet->itemBackground();
+
+    itemBackground->setElementPrefix("focus");
+    m_applet->resizeItemBackground(event->newSize().toSize());
+    itemBackground->setElementPrefix("normal");
+    m_applet->resizeItemBackground(event->newSize().toSize());
+    itemBackground->setElementPrefix("minimized");
+    m_applet->resizeItemBackground(event->newSize().toSize());
+    itemBackground->setElementPrefix("attention");
+    m_applet->resizeItemBackground(event->newSize().toSize());
+    itemBackground->setElementPrefix("hover");
+    m_applet->resizeItemBackground(m_activeRect.size().toSize());
+
+    //restore the prefix
+    itemBackground->setElementPrefix(m_backgroundPrefix);
+}
+
 void AbstractTaskItem::drawBackground(QPainter *painter, const \
QStyleOptionGraphicsItem *option, QWidget *)  {
     // Do not paint with invalid sizes, the happens when the layout is being \
initialized @@ -554,25 +578,6 @@
     */
     Plasma::FrameSvg *itemBackground = m_applet->itemBackground();
 
-    //if the size is changed have to resize all the elements
-    if (itemBackground->size() != size().toSize() && itemBackground->size() != \
                m_activeRect.size().toSize()) {
-        syncActiveRect();
-
-        itemBackground->setElementPrefix("focus");
-        m_applet->resizeItemBackground(m_activeRect.size().toSize());
-        itemBackground->setElementPrefix("normal");
-        m_applet->resizeItemBackground(size().toSize());
-        itemBackground->setElementPrefix("minimized");
-        m_applet->resizeItemBackground(size().toSize());
-        itemBackground->setElementPrefix("attention");
-        m_applet->resizeItemBackground(size().toSize());
-        itemBackground->setElementPrefix("hover");
-        m_applet->resizeItemBackground(m_activeRect.size().toSize());
-
-        //restore the prefix
-        itemBackground->setElementPrefix(m_backgroundPrefix);
-    }
-
     if (!m_animId && ~option->state & QStyle::State_Sunken) {
         itemBackground->setElementPrefix(m_backgroundPrefix);
         if (itemBackground->frameSize() == m_activeRect.size().toSize()) {
@@ -724,7 +729,7 @@
     return QSize(widthUsed, height);
 }
 
-void AbstractTaskItem::drawTextLayout(QPainter *painter, const QTextLayout &layout, \
const QRect &rect) const +void AbstractTaskItem::drawTextLayout(QPainter *painter, \
const QTextLayout &layout, const QRect &rect)  {
     if (rect.width() < 1 || rect.height() < 1) {
         return;
@@ -792,13 +797,19 @@
         shadowColor = Qt::white;
     }
 
-    QImage shadow = pixmap.toImage();
-    Plasma::PaintUtils::shadowBlur(shadow, 2, shadowColor);
+    if (m_cachedShadow.isNull()) {
+        QImage shadow = pixmap.toImage();
+        Plasma::PaintUtils::shadowBlur(shadow, 2, shadowColor);
+        m_cachedShadow = QPixmap(shadow.size());
+        m_cachedShadow.fill(Qt::transparent);
+        QPainter buffPainter(&m_cachedShadow);
+        buffPainter.drawImage(QPoint(0,0), shadow);
+    }
 
     if (shadowColor == Qt::white) {
-        painter->drawImage(rect.topLeft(), shadow);
+        painter->drawPixmap(rect.topLeft(), m_cachedShadow);
     } else {
-        painter->drawImage(rect.topLeft() + QPoint(1,2), shadow);
+        painter->drawPixmap(rect.topLeft() + QPoint(1,2), m_cachedShadow);
     }
     painter->drawPixmap(rect.topLeft(), pixmap);
 }
--- trunk/KDE/kdebase/workspace/plasma/applets/tasks/abstracttaskitem.h \
#1022992:1022993 @@ -178,7 +178,7 @@
     * the supplied painter. If the layout contains text lines that are longer than \
                the rect
     * is wide, they will be elided by fading the text out.
     */
-    void drawTextLayout(QPainter *painter, const QTextLayout &layout, const QRect \
&rect) const; +    void drawTextLayout(QPainter *painter, const QTextLayout &layout, \
const QRect &rect);  
     virtual void updateTask(::TaskManager::TaskChanges changes) = 0; // pure virtual \
function  virtual void updateToolTip() = 0; // pure virtual function
@@ -206,6 +206,8 @@
     // text color, use this because it could be animated
     QColor textColor() const;
 
+    void resizeEvent(QGraphicsSceneResizeEvent *event);
+
     TaskManager::AbstractGroupableItem * m_abstractItem;
     LayoutWidget *m_layoutWidget;
 
@@ -215,6 +217,7 @@
 
     QIcon m_icon;
     QString m_text;
+    QPixmap m_cachedShadow;
 
     int m_animId;
     qreal m_alpha;


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

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