From: Chris Holland Date: Thu, 1 Aug 2019 01:46:53 +0000 (-0400) Subject: Only check if place url is mount point once during polish event. X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/e75326077b443f5f1f1b19dc960a3a8a83979d81 Only check if place url is mount point once during polish event. The capacity bars will no longer update when capacity changes. It only checks the size on init. Updating during polish event is only a temporarily solution just to draft code flow for seperating logic from painting. Eventually this logic update should be in a worker thread detached from blocking the rendering thread that blocks launching the dolphin window. --- diff --git a/src/panels/places/placesitemlistwidget.cpp b/src/panels/places/placesitemlistwidget.cpp index 52b3baf30..4d88f8c55 100644 --- a/src/panels/places/placesitemlistwidget.cpp +++ b/src/panels/places/placesitemlistwidget.cpp @@ -6,6 +6,8 @@ #include "placesitemlistwidget.h" +#include + #include #include @@ -18,6 +20,9 @@ PlacesItemListWidget::PlacesItemListWidget(KItemListWidgetInformant* informant, QGraphicsItem* parent) : KStandardItemListWidget(informant, parent) + , m_isMountPoint(false) + , m_drawCapacityBar(false) + , m_capacityBarRatio(0) { } @@ -36,78 +41,101 @@ QPalette::ColorRole PlacesItemListWidget::normalTextColorRole() const return QPalette::WindowText; } -void PlacesItemListWidget::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) +void PlacesItemListWidget::updateCapacityBar() { - KStandardItemListWidget::paint(painter, option, widget); - - bool drawCapacityBar = false; const QUrl url = data().value("url").toUrl(); if (url.isLocalFile()) { const QString mountPointPath = url.toLocalFile(); + qDebug() << "url:" << mountPointPath; KMountPoint::Ptr mp = KMountPoint::currentMountPoints().findByPath(mountPointPath); - bool isMountPoint = (mp && mp->mountPoint() == mountPointPath); - - if (isMountPoint) { + m_isMountPoint = (mp && mp->mountPoint() == mountPointPath); + qDebug() << " isMountPoint:" << m_isMountPoint; + if (m_isMountPoint) { const KDiskFreeSpaceInfo info = KDiskFreeSpaceInfo::freeSpaceInfo(mountPointPath); - drawCapacityBar = info.size() != 0; - if (drawCapacityBar) { - const TextInfo* textInfo = m_textInfo.value("text"); - if (textInfo) { // See KStandarItemListWidget::paint() for info on why we check textInfo. - painter->save(); - - QRect capacityRect( - textInfo->pos.x(), - option->rect.top() + option->rect.height() - CAPACITYBAR_HEIGHT - CAPACITYBAR_MARGIN, - qMin((qreal)option->rect.width(), selectionRect().width()) - (textInfo->pos.x() - option->rect.left()), - CAPACITYBAR_HEIGHT - ); - - const qreal ratio = (qreal)info.used() / (qreal)info.size(); - // qDebug() << "ratio:" << ratio << "(" << info.used() << "/" << info.size() << ")"; - - const QPalette pal = palette(); - const QPalette::ColorGroup group = isActiveWindow() ? QPalette::Active : QPalette::Inactive; - // QColor bgColor = QColor::fromRgb(230, 230, 230); - // QColor outlineColor = QColor::fromRgb(208, 208, 208); - // QColor bgColor = QColor::fromRgb(0, 230, 0); - // QColor outlineColor = QColor::fromRgb(208, 0, 0, 127); - // QColor normalUsedColor = QColor::fromRgb(38, 160, 218); - // QColor dangerUsedColor = QColor::fromRgb(218, 38, 38); - // QColor bgColor = pal.base().color().darker(130); - // QColor outlineColor = pal.base().color().darker(150); - - QPalette::ColorRole role; - // role = isSelected() ? QPalette::Highlight : QPalette::Window; - // QColor bgColor = styleOption().palette.color(group, role).darker(150); - // QColor outlineColor = styleOption().palette.color(group, role).darker(170); - QColor bgColor = isSelected() - ? styleOption().palette.color(group, QPalette::Highlight).darker(180) - : styleOption().palette.color(group, QPalette::Window).darker(120); - - role = isSelected() ? QPalette::HighlightedText : QPalette::Highlight; - QColor normalUsedColor = styleOption().palette.color(group, role); - - QColor dangerUsedColor = QColor::fromRgb(218, 38, 38); - - // Background - painter->fillRect(capacityRect, bgColor); - - // Outline - // const QRect outlineRect(capacityRect.x(), capacityRect.y(), capacityRect.width() - 1, capacityRect.height() - 1); - // painter->setPen(outlineColor); - // painter->drawRect(outlineRect); - - // Fill - const QRect fillRect(capacityRect.x(), capacityRect.y(), capacityRect.width() * ratio, capacityRect.height()); - if (ratio < 0.95) { // Fill - painter->fillRect(fillRect, normalUsedColor); - } else { - painter->fillRect(fillRect, dangerUsedColor); - } - - painter->restore(); - } + m_drawCapacityBar = info.size() != 0; + m_capacityBarRatio = (qreal)info.used() / (qreal)info.size(); + qDebug() << " capacityBarRatio:" << m_capacityBarRatio << "(" << info.used() << "/" << info.size() << ")"; + + // update(); + } else { + resetCapacityBar(); + } + } else { + resetCapacityBar(); + } +} + +void PlacesItemListWidget::resetCapacityBar() +{ + m_isMountPoint = false; + m_drawCapacityBar = false; + m_capacityBarRatio = 0; +} + +void PlacesItemListWidget::polishEvent() +{ + updateCapacityBar(); + + QGraphicsWidget::polishEvent(); +} + +void PlacesItemListWidget::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) +{ + KStandardItemListWidget::paint(painter, option, widget); + + if (m_drawCapacityBar) { + const TextInfo* textInfo = m_textInfo.value("text"); + if (textInfo) { // See KStandarItemListWidget::paint() for info on why we check textInfo. + painter->save(); + + QRect capacityRect( + textInfo->pos.x(), + option->rect.top() + option->rect.height() - CAPACITYBAR_HEIGHT - CAPACITYBAR_MARGIN, + qMin((qreal)option->rect.width(), selectionRect().width()) - (textInfo->pos.x() - option->rect.left()), + CAPACITYBAR_HEIGHT + ); + + const QPalette pal = palette(); + const QPalette::ColorGroup group = isActiveWindow() ? QPalette::Active : QPalette::Inactive; + // QColor bgColor = QColor::fromRgb(230, 230, 230); + // QColor outlineColor = QColor::fromRgb(208, 208, 208); + // QColor bgColor = QColor::fromRgb(0, 230, 0); + // QColor outlineColor = QColor::fromRgb(208, 0, 0, 127); + // QColor normalUsedColor = QColor::fromRgb(38, 160, 218); + // QColor dangerUsedColor = QColor::fromRgb(218, 38, 38); + // QColor bgColor = pal.base().color().darker(130); + // QColor outlineColor = pal.base().color().darker(150); + + QPalette::ColorRole role; + // role = isSelected() ? QPalette::Highlight : QPalette::Window; + // QColor bgColor = styleOption().palette.color(group, role).darker(150); + // QColor outlineColor = styleOption().palette.color(group, role).darker(170); + QColor bgColor = isSelected() + ? styleOption().palette.color(group, QPalette::Highlight).darker(180) + : styleOption().palette.color(group, QPalette::Window).darker(120); + + role = isSelected() ? QPalette::HighlightedText : QPalette::Highlight; + QColor normalUsedColor = styleOption().palette.color(group, role); + + QColor dangerUsedColor = QColor::fromRgb(218, 38, 38); + + // Background + painter->fillRect(capacityRect, bgColor); + + // Outline + // const QRect outlineRect(capacityRect.x(), capacityRect.y(), capacityRect.width() - 1, capacityRect.height() - 1); + // painter->setPen(outlineColor); + // painter->drawRect(outlineRect); + + // Fill + const QRect fillRect(capacityRect.x(), capacityRect.y(), capacityRect.width() * m_capacityBarRatio, capacityRect.height()); + if (m_capacityBarRatio < 0.95) { // Fill + painter->fillRect(fillRect, normalUsedColor); + } else { + painter->fillRect(fillRect, dangerUsedColor); } + + painter->restore(); } } } diff --git a/src/panels/places/placesitemlistwidget.h b/src/panels/places/placesitemlistwidget.h index e5763ad07..a82616ff3 100644 --- a/src/panels/places/placesitemlistwidget.h +++ b/src/panels/places/placesitemlistwidget.h @@ -22,10 +22,18 @@ public: ~PlacesItemListWidget() override; void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = nullptr) override; + void polishEvent() override; protected: bool isHidden() const override; QPalette::ColorRole normalTextColorRole() const override; + void updateCapacityBar(); + void resetCapacityBar(); + +private: + bool m_isMountPoint; + bool m_drawCapacityBar; + qreal m_capacityBarRatio; }; #endif