summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNorwegian Rock Cat <qt-info@nokia.com>2009-05-08 17:57:54 +0200
committerNorwegian Rock Cat <qt-info@nokia.com>2009-05-08 17:57:54 +0200
commitd9be6eabe4b78751efb0e37099cf9c5044699d5a (patch)
tree40f059a79d7a4ad4ef216aa7171a34583efcdac7
parent33b94de2223307f5daefb88f6c9641421acd5135 (diff)
Some more drawing.
-rw-r--r--example/simple/main.cpp6
-rw-r--r--src/qtsegmentcontrol.cpp37
2 files changed, 43 insertions, 0 deletions
diff --git a/example/simple/main.cpp b/example/simple/main.cpp
index 6b7c6d2..0da6f18 100644
--- a/example/simple/main.cpp
+++ b/example/simple/main.cpp
@@ -11,6 +11,12 @@ int main(int argc, char **argv)
widget.resize(200, 200);
QtSegmentControl *segmentControl = new QtSegmentControl(&widget);
segmentControl->setCount(5);
+ segmentControl->setSegmentText(0, "Homer");
+ segmentControl->setSegmentText(1, "Marge");
+ segmentControl->setSegmentText(2, "Bart");
+ segmentControl->setSegmentText(3, "Lisa");
+ segmentControl->setSegmentText(4, "Maggie");
+
QVBoxLayout *vboxlayout = new QVBoxLayout(&widget);
vboxlayout->addWidget(segmentControl);
widget.show();
diff --git a/src/qtsegmentcontrol.cpp b/src/qtsegmentcontrol.cpp
index 39e5740..ce04969 100644
--- a/src/qtsegmentcontrol.cpp
+++ b/src/qtsegmentcontrol.cpp
@@ -7,6 +7,24 @@
#ifdef Q_WS_MAC
#include <Carbon/Carbon.h>
+
+ThemeDrawState getDrawState(QStyle::State flags)
+{
+ ThemeDrawState tds = kThemeStateActive;
+ if (flags & QStyle::State_Sunken) {
+ tds = kThemeStatePressed;
+ } else if (flags & QStyle::State_Active) {
+ if (!(flags & QStyle::State_Enabled))
+ tds = kThemeStateUnavailable;
+ } else {
+ if (flags & QStyle::State_Enabled)
+ tds = kThemeStateInactive;
+ else
+ tds = kThemeStateUnavailableInactive;
+ }
+ return tds;
+}
+
#endif
struct SegmentInfo {
@@ -61,7 +79,26 @@ protected:
static void drawSegmentControlSegment(const QStyleOption *option,
QPainter *painter, QWidget *widget = 0)
{
+#ifndef Q_WS_MAC
painter->fillRect(option->rect, Qt::blue);
+#else
+ if (const QtStyleOptionSegmentControlSegment *segment
+ = qstyleoption_cast<const QtStyleOptionSegmentControlSegment *>(option)) {
+ CGContextRef cg = qt_mac_cg_context(painter->device());
+ HIThemeSegmentDrawInfo sgi;
+ sgi.version = 0;
+ sgi.state = getDrawState(segment->state);
+ sgi.value = (segment->state & QStyle::State_Selected) ? kThemeButtonOn : kThemeButtonOff;
+ sgi.size = kHIThemeSegmentSizeNormal;
+ sgi.kind = kHIThemeSegmentKindNormal;
+ sgi.position = sgi.position;
+ sgi.adornment = kHIThemeSegmentAdornmentNone;
+ HIRect hirect = CGRectMake(segment->rect.x(), segment->rect.y(),
+ segment->rect.width(), segment->rect.height());
+ HIThemeDrawSegment(&hirect, &sgi, cg, kHIThemeOrientationNormal);
+ CFRelease(cg);
+ }
+#endif
}
QtSegmentControl::QtSegmentControl(QWidget *parent)