diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/kitemviews/kitemlistcontroller.cpp | 39 | ||||
| -rw-r--r-- | src/kitemviews/kitemlistview.cpp | 4 | ||||
| -rw-r--r-- | src/kitemviews/kitemlistwidget.cpp | 72 | ||||
| -rw-r--r-- | src/kitemviews/kitemlistwidget.h | 26 | ||||
| -rw-r--r-- | src/kitemviews/kstandarditemlistwidget.cpp | 108 | ||||
| -rw-r--r-- | src/kitemviews/kstandarditemlistwidget.h | 5 | ||||
| -rw-r--r-- | src/views/dolphinitemlistview.cpp | 5 |
7 files changed, 138 insertions, 121 deletions
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp index cd60c3a41..fdde48abc 100644 --- a/src/kitemviews/kitemlistcontroller.cpp +++ b/src/kitemviews/kitemlistcontroller.cpp @@ -675,6 +675,10 @@ bool KItemListController::mouseReleaseEvent(QGraphicsSceneMouseEvent *event, con return false; } + for (KItemListWidget *widget : m_view->visibleItemListWidgets()) { + widget->setPressed(false); + } + if (m_view->m_tapAndHoldIndicator->isActive()) { m_view->m_tapAndHoldIndicator->setActive(false); } @@ -990,7 +994,7 @@ bool KItemListController::hoverMoveEvent(QGraphicsSceneHoverEvent *event, const // we also unhover any old expansion toggle hovers, in case the mouse movement from expansion toggle to icon+text is too fast (i.e. newHoveredWidget is never null between the transition) unhoverOldExpansionWidget(); - const bool isOverIconAndText = newHoveredWidget->iconRect().contains(mappedPos) || newHoveredWidget->textRect().contains(mappedPos); + const bool isOverIconAndText = newHoveredWidget->selectionRectCore().contains(mappedPos); const bool hasMultipleSelection = m_selectionManager->selectedItems().count() > 1; if (hasMultipleSelection && !isOverIconAndText) { @@ -1029,6 +1033,7 @@ bool KItemListController::hoverLeaveEvent(QGraphicsSceneHoverEvent *event, const const auto widgets = m_view->visibleItemListWidgets(); for (KItemListWidget *widget : widgets) { + widget->setPressed(false); if (widget->isHovered()) { widget->setHovered(false); Q_EMIT itemUnhovered(widget->index()); @@ -1365,9 +1370,8 @@ void KItemListController::slotRubberBandChanged() const QRectF widgetRect = m_view->itemRect(index); if (widgetRect.intersects(rubberBandRect)) { // Select the full row intersecting with the rubberband rectangle - const QRectF selectionRect = widget->selectionRect().translated(widgetRect.topLeft()); - const QRectF iconRect = widget->iconRect().translated(widgetRect.topLeft()); - if (selectionRect.intersects(rubberBandRect) || iconRect.intersects(rubberBandRect)) { + const QRectF selectionRect = widget->selectionRectFull().translated(widgetRect.topLeft()); + if (selectionRect.intersects(rubberBandRect)) { selectedItems.insert(index); } } @@ -1467,7 +1471,7 @@ KItemListWidget *KItemListController::widgetForPos(const QPointF &pos) const const auto widgets = m_view->visibleItemListWidgets(); for (KItemListWidget *widget : widgets) { const QPointF mappedPos = widget->mapFromItem(m_view, pos); - if (widget->contains(mappedPos) || widget->selectionRect().contains(mappedPos)) { + if (widget->contains(mappedPos)) { return widget; } } @@ -1486,7 +1490,7 @@ KItemListWidget *KItemListController::widgetForDropPos(const QPointF &pos) const const auto widgets = m_view->visibleItemListWidgets(); for (KItemListWidget *widget : widgets) { const QPointF mappedPos = widget->mapFromItem(m_view, pos); - if (widget->contains(mappedPos)) { + if (widget->selectionRectCore().contains(mappedPos)) { return widget; } } @@ -1641,6 +1645,7 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier // simplify the overall logic and possibilities both for users and devs. const bool leftClick = buttons & Qt::LeftButton; const bool rightClick = buttons & Qt::RightButton; + const bool singleClickActivation = m_view->style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick); // The previous selection is cleared if either // 1. The selection mode is SingleSelection, or @@ -1661,11 +1666,11 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier if (selectedItemsCount > 1 && m_pressedIndex.has_value()) { const auto row = m_view->m_visibleItems.value(m_pressedIndex.value()); const auto mappedPos = row->mapFromItem(m_view, pos); - if (pressedItemAlreadySelected || row->iconRect().contains(mappedPos) || row->textRect().contains(mappedPos)) { + if (row->selectionRectCore().contains(mappedPos)) { // we are indeed inside the text/icon rect, keep m_pressedIndex what it is // and short-circuit for single-click activation (it will then propagate to onRelease and activate the item) // or we just keep going for double-click activation - if (m_view->style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick) || m_singleClickActivationEnforced) { + if (singleClickActivation || m_singleClickActivationEnforced) { if (!pressedItemAlreadySelected) { // An unselected item was clicked directly while deselecting multiple other items so we mark it "current". m_selectionManager->setCurrentItem(m_pressedIndex.value()); @@ -1676,6 +1681,9 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier m_selectionManager->setSelected(m_pressedIndex.value(), 1, KItemListSelectionManager::Toggle); } } + if (leftClick) { + row->setPressed(true); + } return true; // event handled, don't create rubber band } } else { @@ -1723,11 +1731,16 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier if (m_pressedIndex.has_value()) { // The hover highlight area of an item is being pressed. const auto row = m_view->m_visibleItems.value(m_pressedIndex.value()); // anything outside of row.contains() will be the empty region of the row rect - const bool hitTargetIsRowEmptyRegion = !row->contains(row->mapFromItem(m_view, pos)); + + const bool hitTargetIsRowEmptyRegion = !row->selectionRectCore().contains(row->mapFromItem(m_view, pos)); // again, when this method returns false, a rubberBand selection is created as the event is not consumed; // createRubberBand here tells us whether to return true or false. bool createRubberBand = (hitTargetIsRowEmptyRegion && m_selectionManager->selectedItems().isEmpty()); + if (leftClick) { + row->setPressed(true); + } + if (rightClick && hitTargetIsRowEmptyRegion) { // We have a right click outside the icon and text rect but within the hover highlight area. // We don't want items to get selected through this, so we return now. @@ -1741,8 +1754,7 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier break; case SingleSelection: - if (!leftClick || shiftOrControlPressed - || (!m_view->style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick) && !m_singleClickActivationEnforced)) { + if (!leftClick || shiftOrControlPressed || (!singleClickActivation && !m_singleClickActivationEnforced)) { m_selectionManager->setSelected(m_pressedIndex.value()); } break; @@ -1755,7 +1767,7 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier // We rule out the latter, if the item is not clicked directly and was unselected previously. const auto row = m_view->m_visibleItems.value(m_pressedIndex.value()); const auto mappedPos = row->mapFromItem(m_view, pos); - if (!row->iconRect().contains(mappedPos) && !row->textRect().contains(mappedPos) && !pressedItemAlreadySelected) { + if (!row->selectionRectCore().contains(mappedPos)) { createRubberBand = true; } else { m_selectionManager->setSelected(m_pressedIndex.value(), 1, KItemListSelectionManager::Toggle); @@ -1765,8 +1777,7 @@ bool KItemListController::onPress(const QPointF &pos, const Qt::KeyboardModifier } } else if (!shiftPressed || !m_selectionManager->isAnchoredSelectionActive()) { // Select the pressed item and start a new anchored selection - if (!leftClick || shiftOrControlPressed - || (!m_view->style()->styleHint(QStyle::SH_ItemView_ActivateItemOnSingleClick) && !m_singleClickActivationEnforced)) { + if (!leftClick || shiftOrControlPressed || (!singleClickActivation && !m_singleClickActivationEnforced)) { m_selectionManager->setSelected(m_pressedIndex.value(), 1, KItemListSelectionManager::Select); } m_selectionManager->beginAnchoredSelection(m_pressedIndex.value()); diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp index 265e41e6c..3ed4df3e7 100644 --- a/src/kitemviews/kitemlistview.cpp +++ b/src/kitemviews/kitemlistview.cpp @@ -425,7 +425,7 @@ std::optional<int> KItemListView::itemAt(const QPointF &pos) const const KItemListWidget *widget = it.value(); const QPointF mappedPos = widget->mapFromItem(this, pos); - if (widget->contains(mappedPos) || widget->selectionRect().contains(mappedPos)) { + if (widget->contains(mappedPos)) { return it.key(); } } @@ -542,7 +542,7 @@ QRectF KItemListView::itemContextRect(int index) const const KItemListWidget *widget = m_visibleItems.value(index); if (widget) { - contextRect = widget->iconRect() | widget->textRect(); + contextRect = widget->selectionRectCore(); contextRect.translate(itemRect(index).topLeft()); } diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp index baf244572..c06e46339 100644 --- a/src/kitemviews/kitemlistwidget.cpp +++ b/src/kitemviews/kitemlistwidget.cpp @@ -37,6 +37,7 @@ KItemListWidget::KItemListWidget(KItemListWidgetInformant *informant, QGraphicsI , m_expansionAreaHovered(false) , m_alternateBackground(false) , m_enabledSelectionToggle(false) + , m_clickHighlighted(false) , m_data() , m_visibleRoles() , m_columnWidths() @@ -124,23 +125,11 @@ void KItemListWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *o painter->fillRect(backgroundRect, backgroundColor); } - if (m_selected && m_editedRole.isEmpty()) { + if ((m_selected || m_current) && m_editedRole.isEmpty()) { const QStyle::State activeState(isActiveWindow() && widget->hasFocus() ? QStyle::State_Active : 0); drawItemStyleOption(painter, widget, activeState | QStyle::State_Enabled | QStyle::State_Selected | QStyle::State_Item); } - if (m_current && m_editedRole.isEmpty()) { - QStyleOptionFocusRect focusRectOption; - initStyleOption(&focusRectOption); - focusRectOption.rect = textFocusRect().toRect(); - focusRectOption.state = QStyle::State_Enabled | QStyle::State_Item | QStyle::State_KeyboardFocusChange; - if (m_selected && widget->hasFocus()) { - focusRectOption.state |= QStyle::State_Selected; - } - - style()->drawPrimitive(QStyle::PE_FrameFocusRect, &focusRectOption, painter, widget); - } - if (m_hoverOpacity > 0.0) { if (!m_hoverCache) { // Initialize the m_hoverCache pixmap to improve the drawing performance @@ -419,7 +408,7 @@ bool KItemListWidget::contains(const QPointF &point) const return false; } - return iconRect().contains(point) || textRect().contains(point) || expansionToggleRect().contains(point) || selectionToggleRect().contains(point); + return selectionRectFull().contains(point) || expansionToggleRect().contains(point); } QRectF KItemListWidget::textFocusRect() const @@ -616,15 +605,66 @@ void KItemListWidget::clearHoverCache() m_hoverCache = nullptr; } +bool KItemListWidget::isPressed() const +{ + return m_clickHighlighted; +} + +void KItemListWidget::setPressed(bool enabled) +{ + if (m_clickHighlighted != enabled) { + m_clickHighlighted = enabled; + clearHoverCache(); + update(); + } +} + void KItemListWidget::drawItemStyleOption(QPainter *painter, QWidget *widget, QStyle::State styleState) { QStyleOptionViewItem viewItemOption; + constexpr int roundness = 5; // From Breeze style. + constexpr qreal penWidth = 1.5; initStyleOption(&viewItemOption); viewItemOption.state = styleState; viewItemOption.viewItemPosition = QStyleOptionViewItem::OnlyOne; viewItemOption.showDecorationSelected = true; - viewItemOption.rect = selectionRect().toRect(); - style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &viewItemOption, painter, widget); + viewItemOption.rect = selectionRectFull().toRect(); + QPainterPath path; + path.addRoundedRect(selectionRectFull().adjusted(penWidth, penWidth, -penWidth, -penWidth), roundness, roundness); + QColor backgroundColor{widget->palette().color(QPalette::Accent)}; + painter->setRenderHint(QPainter::Antialiasing); + bool current = m_current && styleState & QStyle::State_Active; + + // Background item, alpha values are from + // https://invent.kde.org/plasma/libplasma/-/blob/master/src/desktoptheme/breeze/widgets/viewitem.svg + backgroundColor.setAlphaF(0.0); + + if (m_clickHighlighted) { + backgroundColor.setAlphaF(1.0); + } else { + if (m_selected && m_hovered) { + backgroundColor.setAlphaF(0.40); + } else if (m_selected) { + backgroundColor.setAlphaF(0.32); + } else if (m_hovered) { + backgroundColor = widget->palette().color(QPalette::Text); + backgroundColor.setAlphaF(0.06); + } + } + + painter->fillPath(path, backgroundColor); + + // Focus decoration + if (current) { + QColor focusColor{widget->palette().color(QPalette::Accent)}; + focusColor = m_styleOption.palette.color(QPalette::Base).lightnessF() > 0.5 ? focusColor.darker(110) : focusColor.lighter(110); + focusColor.setAlphaF(m_selected || m_hovered ? 0.8 : 0.6); + // Set the pen color lighter or darker depending on background color + QPen pen{focusColor, penWidth}; + pen.setCosmetic(true); + painter->setPen(pen); + painter->drawPath(path); + } } #include "moc_kitemlistwidget.cpp" diff --git a/src/kitemviews/kitemlistwidget.h b/src/kitemviews/kitemlistwidget.h index 0e07d7ab5..b87a3b34e 100644 --- a/src/kitemviews/kitemlistwidget.h +++ b/src/kitemviews/kitemlistwidget.h @@ -98,6 +98,10 @@ public: void setHovered(bool hovered); bool isHovered() const; + /** Sets a purely visual pressed highlight effect. */ + void setPressed(bool enabled); + bool isPressed() const; + void setExpansionAreaHovered(bool hover); bool expansionAreaHovered() const; @@ -137,19 +141,14 @@ public: int iconSize() const; /** - * @return True if \a point is inside KItemListWidget::hoverRect(), - * KItemListWidget::textRect(), KItemListWidget::selectionToggleRect() + * @return True if \a point is inside KItemListWidget::selectionRectFull(), + * KItemListWidget::selectionToggleRect() * or KItemListWidget::expansionToggleRect(). * @reimp */ bool contains(const QPointF &point) const override; /** - * @return Rectangle for the area that shows the icon. - */ - virtual QRectF iconRect() const = 0; - - /** * @return Rectangle for the area that contains the text-properties. */ virtual QRectF textRect() const = 0; @@ -164,9 +163,17 @@ public: virtual QRectF textFocusRect() const; /** - * @return Rectangle around which a selection box should be drawn if the item is selected. + * Used for drawing the visuals, and situations where we want the behavior of the + * selection to match the visuals. + * + * @return The rectangle around selection. + */ + virtual QRectF selectionRectFull() const = 0; + + /** + * @return The core area of the item. All of it reacts exactly the same way to mouse clicks. */ - virtual QRectF selectionRect() const = 0; + virtual QRectF selectionRectCore() const = 0; /** * @return Rectangle for the selection-toggle that is used to select or deselect an item. @@ -258,6 +265,7 @@ private: bool m_expansionAreaHovered; bool m_alternateBackground; bool m_enabledSelectionToggle; + bool m_clickHighlighted; QHash<QByteArray, QVariant> m_data; QList<QByteArray> m_visibleRoles; QHash<QByteArray, qreal> m_columnWidths; 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<KStandardItemListWidget *>(this)->triggerCacheRefreshing(); - return m_iconRect; -} - QRectF KStandardItemListWidget::textRect() const { const_cast<KStandardItemListWidget *>(this)->triggerCacheRefreshing(); @@ -537,35 +530,36 @@ QRectF KStandardItemListWidget::textFocusRect() const return m_textRect; } -QRectF KStandardItemListWidget::selectionRect() const +QRectF KStandardItemListWidget::selectionRectFull() const { const_cast<KStandardItemListWidget *>(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<KStandardItemListWidget *>(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(); diff --git a/src/kitemviews/kstandarditemlistwidget.h b/src/kitemviews/kstandarditemlistwidget.h index 594d3e492..cabe3a8c9 100644 --- a/src/kitemviews/kstandarditemlistwidget.h +++ b/src/kitemviews/kstandarditemlistwidget.h @@ -105,10 +105,10 @@ public: void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override; - QRectF iconRect() const override; QRectF textRect() const override; QRectF textFocusRect() const override; - QRectF selectionRect() const override; + QRectF selectionRectFull() const override; + QRectF selectionRectCore() const override; QRectF expansionToggleRect() const override; QRectF selectionToggleRect() const override; QPixmap createDragPixmap(const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override; @@ -280,7 +280,6 @@ private: qreal m_columnWidthSum; QRectF m_iconRect; // Cache for KItemListWidget::iconRect() - QPixmap m_hoverPixmap; // Cache for modified m_pixmap when hovering the item QRectF m_textRect; diff --git a/src/views/dolphinitemlistview.cpp b/src/views/dolphinitemlistview.cpp index d31dc11ba..8529f23a7 100644 --- a/src/views/dolphinitemlistview.cpp +++ b/src/views/dolphinitemlistview.cpp @@ -194,8 +194,9 @@ void DolphinItemListView::updateGridSize() itemHeight = padding * 3 + iconSize + option.fontMetrics.lineSpacing(); - horizontalMargin = 4; - verticalMargin = 8; + const auto margin = style()->pixelMetric(QStyle::PM_SizeGripSize); + horizontalMargin = margin; + verticalMargin = margin; maxTextLines = IconsModeSettings::maximumTextLines(); break; } |
