diff options
author | Norwegian Rock Cat <qt-info@nokia.com> | 2009-05-08 17:57:54 +0200 |
---|---|---|
committer | Norwegian Rock Cat <qt-info@nokia.com> | 2009-05-08 17:57:54 +0200 |
commit | d9be6eabe4b78751efb0e37099cf9c5044699d5a (patch) | |
tree | 40f059a79d7a4ad4ef216aa7171a34583efcdac7 | |
parent | 33b94de2223307f5daefb88f6c9641421acd5135 (diff) |
Some more drawing.
-rw-r--r-- | example/simple/main.cpp | 6 | ||||
-rw-r--r-- | src/qtsegmentcontrol.cpp | 37 |
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) |