From d9be6eabe4b78751efb0e37099cf9c5044699d5a Mon Sep 17 00:00:00 2001 From: Norwegian Rock Cat Date: Fri, 8 May 2009 17:57:54 +0200 Subject: Some more drawing. --- example/simple/main.cpp | 6 ++++++ src/qtsegmentcontrol.cpp | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) 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 + +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(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) -- cgit v1.2.3