┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2011-08-14 16:10:11 +0200
committerPeter Penz <[email protected]>2011-08-14 16:11:57 +0200
commit188d1a9c7d11db2a98f5110fce6ff03afffcb2db (patch)
tree7a71381fdd89fc18e47fc1f10a64f7182b9d80f5 /src/kitemviews
parent547211575192508653e65bbc96f4d85580182eb4 (diff)
Move drawing of textbackground to KItemListWidget
As the textbounding-rectangle is now a property of KItemListWidget also the default visual appearance is moved now from KFileItemListWidget to KItemListWidget.
Diffstat (limited to 'src/kitemviews')
-rw-r--r--src/kitemviews/kfileitemlistwidget.cpp41
-rw-r--r--src/kitemviews/kfileitemlistwidget.h1
-rw-r--r--src/kitemviews/kitemlistwidget.cpp51
-rw-r--r--src/kitemviews/kitemlistwidget.h2
4 files changed, 53 insertions, 42 deletions
diff --git a/src/kitemviews/kfileitemlistwidget.cpp b/src/kitemviews/kfileitemlistwidget.cpp
index 36a7d65da..a8fe36c08 100644
--- a/src/kitemviews/kfileitemlistwidget.cpp
+++ b/src/kitemviews/kfileitemlistwidget.cpp
@@ -86,8 +86,6 @@ void KFileItemListWidget::paint(QPainter* painter, const QStyleOptionGraphicsIte
{
KItemListWidget::paint(painter, option, widget);
- painter->setRenderHint(QPainter::Antialiasing);
-
if (m_dirtyContent || m_dirtyLayout) {
const_cast<KFileItemListWidget*>(this)->updateCache();
}
@@ -112,25 +110,11 @@ void KFileItemListWidget::paint(QPainter* painter, const QStyleOptionGraphicsIte
const qreal opacity = painter->opacity();
painter->setOpacity(hoverOpacity() * opacity);
drawPixmap(painter, m_hoverPixmap);
-
- // Draw the hover background for the text
- QRectF textsBoundingRect = m_textBoundingRect;
- const qreal marginDiff = itemListStyleOption.margin / 2;
- textsBoundingRect.adjust(marginDiff, marginDiff, -marginDiff, -marginDiff);
- painter->setOpacity(hoverOpacity() * opacity * 0.1);
- painter->setPen(Qt::NoPen);
- painter->setBrush(itemListStyleOption.palette.text());
- painter->drawRoundedRect(textsBoundingRect, 4, 4);
-
painter->setOpacity(opacity);
} else {
drawPixmap(painter, m_pixmap);
}
- if (isCurrent()) {
- drawFocusIndicator(painter);
- }
-
painter->setFont(itemListStyleOption.font);
painter->setPen(itemListStyleOption.palette.text().color());
painter->drawStaticText(m_textPos[Name], m_text[Name]);
@@ -687,31 +671,6 @@ void KFileItemListWidget::drawPixmap(QPainter* painter, const QPixmap& pixmap)
}
}
-void KFileItemListWidget::drawFocusIndicator(QPainter* painter)
-{
- // Ideally style()->drawPrimitive(QStyle::PE_FrameFocusRect...)
- // should be used, but Oxygen only draws indicators within classes
- // derived from QAbstractItemView or Q3ListView. As a workaround
- // the indicator is drawn manually. Code copied from oxygenstyle.cpp
- // Copyright ( C ) 2009-2010 Hugo Pereira Da Costa <[email protected]>
- // TODO: Clarify with Oxygen maintainers how to proceed with this.
-
- const KItemListStyleOption& option = styleOption();
- const QPalette palette = option.palette;
- const QRect rect = m_textBoundingRect.toRect().adjusted(0, 0, 0, -1);
-
- QLinearGradient gradient(rect.bottomLeft(), rect.bottomRight());
- gradient.setColorAt(0.0, Qt::transparent);
- gradient.setColorAt(1.0, Qt::transparent);
- gradient.setColorAt(0.2, palette.color(QPalette::Text));
- gradient.setColorAt(0.8, palette.color(QPalette::Text));
-
- painter->setRenderHint(QPainter::Antialiasing, false);
- painter->setPen(QPen(gradient, 1));
- painter->drawLine(rect.bottomLeft(), rect.bottomRight());
- painter->setRenderHint(QPainter::Antialiasing, true);
-}
-
QPixmap KFileItemListWidget::pixmapForIcon(const QString& name, int size)
{
const KIcon icon(name);
diff --git a/src/kitemviews/kfileitemlistwidget.h b/src/kitemviews/kfileitemlistwidget.h
index e48d31aa9..03ab17b54 100644
--- a/src/kitemviews/kfileitemlistwidget.h
+++ b/src/kitemviews/kfileitemlistwidget.h
@@ -86,7 +86,6 @@ private:
QString roleText(TextId textId, const QVariant& roleValue) const;
void drawPixmap(QPainter* painter, const QPixmap& pixmap);
- void drawFocusIndicator(QPainter* painter);
static QPixmap pixmapForIcon(const QString& name, int size);
static TextId roleTextId(const QByteArray& role);
diff --git a/src/kitemviews/kitemlistwidget.cpp b/src/kitemviews/kitemlistwidget.cpp
index c9c62ad4a..86febed97 100644
--- a/src/kitemviews/kitemlistwidget.cpp
+++ b/src/kitemviews/kitemlistwidget.cpp
@@ -95,6 +95,8 @@ void KItemListWidget::paint(QPainter* painter, const QStyleOptionGraphicsItem* o
{
Q_UNUSED(option);
+ painter->setRenderHint(QPainter::Antialiasing);
+
const QRect iconBounds = iconBoundingRect().toRect();
if (m_selected) {
QStyleOptionViewItemV4 viewItemOption;
@@ -103,6 +105,12 @@ void KItemListWidget::paint(QPainter* painter, const QStyleOptionGraphicsItem* o
viewItemOption.state = QStyle::State_Enabled | QStyle::State_Selected | QStyle::State_Item;
viewItemOption.viewItemPosition = QStyleOptionViewItemV4::OnlyOne;
widget->style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &viewItemOption, painter, widget);
+
+ drawTextBackground(painter);
+ }
+
+ if (isCurrent()) {
+ drawFocusIndicator(painter);
}
if (m_hoverOpacity <= 0.0) {
@@ -110,6 +118,8 @@ void KItemListWidget::paint(QPainter* painter, const QStyleOptionGraphicsItem* o
}
if (!m_hoverCache) {
+ // Initialize the m_hoverCache pixmap to improve the drawing performance
+ // when fading the hover background
m_hoverCache = new QPixmap(iconBounds.size());
m_hoverCache->fill(Qt::transparent);
@@ -127,6 +137,7 @@ void KItemListWidget::paint(QPainter* painter, const QStyleOptionGraphicsItem* o
const qreal opacity = painter->opacity();
painter->setOpacity(m_hoverOpacity * opacity);
painter->drawPixmap(iconBounds.topLeft(), *m_hoverCache);
+ drawTextBackground(painter);
painter->setOpacity(opacity);
}
@@ -320,4 +331,44 @@ void KItemListWidget::clearCache()
m_hoverCache = 0;
}
+void KItemListWidget::drawFocusIndicator(QPainter* painter)
+{
+ // Ideally style()->drawPrimitive(QStyle::PE_FrameFocusRect...)
+ // should be used, but Oxygen only draws indicators within classes
+ // derived from QAbstractItemView or Q3ListView. As a workaround
+ // the indicator is drawn manually. Code copied from oxygenstyle.cpp
+ // Copyright ( C ) 2009-2010 Hugo Pereira Da Costa <[email protected]>
+ // TODO: Clarify with Oxygen maintainers how to proceed with this.
+
+ const KItemListStyleOption& option = styleOption();
+ const QPalette palette = option.palette;
+ const QRect rect = textBoundingRect().toRect().adjusted(0, 0, 0, -1);
+
+ QLinearGradient gradient(rect.bottomLeft(), rect.bottomRight());
+ gradient.setColorAt(0.0, Qt::transparent);
+ gradient.setColorAt(1.0, Qt::transparent);
+ gradient.setColorAt(0.2, palette.color(QPalette::Text));
+ gradient.setColorAt(0.8, palette.color(QPalette::Text));
+
+ painter->setRenderHint(QPainter::Antialiasing, false);
+ painter->setPen(QPen(gradient, 1));
+ painter->drawLine(rect.bottomLeft(), rect.bottomRight());
+ painter->setRenderHint(QPainter::Antialiasing, true);
+}
+
+void KItemListWidget::drawTextBackground(QPainter* painter)
+{
+ const qreal opacity = painter->opacity();
+
+ QRectF textBounds = textBoundingRect();
+ const qreal marginDiff = m_styleOption.margin / 2;
+ textBounds.adjust(marginDiff, marginDiff, -marginDiff, -marginDiff);
+ painter->setOpacity(opacity * 0.1);
+ painter->setPen(Qt::NoPen);
+ painter->setBrush(m_styleOption.palette.text());
+ painter->drawRoundedRect(textBounds, 4, 4);
+
+ painter->setOpacity(opacity);
+}
+
#include "kitemlistwidget.moc"
diff --git a/src/kitemviews/kitemlistwidget.h b/src/kitemviews/kitemlistwidget.h
index 6b766d1da..e3f3cb578 100644
--- a/src/kitemviews/kitemlistwidget.h
+++ b/src/kitemviews/kitemlistwidget.h
@@ -132,6 +132,8 @@ protected:
private:
void setHoverOpacity(qreal opacity);
void clearCache();
+ void drawFocusIndicator(QPainter* painter);
+ void drawTextBackground(QPainter* painter);
private:
Q_PROPERTY(qreal hoverOpacity READ hoverOpacity WRITE setHoverOpacity)