diff options
| author | Peter Penz <[email protected]> | 2011-10-26 01:17:57 +0200 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2011-10-26 01:18:53 +0200 |
| commit | 528262a6be4ab2ad7e17860a281ea80b90c1605b (patch) | |
| tree | 5e436411f713a980f1a9974f351472c69a4f5a04 /src/kitemviews/kitemlistgroupheader.cpp | |
| parent | 82b56ca6fd8831a896d1f6584b3a7dc0df6a8f85 (diff) | |
Group header fixes
- Simplify header for the horizontal scroll direction
- Fix issue that orientation change was not forwarded to the header
Diffstat (limited to 'src/kitemviews/kitemlistgroupheader.cpp')
| -rw-r--r-- | src/kitemviews/kitemlistgroupheader.cpp | 69 |
1 files changed, 39 insertions, 30 deletions
diff --git a/src/kitemviews/kitemlistgroupheader.cpp b/src/kitemviews/kitemlistgroupheader.cpp index 0cc04dc25..a63ad8d09 100644 --- a/src/kitemviews/kitemlistgroupheader.cpp +++ b/src/kitemviews/kitemlistgroupheader.cpp @@ -44,8 +44,7 @@ KItemListGroupHeader::KItemListGroupHeader(QGraphicsWidget* parent) : KItemListGroupHeader::~KItemListGroupHeader() { - delete m_leftBorderCache; - delete m_rightBorderCache; + deleteCache(); } void KItemListGroupHeader::setRole(const QByteArray& role) @@ -96,7 +95,11 @@ void KItemListGroupHeader::setScrollOrientation(Qt::Orientation orientation) if (m_scrollOrientation != orientation) { const Qt::Orientation previous = m_scrollOrientation; m_scrollOrientation = orientation; - m_dirtyCache = true; + if (orientation == Qt::Vertical) { + m_dirtyCache = true; + } else { + deleteCache(); + } scrollOrientationChanged(orientation, previous); } } @@ -108,13 +111,19 @@ Qt::Orientation KItemListGroupHeader::scrollOrientation() const void KItemListGroupHeader::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) { + Q_UNUSED(option); + Q_UNUSED(widget); + + if (m_scrollOrientation == Qt::Horizontal) { + Q_ASSERT(!m_leftBorderCache); + Q_ASSERT(!m_rightBorderCache); + return; + } + if (m_dirtyCache) { updateCache(); } - Q_UNUSED(option); - Q_UNUSED(widget); - const int leftBorderX = m_leftBorderCache->width() + 1; const int rightBorderX = size().width() - m_rightBorderCache->width() - 2; @@ -161,8 +170,7 @@ void KItemListGroupHeader::updateCache() { Q_ASSERT(m_dirtyCache); - delete m_leftBorderCache; - delete m_rightBorderCache; + deleteCache(); const int length = qMax(int(size().height() - 1), 1); m_leftBorderCache = new QPixmap(length, length); @@ -210,33 +218,34 @@ void KItemListGroupHeader::updateCache() QPainter painter(m_rightBorderCache); painter.setPen(m_outlineColor); - const int right = length - 1; - if (m_scrollOrientation == Qt::Vertical) { - // 1. Draw top horizontal line - painter.drawLine(0, 0, length - 3, 0); + // 1. Draw top horizontal line + painter.drawLine(0, 0, length - 3, 0); - // 2. Draw vertical line with gradient - const QPoint start(right, 3); - QLinearGradient gradient(start, QPoint(right, length)); - gradient.setColorAt(0, m_outlineColor); - gradient.setColorAt(1, Qt::transparent); - painter.fillRect(QRect(start, QSize(1, length - start.y())), gradient); + // 2. Draw vertical line with gradient + const int right = length - 1; + const QPoint start(right, 3); + QLinearGradient gradient(start, QPoint(right, length)); + gradient.setColorAt(0, m_outlineColor); + gradient.setColorAt(1, Qt::transparent); + painter.fillRect(QRect(start, QSize(1, length - start.y())), gradient); - // 3. Draw arc - painter.setRenderHint(QPainter::Antialiasing); - QRectF arc(QPointF(length - 5, 0), QSizeF(4, 4)); - arc.translate(0.5, 0.5); - painter.drawArc(arc, 0, 1440); - } else { - // Draw a horizontal gradiented line - QLinearGradient gradient(QPoint(0, 0), QPoint(length, 0)); - gradient.setColorAt(0, m_outlineColor); - gradient.setColorAt(1, Qt::transparent); - painter.fillRect(QRect(QPoint(0, 0), QSize(length, 1)), gradient); - } + // 3. Draw arc + painter.setRenderHint(QPainter::Antialiasing); + QRectF arc(QPointF(length - 5, 0), QSizeF(4, 4)); + arc.translate(0.5, 0.5); + painter.drawArc(arc, 0, 1440); } m_dirtyCache = false; } +void KItemListGroupHeader::deleteCache() +{ + delete m_leftBorderCache; + m_leftBorderCache = 0; + + delete m_rightBorderCache; + m_rightBorderCache = 0; +} + #include "kitemlistgroupheader.moc" |
