From: Peter Penz Date: Tue, 27 Dec 2011 08:09:57 +0000 (+0100) Subject: Fix group-header clipping in compact mode X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/56f8ca24cc1a2f59185efb4d2a77b70672e7501a Fix group-header clipping in compact mode --- diff --git a/src/kitemviews/kitemlistviewlayouter.cpp b/src/kitemviews/kitemlistviewlayouter.cpp index b486a390b..60822adc7 100644 --- a/src/kitemviews/kitemlistviewlayouter.cpp +++ b/src/kitemviews/kitemlistviewlayouter.cpp @@ -234,7 +234,7 @@ QRectF KItemListViewLayouter::groupHeaderRect(int index) const pos.rx() = 0; size = QSizeF(m_size.width(), m_groupHeaderHeight); } else { - size = QSizeF(firstItemRect.width(), m_groupHeaderHeight); + size = QSizeF(minimumGroupHeaderWidth(), m_groupHeaderHeight); } return QRectF(pos, size); } @@ -293,10 +293,7 @@ void KItemListViewLayouter::doLayout() // Apply the unused width equally to each column const qreal unusedWidth = size.width() - m_columnCount * m_columnWidth; if (unusedWidth > 0) { - // [Comment #1] A cast to int is done on purpose to prevent rounding issues when - // drawing pixmaps and drawing text or other graphic primitives: Qt uses a different - // rastering algorithm for the upper/left of pixmaps - const qreal columnInc = int(unusedWidth / (m_columnCount + 1)); + const qreal columnInc = unusedWidth / (m_columnCount + 1); m_columnWidth += columnInc; m_xPosInc += columnInc; } @@ -367,9 +364,9 @@ void KItemListViewLayouter::doLayout() // (in average a character requires the halve width of the font height). // // TODO: Let the group headers provide a minimum width and respect this width here - const qreal minimumGroupHeaderWidth = int(m_groupHeaderHeight * 15 / 2); // See [Comment #1] - if (requiredItemHeight < minimumGroupHeaderWidth) { - requiredItemHeight = minimumGroupHeaderWidth; + const qreal headerWidth = minimumGroupHeaderWidth(); + if (requiredItemHeight < headerWidth) { + requiredItemHeight = headerWidth; } } @@ -511,4 +508,9 @@ bool KItemListViewLayouter::createGroupHeaders() return true; } +qreal KItemListViewLayouter::minimumGroupHeaderWidth() const +{ + return m_groupHeaderHeight * 15 / 2; +} + #include "kitemlistviewlayouter_p.moc" diff --git a/src/kitemviews/kitemlistviewlayouter_p.h b/src/kitemviews/kitemlistviewlayouter_p.h index 3d2f10906..dec99d054 100644 --- a/src/kitemviews/kitemlistviewlayouter_p.h +++ b/src/kitemviews/kitemlistviewlayouter_p.h @@ -120,6 +120,16 @@ private: void updateVisibleIndexes(); bool createGroupHeaders(); + /** + * @return Minimum width of group headers when grouping is enabled in the horizontal + * alignment mode. The header alignment is done like this: + * Header-1 Header-2 Header-3 + * Item 1 Item 4 Item 7 + * Item 2 Item 5 Item 8 + * Item 3 Item 6 Item 9 + */ + qreal minimumGroupHeaderWidth() const; + private: bool m_dirty; bool m_visibleIndexesDirty;