summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJens Bache-Wiig <jbache@trolltech.com>2009-07-10 15:32:15 +0200
committerJens Bache-Wiig <jbache@trolltech.com>2009-07-10 15:32:15 +0200
commit1ce94e2d48066a7bfa43ed00ce1027dc1023fa53 (patch)
tree2387c8886fa62e522138fcca15c6f470b8259b0f
parentc84c9225b1870c00c7812179f556b00652c3a8db (diff)
Fixes: Some more style fixes
-rw-r--r--src/qtsegmentcontrol.cpp46
1 files changed, 31 insertions, 15 deletions
diff --git a/src/qtsegmentcontrol.cpp b/src/qtsegmentcontrol.cpp
index f438ae9..ef650ef 100644
--- a/src/qtsegmentcontrol.cpp
+++ b/src/qtsegmentcontrol.cpp
@@ -6,6 +6,7 @@
#include <QtGui/QStyleOption>
#include <QtGui/QMouseEvent>
#include <QtCore/QDebug>
+#include <QtGui/QPixmapCache>
#include "qtsegmentcontrol.h"
@@ -171,35 +172,50 @@ static void drawSegmentControlSegmentSegment(const QStyleOption *option, QPainte
bool selected = (segment->state & QStyle::State_Selected);
- QSize segmentSize = widget->rect().size();
- QPixmap pm(segmentSize);
- pm.fill(Qt::transparent);
- QPainter pmPainter(&pm);
- QStyleOption btnOpt = *option;
- btnOpt.rect = QRect(QPoint(0, 0), segmentSize);;
- if (selected)
- btnOpt.state |= QStyle::State_Sunken;
- else
- btnOpt.state |= QStyle::State_Raised;
-
- widget->style()->drawPrimitive(QStyle::PE_PanelButtonCommand, &btnOpt, &pmPainter, widget);
- pmPainter.end();
+ QPixmap pm;
+ QSize segmentSize = widget->rect().size();
+ QString key = QString("qt_segment %0 %1 %2").arg(option->state).arg(segmentSize.width()).arg(segmentSize.height());
+ if (!QPixmapCache::find(key, pm)) {
+ pm = QPixmap(segmentSize);
+ pm.fill(Qt::transparent);
+ QPainter pmPainter(&pm);
+ QStyleOptionButton btnOpt;
+ btnOpt.QStyleOption::operator =(*option);
+ btnOpt.rect = QRect(QPoint(0, 0), segmentSize);;
+ if (selected)
+ btnOpt.state |= QStyle::State_Sunken;
+ else
+ btnOpt.state |= QStyle::State_Raised;
+
+ widget->style()->drawPrimitive(QStyle::PE_PanelButtonCommand, &btnOpt, &pmPainter, widget);
+ pmPainter.end();
+ QPixmapCache::insert(key, pm);
+ }
+ int margin = widget->style()->pixelMetric(QStyle::PM_DefaultFrameWidth, option, widget);
switch (segment->position) {
case QtStyleOptionSegmentControlSegment::Beginning:
painter->setClipRect(option->rect);
+ painter->drawPixmap(0, 0, pm);
+ painter->setOpacity(0.6);
+ painter->setPen(option->palette.dark().color());
+ painter->drawLine(option->rect.topRight() + QPoint(-1, margin), option->rect.bottomRight() + QPoint(-1, -margin));
break;
case QtStyleOptionSegmentControlSegment::Middle:
painter->setClipRect(option->rect);
+ painter->drawPixmap(0, 0, pm);
+ painter->setPen(option->palette.dark().color());
+ painter->drawLine(option->rect.topRight() + QPoint(-1, margin), option->rect.bottomRight() + QPoint(-1, -margin));
break;
case QStyleOptionTab::End:
painter->setClipRect(option->rect);
+ painter->drawPixmap(0, 0, pm);
break;
case QStyleOptionTab::OnlyOneTab:
painter->setClipRect(option->rect);
+ painter->drawPixmap(0, 0, pm);
break;
}
- painter->drawPixmap(0, 0, pm);
painter->restore();
}
}
@@ -261,7 +277,7 @@ static QRect segmentElementRect(const QStyleOption *option, const QWidget *widge
} else
#endif
{
- retRect.adjust(-10, 0, 0, +10);
+ // retRect.adjust(-10, 0, 0, +10);
}
}
return retRect;