KItemListViewLayouter: handle grid view layouts in RtL properly

This commit is contained in:
Jan Blackquill 2021-12-27 16:42:37 -05:00 committed by Janet Blackquill
parent f8f97f0593
commit b81d3fbbbb

View file

@ -9,6 +9,9 @@
#include "kitemlistsizehintresolver.h"
#include "kitemviews/kitemmodelbase.h"
#include <QGuiApplication>
#include <QScopeGuard>
// #define KITEMLISTVIEWLAYOUTER_DEBUG
KItemListViewLayouter::KItemListViewLayouter(KItemListSizeHintResolver* sizeHintResolver, QObject* parent) :
@ -343,7 +346,13 @@ void KItemListViewLayouter::markAsDirty()
void KItemListViewLayouter::doLayout()
{
if (m_dirty) {
// we always want to update visible indexes after performing a layout
auto qsg = qScopeGuard([this] { updateVisibleIndexes(); });
if (!m_dirty) {
return;
}
#ifdef KITEMLISTVIEWLAYOUTER_DEBUG
QElapsedTimer timer;
timer.start();
@ -392,7 +401,7 @@ void KItemListViewLayouter::doLayout()
// Calculate the offset of each column, i.e., the x-coordinate where the column starts.
m_columnOffsets.resize(m_columnCount);
qreal currentOffset = m_xPosInc;
qreal currentOffset = QGuiApplication::isRightToLeft() ? widthForColumns : m_xPosInc;
if (grouped && horizontalScrolling) {
// All group headers will always be aligned on the top and not
@ -400,10 +409,14 @@ void KItemListViewLayouter::doLayout()
currentOffset += m_groupHeaderHeight;
}
for (int column = 0; column < m_columnCount; ++column) {
if (QGuiApplication::isLeftToRight()) for (int column = 0; column < m_columnCount; ++column) {
m_columnOffsets[column] = currentOffset;
currentOffset += m_columnWidth;
}
else for (int column = 0; column < m_columnCount; ++column) {
m_columnOffsets[column] = currentOffset - m_columnWidth;
currentOffset -= m_columnWidth;
}
// Prepare the QVector which stores the y-coordinate for each new row.
int numberOfRows = (itemCount + m_columnCount - 1) / m_columnCount;
@ -504,9 +517,6 @@ void KItemListViewLayouter::doLayout()
qCDebug(DolphinDebug) << "[TIME] doLayout() for " << m_model->count() << "items:" << timer.elapsed();
#endif
m_dirty = false;
}
updateVisibleIndexes();
}
void KItemListViewLayouter::updateVisibleIndexes()