From: Peter Penz Date: Sun, 14 Aug 2011 13:45:52 +0000 (+0200) Subject: Rename KItemListWidget::hoverBoundingRect() X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/547211575192508653e65bbc96f4d85580182eb4?ds=inline Rename KItemListWidget::hoverBoundingRect() It has been split now to iconBoundingRect() and textBoundingRect(). This is required to implement the rubberband in an efficient way and makes it more explicit what rectangle is returned. --- diff --git a/src/kitemviews/kfileitemlistwidget.cpp b/src/kitemviews/kfileitemlistwidget.cpp index a5251439f..36a7d65da 100644 --- a/src/kitemviews/kfileitemlistwidget.cpp +++ b/src/kitemviews/kfileitemlistwidget.cpp @@ -53,7 +53,7 @@ KFileItemListWidget::KFileItemListWidget(QGraphicsItem* parent) : m_hoverPixmap(), m_textPos(), m_text(), - m_textsBoundingRect(), + m_textBoundingRect(), m_sortedVisibleRoles(), m_expansionArea(), m_additionalInfoTextColor() @@ -114,7 +114,7 @@ void KFileItemListWidget::paint(QPainter* painter, const QStyleOptionGraphicsIte drawPixmap(painter, m_hoverPixmap); // Draw the hover background for the text - QRectF textsBoundingRect = m_textsBoundingRect; + QRectF textsBoundingRect = m_textBoundingRect; const qreal marginDiff = itemListStyleOption.margin / 2; textsBoundingRect.adjust(marginDiff, marginDiff, -marginDiff, -marginDiff); painter->setOpacity(hoverOpacity() * opacity * 0.1); @@ -149,12 +149,7 @@ void KFileItemListWidget::paint(QPainter* painter, const QStyleOptionGraphicsIte #endif } -bool KFileItemListWidget::contains(const QPointF& point) const -{ - return KItemListWidget::contains(point) || m_textsBoundingRect.contains(point); -} - -QRectF KFileItemListWidget::hoverBoundingRect() const +QRectF KFileItemListWidget::iconBoundingRect() const { QRectF bounds = m_hoverPixmapRect; const qreal margin = styleOption().margin; @@ -162,6 +157,11 @@ QRectF KFileItemListWidget::hoverBoundingRect() const return bounds; } +QRectF KFileItemListWidget::textBoundingRect() const +{ + return m_textBoundingRect; +} + QRectF KFileItemListWidget::expansionToggleRect() const { return m_isDir ? m_expansionArea : QRectF(); @@ -471,7 +471,7 @@ void KFileItemListWidget::updateIconsLayoutTextCache() m_text[Name].setTextWidth(maxWidth); m_textPos[Name] = QPointF(option.margin, widgetHeight - textLinesCount * fontHeight - option.margin); - m_textsBoundingRect = QRectF(option.margin + (maxWidth - requiredWidthForName) / 2, + m_textBoundingRect = QRectF(option.margin + (maxWidth - requiredWidthForName) / 2, m_textPos[Name].y(), requiredWidthForName, m_text[Name].size().height()); @@ -511,14 +511,14 @@ void KFileItemListWidget::updateIconsLayoutTextCache() m_text[textId].setTextWidth(maxWidth); const QRectF textBoundingRect(option.margin + (maxWidth - requiredWidth) / 2, y, requiredWidth, fontHeight); - m_textsBoundingRect |= textBoundingRect; + m_textBoundingRect |= textBoundingRect; y += fontHeight; } // Add a margin to the text bounding rectangle const qreal margin = option.margin; - m_textsBoundingRect.adjust(-margin, -margin, margin, margin); + m_textBoundingRect.adjust(-margin, -margin, margin, margin); } void KFileItemListWidget::updateCompactLayoutTextCache() @@ -560,7 +560,7 @@ void KFileItemListWidget::updateCompactLayoutTextCache() y += fontHeight; } - m_textsBoundingRect = QRectF(x - option.margin, 0, maximumRequiredTextWidth + 2 * option.margin, widgetHeight); + m_textBoundingRect = QRectF(x - option.margin, 0, maximumRequiredTextWidth + 2 * option.margin, widgetHeight); } void KFileItemListWidget::updateDetailsLayoutTextCache() @@ -571,7 +571,7 @@ void KFileItemListWidget::updateDetailsLayoutTextCache() // +------+ // | Icon | Name role Additional role 1 Additional role 2 // +------+ - m_textsBoundingRect = QRectF(); + m_textBoundingRect = QRectF(); const KItemListStyleOption& option = styleOption(); const QHash values = data(); @@ -597,7 +597,7 @@ void KFileItemListWidget::updateDetailsLayoutTextCache() switch (textId) { case Name: { - m_textsBoundingRect = QRectF(m_textPos[textId].x() - option.margin, 0, + m_textBoundingRect = QRectF(m_textPos[textId].x() - option.margin, 0, requiredWidth + 2 * option.margin, size().height()); // The column after the name should always be aligned on the same x-position independent @@ -698,7 +698,7 @@ void KFileItemListWidget::drawFocusIndicator(QPainter* painter) const KItemListStyleOption& option = styleOption(); const QPalette palette = option.palette; - const QRect rect = m_textsBoundingRect.toRect().adjusted(0, 0, 0, -1); + const QRect rect = m_textBoundingRect.toRect().adjusted(0, 0, 0, -1); QLinearGradient gradient(rect.bottomLeft(), rect.bottomRight()); gradient.setColorAt(0.0, Qt::transparent); diff --git a/src/kitemviews/kfileitemlistwidget.h b/src/kitemviews/kfileitemlistwidget.h index 1d1b6fd86..e48d31aa9 100644 --- a/src/kitemviews/kfileitemlistwidget.h +++ b/src/kitemviews/kfileitemlistwidget.h @@ -48,8 +48,8 @@ public: virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0); - virtual bool contains(const QPointF& point) const; - virtual QRectF hoverBoundingRect() const; + virtual QRectF iconBoundingRect() const; + virtual QRectF textBoundingRect() const; virtual QRectF expansionToggleRect() const; protected: @@ -107,7 +107,7 @@ private: QPointF m_textPos[TextIdCount]; QStaticText m_text[TextIdCount]; - QRectF m_textsBoundingRect; + QRectF m_textBoundingRect; QList m_sortedVisibleRoles; diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp index ef4c1f797..c9c62ad4a 100644 --- a/src/kitemviews/kitemlistwidget.cpp +++ b/src/kitemviews/kitemlistwidget.cpp @@ -95,11 +95,11 @@ void KItemListWidget::paint(QPainter* painter, const QStyleOptionGraphicsItem* o { Q_UNUSED(option); - const QRect hoverBounds = hoverBoundingRect().toRect(); + const QRect iconBounds = iconBoundingRect().toRect(); if (m_selected) { QStyleOptionViewItemV4 viewItemOption; viewItemOption.initFrom(widget); - viewItemOption.rect = hoverBounds; + viewItemOption.rect = iconBounds; viewItemOption.state = QStyle::State_Enabled | QStyle::State_Selected | QStyle::State_Item; viewItemOption.viewItemPosition = QStyleOptionViewItemV4::OnlyOne; widget->style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &viewItemOption, painter, widget); @@ -110,14 +110,14 @@ void KItemListWidget::paint(QPainter* painter, const QStyleOptionGraphicsItem* o } if (!m_hoverCache) { - m_hoverCache = new QPixmap(hoverBounds.size()); + m_hoverCache = new QPixmap(iconBounds.size()); m_hoverCache->fill(Qt::transparent); QPainter pixmapPainter(m_hoverCache); QStyleOptionViewItemV4 viewItemOption; viewItemOption.initFrom(widget); - viewItemOption.rect = QRect(0, 0, hoverBounds.width(), hoverBounds.height()); + viewItemOption.rect = QRect(0, 0, iconBounds.width(), iconBounds.height()); viewItemOption.state = QStyle::State_Enabled | QStyle::State_MouseOver | QStyle::State_Item; viewItemOption.viewItemPosition = QStyleOptionViewItemV4::OnlyOne; @@ -126,7 +126,7 @@ void KItemListWidget::paint(QPainter* painter, const QStyleOptionGraphicsItem* o const qreal opacity = painter->opacity(); painter->setOpacity(m_hoverOpacity * opacity); - painter->drawPixmap(hoverBounds.topLeft(), *m_hoverCache); + painter->drawPixmap(iconBounds.topLeft(), *m_hoverCache); painter->setOpacity(opacity); } @@ -230,16 +230,16 @@ bool KItemListWidget::isHovered() const bool KItemListWidget::contains(const QPointF& point) const { - return hoverBoundingRect().contains(point) || + if (!QGraphicsWidget::contains(point)) { + return false; + } + + return iconBoundingRect().contains(point) || + textBoundingRect().contains(point) || expansionToggleRect().contains(point) || selectionToggleRect().contains(point); } -QRectF KItemListWidget::hoverBoundingRect() const -{ - return QRectF(QPointF(0, 0), size()); -} - QRectF KItemListWidget::selectionToggleRect() const { return QRectF(); diff --git a/src/kitemviews/kitemlistwidget.h b/src/kitemviews/kitemlistwidget.h index d655042b8..6b766d1da 100644 --- a/src/kitemviews/kitemlistwidget.h +++ b/src/kitemviews/kitemlistwidget.h @@ -83,16 +83,21 @@ public: /** * @return True if \a point is inside KItemListWidget::hoverBoundingRect(), - * KItemListWidget::selectionToggleRect() or KItemListWidget::expansionToggleRect(). + * KItemListWidget::textBoundingRect(), KItemListWidget::selectionToggleRect() + * or KItemListWidget::expansionToggleRect(). * @reimp */ virtual bool contains(const QPointF& point) const; /** - * @return Bounding rectangle for the area that acts as hovering-area. Per default - * the bounding rectangle of the KItemListWidget is returned. + * @return Bounding rectangle for the area that shows the icon. */ - virtual QRectF hoverBoundingRect() const; + virtual QRectF iconBoundingRect() const = 0; + + /** + * @return Bounding rectangle for the area that contains the text-properties. + */ + virtual QRectF textBoundingRect() const = 0; /** * @return Rectangle for the selection-toggle that is used to select or deselect an item.