Make group headers mirror rtl

This commit is contained in:
Jan Blackquill 2022-01-21 18:42:20 -05:00 committed by Janet Blackquill
parent d71b617205
commit 65846125d7
5 changed files with 27 additions and 9 deletions

View file

@ -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)

View file

@ -94,6 +94,7 @@ protected:
private:
void updateCache();
void updateSize();
static QColor mixedColor(const QColor& c1, const QColor& c2, int c1Percent = 50);

View file

@ -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 {
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;
}
}

View file

@ -35,7 +35,7 @@ private:
private:
bool m_dirtyCache;
QStaticText m_text;
QString m_text;
QPixmap m_pixmap;
};
#endif

View file

@ -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()) {