+ paintSeparator(painter, m_separatorColor);
+ paintRole(painter, m_roleBounds, m_roleColor);
+}
+
+void KItemListGroupHeader::roleChanged(const QByteArray& current, const QByteArray& previous)
+{
+ Q_UNUSED(current)
+ Q_UNUSED(previous)
+}
+
+void KItemListGroupHeader::dataChanged(const QVariant& current, const QVariant& previous)
+{
+ Q_UNUSED(current)
+ Q_UNUSED(previous)
+}
+
+void KItemListGroupHeader::styleOptionChanged(const KItemListStyleOption& current, const KItemListStyleOption& previous)
+{
+ Q_UNUSED(current)
+ Q_UNUSED(previous)
+}
+
+void KItemListGroupHeader::scrollOrientationChanged(Qt::Orientation current, Qt::Orientation previous)
+{
+ Q_UNUSED(current)
+ Q_UNUSED(previous)
+}
+
+void KItemListGroupHeader::itemIndexChanged(int current, int previous)
+{
+ Q_UNUSED(current)
+ Q_UNUSED(previous)
+}
+
+void KItemListGroupHeader::resizeEvent(QGraphicsSceneResizeEvent* event)
+{
+ QGraphicsWidget::resizeEvent(event);
+ if (event->oldSize().height() != event->newSize().height()) {
+ m_dirtyCache = true;
+ }
+}
+
+void KItemListGroupHeader::updateCache()
+{
+ Q_ASSERT(m_dirtyCache);
+
+ // Calculate the role- and line-color. No alphablending is used for
+ // performance reasons.
+ const QColor c1 = textColor();
+ const QColor c2 = baseColor();
+ m_separatorColor = mixedColor(c1, c2, 10);
+ m_roleColor = mixedColor(c1, c2, 60);
+
+ const int padding = qMax(1, m_styleOption.padding);
+ const int horizontalMargin = qMax(2, m_styleOption.horizontalMargin);
+
+ const QFontMetrics fontMetrics(m_styleOption.font);
+ const qreal roleHeight = fontMetrics.height();
+
+ const int y = (m_scrollOrientation == Qt::Vertical) ? padding : horizontalMargin;
+
+ m_roleBounds = QRectF(horizontalMargin + padding,
+ y,
+ size().width() - 2 * padding - horizontalMargin,
+ roleHeight);
+
+ m_dirtyCache = false;
+}
+
+QColor KItemListGroupHeader::mixedColor(const QColor& c1, const QColor& c2, int c1Percent)
+{
+ Q_ASSERT(c1Percent >= 0 && c1Percent <= 100);
+
+ const int c2Percent = 100 - c1Percent;
+ return QColor((c1.red() * c1Percent + c2.red() * c2Percent) / 100,
+ (c1.green() * c1Percent + c2.green() * c2Percent) / 100,
+ (c1.blue() * c1Percent + c2.blue() * c2Percent) / 100);
+}
+
+QPalette::ColorRole KItemListGroupHeader::normalTextColorRole() const
+{
+ return QPalette::Text;
+}
+
+QPalette::ColorRole KItemListGroupHeader::normalBaseColorRole() const
+{
+ return QPalette::Window;
+}
+
+QColor KItemListGroupHeader::textColor() const
+{
+ const QPalette::ColorGroup group = isActiveWindow() ? QPalette::Active : QPalette::Inactive;
+ return styleOption().palette.color(group, normalTextColorRole());
+}
+
+QColor KItemListGroupHeader::baseColor() const
+{
+ const QPalette::ColorGroup group = isActiveWindow() ? QPalette::Active : QPalette::Inactive;
+ return styleOption().palette.color(group, normalBaseColorRole());