X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/b1d46a3cbd6dd70a6ec7e31d2d11056a5f5c6d91..c1e71289082ec7416ac19c822393ea70f63d1b75:/src/kitemviews/kstandarditemlistwidget.cpp diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp index 49d2f26bf..d078b0657 100644 --- a/src/kitemviews/kstandarditemlistwidget.cpp +++ b/src/kitemviews/kstandarditemlistwidget.cpp @@ -271,7 +271,6 @@ KStandardItemListWidget::KStandardItemListWidget(KItemListWidgetInformant *infor , m_scaledPixmapSize() , m_columnWidthSum() , m_iconRect() - , m_hoverPixmap() , m_textRect() , m_sortedVisibleRoles() , m_expansionArea() @@ -346,7 +345,7 @@ void KStandardItemListWidget::paint(QPainter *painter, const QStyleOptionGraphic drawSiblingsInformation(painter); } - auto pixmap = isHovered() ? m_hoverPixmap : m_pixmap; + auto pixmap = m_pixmap; if (!m_overlays.isEmpty()) { const qreal dpr = KItemViewsUtils::devicePixelRatio(this); @@ -388,7 +387,7 @@ void KStandardItemListWidget::paint(QPainter *painter, const QStyleOptionGraphic { QPainter p(&pixmap2); p.setOpacity(hoverOpacity()); - p.drawPixmap(0, 0, m_hoverPixmap); + p.drawPixmap(0, 0, m_pixmap); } // Paint pixmap2 on pixmap1 using CompositionMode_Plus @@ -484,12 +483,6 @@ void KStandardItemListWidget::paint(QPainter *painter, const QStyleOptionGraphic #endif } -QRectF KStandardItemListWidget::iconRect() const -{ - const_cast(this)->triggerCacheRefreshing(); - return m_iconRect; -} - QRectF KStandardItemListWidget::textRect() const { const_cast(this)->triggerCacheRefreshing(); @@ -537,35 +530,36 @@ QRectF KStandardItemListWidget::textFocusRect() const return m_textRect; } -QRectF KStandardItemListWidget::selectionRect() const +QRectF KStandardItemListWidget::selectionRectFull() const { const_cast(this)->triggerCacheRefreshing(); - - switch (m_layout) { - case IconsLayout: - return m_textRect; - - case CompactLayout: - case DetailsLayout: { - const int padding = styleOption().padding; - QRectF adjustedIconRect = iconRect().adjusted(-padding, -padding, padding, padding); - QRectF result = adjustedIconRect | m_textRect; + const int padding = styleOption().padding; + if (m_layout == DetailsLayout) { + auto rect = m_iconRect | m_textRect; if (m_highlightEntireRow) { if (layoutDirection() == Qt::LeftToRight) { - result.setRight(leftPadding() + m_columnWidthSum); + rect.setRight(leftPadding() + m_columnWidthSum); } else { - result.setLeft(size().width() - m_columnWidthSum - rightPadding()); + rect.setLeft(size().width() - m_columnWidthSum - rightPadding()); } } - return result; + return rect.adjusted(-padding, 0, padding, 0); + } else { + if (m_layout == CompactLayout) { + return rect().adjusted(-padding, 0, padding, 0); + } + return rect(); } +} - default: - Q_ASSERT(false); - break; +QRectF KStandardItemListWidget::selectionRectCore() const +{ + // Allow dragging from selection area in details view. + if (m_layout == DetailsLayout && highlightEntireRow() && !isSelected()) { + QRectF result = m_iconRect | m_textRect; + return result; } - - return m_textRect; + return selectionRectFull(); } QRectF KStandardItemListWidget::expansionToggleRect() const @@ -578,7 +572,6 @@ QRectF KStandardItemListWidget::selectionToggleRect() const { const_cast(this)->triggerCacheRefreshing(); - const QRectF widgetIconRect = iconRect(); const int widgetIconSize = iconSize(); int toggleSize = KIconLoader::SizeSmall; if (widgetIconSize >= KIconLoader::SizeEnormous) { @@ -587,29 +580,11 @@ QRectF KStandardItemListWidget::selectionToggleRect() const toggleSize = KIconLoader::SizeSmallMedium; } - QPointF pos = widgetIconRect.topLeft(); - - // If the selection toggle has a very small distance to the - // widget borders, the size of the selection toggle will get - // increased to prevent an accidental clicking of the item - // when trying to hit the toggle. - const int widgetHeight = size().height(); - const int widgetWidth = size().width(); - const int minMargin = 2; - - if (toggleSize + minMargin * 2 >= widgetHeight) { - pos.rx() -= (widgetHeight - toggleSize) / 2; - toggleSize = widgetHeight; - pos.setY(0); - } - if (toggleSize + minMargin * 2 >= widgetWidth) { - pos.ry() -= (widgetWidth - toggleSize) / 2; - toggleSize = widgetWidth; - pos.setX(0); - } - + const int padding = styleOption().padding; + const QRectF selectionRectMinusPadding = selectionRectFull().adjusted(padding, padding, -padding, -padding); + QPointF pos = selectionRectMinusPadding.topLeft(); if (QApplication::isRightToLeft()) { - pos.setX(widgetIconRect.right() - (pos.x() + toggleSize - widgetIconRect.left())); + pos.setX(selectionRectMinusPadding.right() - (pos.x() + toggleSize - selectionRectMinusPadding.left())); } return QRectF(pos, QSizeF(toggleSize, toggleSize)); @@ -725,7 +700,11 @@ QFont KStandardItemListWidget::customizedFont(const QFont &baseFont) const QPalette::ColorRole KStandardItemListWidget::normalTextColorRole() const { - return QPalette::Text; + if (isPressed()) { + return QPalette::HighlightedText; + } else { + return QPalette::Text; + } } void KStandardItemListWidget::setTextColor(const QColor &color) @@ -748,7 +727,7 @@ QColor KStandardItemListWidget::textColor(const QWidget &widget) const } const QPalette::ColorGroup group = isActiveWindow() && widget.hasFocus() ? QPalette::Active : QPalette::Inactive; - const QPalette::ColorRole role = isSelected() ? QPalette::HighlightedText : normalTextColorRole(); + const QPalette::ColorRole role = normalTextColorRole(); return styleOption().palette.color(group, role); } @@ -1136,7 +1115,6 @@ void KStandardItemListWidget::updatePixmapCache() } if (m_pixmap.isNull()) { - m_hoverPixmap = QPixmap(); return; } @@ -1147,17 +1125,6 @@ void KStandardItemListWidget::updatePixmapCache() if (m_isHidden) { KIconEffect::semiTransparent(m_pixmap); } - - if (m_layout == IconsLayout && isSelected()) { - const QColor color = palette().brush(QPalette::Normal, QPalette::Highlight).color(); - QImage image = m_pixmap.toImage(); - if (image.isNull()) { - m_hoverPixmap = QPixmap(); - return; - } - KIconEffect::colorize(image, color, 0.8f); - m_pixmap = QPixmap::fromImage(image); - } } int scaledIconSize = 0; @@ -1205,15 +1172,6 @@ void KStandardItemListWidget::updatePixmapCache() const QSizeF squareIconSize(widgetIconSize, widgetIconSize); m_iconRect = QRectF(squareIconPos, squareIconSize); } - - // Prepare the pixmap that is used when the item gets hovered - if (isHovered()) { - m_hoverPixmap = m_pixmap; - KIconEffect::toActive(m_hoverPixmap); - } else if (hoverOpacity() <= 0.0) { - // No hover animation is ongoing. Clear m_hoverPixmap to save memory. - m_hoverPixmap = QPixmap(); - } } void KStandardItemListWidget::updateTextsCache() @@ -1571,7 +1529,7 @@ void KStandardItemListWidget::updateAdditionalInfoTextColor() } else if (isSelected() && hasFocus && (m_layout != DetailsLayout || m_highlightEntireRow)) { // The detail text color needs to match the main text (HighlightedText) for the same level // of readability. We short circuit early here to avoid interpolating with another color. - m_additionalInfoTextColor = styleOption().palette.color(QPalette::HighlightedText); + m_additionalInfoTextColor = styleOption().palette.color(normalTextColorRole()); return; } else { c1 = styleOption().palette.text().color();