From 65846125d7f4dd90acd69abf73161607ba76cc8b Mon Sep 17 00:00:00 2001 From: Jan Blackquill Date: Fri, 21 Jan 2022 18:42:20 -0500 Subject: [PATCH] Make group headers mirror rtl --- src/kitemviews/kitemlistgroupheader.cpp | 10 +++++++++- src/kitemviews/kitemlistgroupheader.h | 1 + src/kitemviews/kstandarditemlistgroupheader.cpp | 17 ++++++++++------- src/kitemviews/kstandarditemlistgroupheader.h | 2 +- .../private/kitemlistheaderwidget.cpp | 6 ++++++ 5 files changed, 27 insertions(+), 9 deletions(-) diff --git a/src/kitemviews/kitemlistgroupheader.cpp b/src/kitemviews/kitemlistgroupheader.cpp index 80dd94149b..f0ff52503d 100644 --- a/src/kitemviews/kitemlistgroupheader.cpp +++ b/src/kitemviews/kitemlistgroupheader.cpp @@ -161,6 +161,7 @@ void KItemListGroupHeader::resizeEvent(QGraphicsSceneResizeEvent* event) if (event->oldSize().height() != event->newSize().height()) { m_dirtyCache = true; } + updateSize(); } void KItemListGroupHeader::updateCache() @@ -174,6 +175,13 @@ void KItemListGroupHeader::updateCache() m_separatorColor = mixedColor(c1, c2, 10); m_roleColor = mixedColor(c1, c2, 60); + updateSize(); + + m_dirtyCache = false; +} + +void KItemListGroupHeader::updateSize() +{ const int padding = qMax(1, m_styleOption.padding); const int horizontalMargin = qMax(2, m_styleOption.horizontalMargin); @@ -187,7 +195,7 @@ void KItemListGroupHeader::updateCache() size().width() - 2 * padding - horizontalMargin, roleHeight); - m_dirtyCache = false; + update(); } QColor KItemListGroupHeader::mixedColor(const QColor& c1, const QColor& c2, int c1Percent) diff --git a/src/kitemviews/kitemlistgroupheader.h b/src/kitemviews/kitemlistgroupheader.h index 4ba4690561..48af1e9e0d 100644 --- a/src/kitemviews/kitemlistgroupheader.h +++ b/src/kitemviews/kitemlistgroupheader.h @@ -94,6 +94,7 @@ protected: private: void updateCache(); + void updateSize(); static QColor mixedColor(const QColor& c1, const QColor& c2, int c1Percent = 50); diff --git a/src/kitemviews/kstandarditemlistgroupheader.cpp b/src/kitemviews/kstandarditemlistgroupheader.cpp index 22eefe5eac..28497ddfc2 100644 --- a/src/kitemviews/kstandarditemlistgroupheader.cpp +++ b/src/kitemviews/kstandarditemlistgroupheader.cpp @@ -17,8 +17,7 @@ KStandardItemListGroupHeader::KStandardItemListGroupHeader(QGraphicsWidget* pare m_text(), m_pixmap() { - m_text.setTextFormat(Qt::PlainText); - m_text.setPerformanceHint(QStaticText::AggressiveCaching); + } KStandardItemListGroupHeader::~KStandardItemListGroupHeader() @@ -37,7 +36,7 @@ void KStandardItemListGroupHeader::paintRole(QPainter* painter, const QRectF& ro { if (m_pixmap.isNull()) { painter->setPen(color); - painter->drawStaticText(roleBounds.topLeft(), m_text); + painter->drawText(roleBounds, 0, m_text); } else { painter->drawPixmap(roleBounds.topLeft(), m_pixmap); } @@ -55,7 +54,11 @@ void KStandardItemListGroupHeader::paintSeparator(QPainter* painter, const QColo if (scrollOrientation() == Qt::Horizontal) { painter->drawLine(0, 0, 0, size().height() - 1); } else { - painter->drawLine(0, 0, size().width() - 1, 0); + if (layoutDirection() == Qt::LeftToRight) { + painter->drawLine(0, 0, size().width() - 1, 0); + } else { + painter->drawLine(1, 0, size().width(), 0); + } } } @@ -75,7 +78,7 @@ void KStandardItemListGroupHeader::dataChanged(const QVariant& current, const QV void KStandardItemListGroupHeader::resizeEvent(QGraphicsSceneResizeEvent* event) { - QGraphicsWidget::resizeEvent(event); + KItemListGroupHeader::resizeEvent(event); m_dirtyCache = true; } @@ -87,7 +90,7 @@ void KStandardItemListGroupHeader::updateCache() const qreal maxWidth = size().width() - 4 * styleOption().padding; if (role() == "rating") { - m_text.setText(QString()); + m_text = QString(); const qreal height = styleOption().fontMetrics.ascent(); const QSizeF pixmapSize(qMin(height * 5, maxWidth), height); @@ -104,7 +107,7 @@ void KStandardItemListGroupHeader::updateCache() QFontMetricsF fontMetrics(font()); const QString text = fontMetrics.elidedText(data().toString(), Qt::ElideRight, maxWidth); - m_text.setText(text); + m_text = text; } } diff --git a/src/kitemviews/kstandarditemlistgroupheader.h b/src/kitemviews/kstandarditemlistgroupheader.h index ff428c4eae..965bf995cf 100644 --- a/src/kitemviews/kstandarditemlistgroupheader.h +++ b/src/kitemviews/kstandarditemlistgroupheader.h @@ -35,7 +35,7 @@ private: private: bool m_dirtyCache; - QStaticText m_text; + QString m_text; QPixmap m_pixmap; }; #endif diff --git a/src/kitemviews/private/kitemlistheaderwidget.cpp b/src/kitemviews/private/kitemlistheaderwidget.cpp index 8b39c25fe2..5fb929e520 100644 --- a/src/kitemviews/private/kitemlistheaderwidget.cpp +++ b/src/kitemviews/private/kitemlistheaderwidget.cpp @@ -420,6 +420,12 @@ void KItemListHeaderWidget::paintRole(QPainter* painter, // The following code is based on the code from QHeaderView::paintSection(). // SPDX-FileCopyrightText: 2011 Nokia Corporation and/or its subsidiary(-ies). QStyleOptionHeader option; + option.direction = widget->layoutDirection(); + option.textAlignment = + widget->layoutDirection() == Qt::LeftToRight + ? Qt::AlignLeft + : Qt::AlignRight; + option.section = orderIndex; option.state = QStyle::State_None | QStyle::State_Raised | QStyle::State_Horizontal; if (isEnabled()) {