diff options
author | Jens Bache-Wiig <jbache@trolltech.com> | 2009-07-10 15:32:15 +0200 |
---|---|---|
committer | Jens Bache-Wiig <jbache@trolltech.com> | 2009-07-10 15:32:15 +0200 |
commit | 1ce94e2d48066a7bfa43ed00ce1027dc1023fa53 (patch) | |
tree | 2387c8886fa62e522138fcca15c6f470b8259b0f | |
parent | c84c9225b1870c00c7812179f556b00652c3a8db (diff) |
Fixes: Some more style fixes
-rw-r--r-- | src/qtsegmentcontrol.cpp | 46 |
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; |