diff options
| author | Aurélien Gâteau <[email protected]> | 2013-03-21 14:12:28 +0100 |
|---|---|---|
| committer | Aurélien Gâteau <[email protected]> | 2013-03-21 14:14:55 +0100 |
| commit | 6dfcd7afd9336ee73d78f703e208088aa3f5ca60 (patch) | |
| tree | 8577761a5fcfdfb2e7752487118160eeba8fe260 | |
| parent | 5d75c7afc5470966e818791c85e1df57d5f98e8c (diff) | |
| parent | e2a89fc2e07b0b063f166358cbf5a31f9e8ad3b0 (diff) | |
Merge remote-tracking branch 'origin/KDE/4.10'
@emmanuel: this merge includes your fix from
https://git.reviewboard.kde.org/r/109488/ . I assume this is not a
problem.
CCMAIL: [email protected]
| -rw-r--r-- | src/kitemviews/kfileitemmodel.cpp | 5 | ||||
| -rw-r--r-- | src/kitemviews/kstandarditemlistwidget.cpp | 47 |
2 files changed, 43 insertions, 9 deletions
diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp index 5d1a1968a..7b039ec4a 100644 --- a/src/kitemviews/kfileitemmodel.cpp +++ b/src/kitemviews/kfileitemmodel.cpp @@ -120,6 +120,11 @@ void KFileItemModel::loadDirectory(const KUrl& url) void KFileItemModel::refreshDirectory(const KUrl& url) { + // Refresh all expanded directories first (Bug 295300) + foreach (const KUrl& expandedUrl, m_expandedDirs) { + m_dirLister->openUrl(expandedUrl, KDirLister::Reload); + } + m_dirLister->openUrl(url, KDirLister::Reload); } diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp index fcd052045..6adb54633 100644 --- a/src/kitemviews/kstandarditemlistwidget.cpp +++ b/src/kitemviews/kstandarditemlistwidget.cpp @@ -249,17 +249,46 @@ void KStandardItemListWidget::paint(QPainter* painter, const QStyleOptionGraphic const KItemListStyleOption& itemListStyleOption = styleOption(); if (isHovered()) { - const qreal opacity = painter->opacity(); - // Blend the unhovered and hovered pixmap if the hovering - // animation is ongoing if (hoverOpacity() < 1.0) { - painter->setOpacity((1.0 - hoverOpacity()) * opacity); - drawPixmap(painter, m_pixmap); - } + /* + * Linear interpolation between m_pixmap and m_hoverPixmap. + * + * Note that this cannot be achieved by painting m_hoverPixmap over + * m_pixmap, even if the opacities are adjusted. For details see + * https://git.reviewboard.kde.org/r/109614/ + */ + // Paint pixmap1 so that pixmap1 = m_pixmap * (1.0 - hoverOpacity()) + QPixmap pixmap1(option->rect.size()); + pixmap1.fill(Qt::transparent); + { + QPainter p(&pixmap1); + p.setOpacity(1.0 - hoverOpacity()); + drawPixmap(&p, m_pixmap); + } + + // Paint pixmap2 so that pixmap2 = m_hoverPixmap * hoverOpacity() + QPixmap pixmap2(option->rect.size()); + pixmap2.fill(Qt::transparent); + { + QPainter p(&pixmap2); + p.setOpacity(hoverOpacity()); + drawPixmap(&p, m_hoverPixmap); + } - painter->setOpacity(hoverOpacity() * opacity); - drawPixmap(painter, m_hoverPixmap); - painter->setOpacity(opacity); + // Paint pixmap2 on pixmap1 using CompositionMode_Plus + // Now pixmap1 = pixmap2 + m_pixmap * (1.0 - hoverOpacity()) + // = m_hoverPixmap * hoverOpacity() + m_pixmap * (1.0 - hoverOpacity()) + { + QPainter p(&pixmap1); + p.setCompositionMode(QPainter::CompositionMode_Plus); + p.drawPixmap(0, 0, pixmap2); + } + + // Finally paint pixmap1 on the widget + painter->drawPixmap(0, 0, pixmap1); + } else { + drawPixmap(painter, m_hoverPixmap); + } } else { drawPixmap(painter, m_pixmap); } |
