summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJens Bache-Wiig <jensbw@gmail.com>2011-09-28 11:04:56 +0200
committerJens Bache-Wiig <jensbw@gmail.com>2011-09-28 11:04:56 +0200
commit81258e22db85ae0ec592cb3e092d29d55bcac846 (patch)
treeddbac8796cbc02c4307242d5665e475e6f6aa865 /src
parentfb8766479395039ea6b917da6de141f52309bcd3 (diff)
downloadqtquickcontrols-81258e22db85ae0ec592cb3e092d29d55bcac846.tar.gz
Add support for round line edit on mac
Diffstat (limited to 'src')
-rw-r--r--src/qstyleitem.cpp700
-rw-r--r--src/src.pro4
2 files changed, 370 insertions, 334 deletions
diff --git a/src/qstyleitem.cpp b/src/qstyleitem.cpp
index ed12cee2..6b1a2fc8 100644
--- a/src/qstyleitem.cpp
+++ b/src/qstyleitem.cpp
@@ -50,23 +50,35 @@
#include <QtCore/QStringBuilder>
+#ifdef Q_WS_MAC
+#include <Carbon/Carbon.h>
+extern CGContextRef qt_mac_cg_context(const QPaintDevice *); //qpaintdevice_mac.cpp
+static inline HIRect qt_hirectForQRect(const QRect &convertRect, const QRect &rect = QRect())
+{
+ return CGRectMake(convertRect.x() + rect.x(), convertRect.y() + rect.y(),
+ convertRect.width() - rect.width(), convertRect.height() - rect.height());
+}
+#endif
+
+
+
QStyleItem::QStyleItem(QDeclarativeItem *parent)
: QDeclarativeItem(parent),
- m_dummywidget(0),
- m_styleoption(0),
- m_type(Undefined),
- m_sunken(false),
- m_raised(false),
- m_active(true),
- m_selected(false),
- m_focus(false),
- m_on(false),
- m_horizontal(true),
- m_sharedWidget(false),
- m_minimum(0),
- m_maximum(100),
- m_value(0),
- m_paintMargins(0)
+ m_dummywidget(0),
+ m_styleoption(0),
+ m_type(Undefined),
+ m_sunken(false),
+ m_raised(false),
+ m_active(true),
+ m_selected(false),
+ m_focus(false),
+ m_on(false),
+ m_horizontal(true),
+ m_sharedWidget(false),
+ m_minimum(0),
+ m_maximum(100),
+ m_value(0),
+ m_paintMargins(0)
{
setFlag(QGraphicsItem::ItemHasNoContents, false);
setCacheMode(QGraphicsItem::DeviceCoordinateCache);
@@ -110,291 +122,291 @@ void QStyleItem::initStyleOption()
switch (m_itemType) {
case Button: {
- if (!m_styleoption)
- m_styleoption = new QStyleOptionButton();
-
- QStyleOptionButton *opt = qstyleoption_cast<QStyleOptionButton*>(m_styleoption);
- opt->text = text();
- opt->features = (activeControl() == "default") ?
- QStyleOptionButton::DefaultButton :
- QStyleOptionButton::None;
- }
+ if (!m_styleoption)
+ m_styleoption = new QStyleOptionButton();
+
+ QStyleOptionButton *opt = qstyleoption_cast<QStyleOptionButton*>(m_styleoption);
+ opt->text = text();
+ opt->features = (activeControl() == "default") ?
+ QStyleOptionButton::DefaultButton :
+ QStyleOptionButton::None;
+ }
break;
case ItemRow: {
- if (!m_styleoption)
- m_styleoption = new QStyleOptionViewItemV4();
+ if (!m_styleoption)
+ m_styleoption = new QStyleOptionViewItemV4();
- QStyleOptionViewItemV4 *opt = qstyleoption_cast<QStyleOptionViewItemV4*>(m_styleoption);
- opt->features = 0;
- if (activeControl() == "alternate")
- opt->features |= QStyleOptionViewItemV2::Alternate;
- }
+ QStyleOptionViewItemV4 *opt = qstyleoption_cast<QStyleOptionViewItemV4*>(m_styleoption);
+ opt->features = 0;
+ if (activeControl() == "alternate")
+ opt->features |= QStyleOptionViewItemV2::Alternate;
+ }
break;
case Splitter: {
- if (!m_styleoption) {
- m_styleoption = new QStyleOption;
- }
+ if (!m_styleoption) {
+ m_styleoption = new QStyleOption;
}
+ }
break;
case Item: {
- if (!m_styleoption) {
- m_styleoption = new QStyleOptionViewItemV4();
- }
- QStyleOptionViewItemV4 *opt = qstyleoption_cast<QStyleOptionViewItemV4*>(m_styleoption);
- opt->features = QStyleOptionViewItemV4::HasDisplay;
- opt->text = text();
- opt->textElideMode = Qt::ElideRight;
- QPalette pal = m_styleoption->palette;
- pal.setBrush(QPalette::Base, Qt::NoBrush);
- m_styleoption->palette = pal;
+ if (!m_styleoption) {
+ m_styleoption = new QStyleOptionViewItemV4();
}
+ QStyleOptionViewItemV4 *opt = qstyleoption_cast<QStyleOptionViewItemV4*>(m_styleoption);
+ opt->features = QStyleOptionViewItemV4::HasDisplay;
+ opt->text = text();
+ opt->textElideMode = Qt::ElideRight;
+ QPalette pal = m_styleoption->palette;
+ pal.setBrush(QPalette::Base, Qt::NoBrush);
+ m_styleoption->palette = pal;
+ }
break;
case Header: {
- if (!m_styleoption)
- m_styleoption = new QStyleOptionHeader();
-
- QStyleOptionHeader *opt = qstyleoption_cast<QStyleOptionHeader*>(m_styleoption);
- opt->text = text();
- opt->sortIndicator = activeControl() == "down" ?
- QStyleOptionHeader::SortDown
- : activeControl() == "up" ?
- QStyleOptionHeader::SortUp : QStyleOptionHeader::None;
- if (info() == QLatin1String("beginning"))
- opt->position = QStyleOptionHeader::Beginning;
- else if (info() == QLatin1String("end"))
- opt->position = QStyleOptionHeader::End;
- else if (info() == QLatin1String("only"))
- opt->position = QStyleOptionHeader::OnlyOneSection;
- else
- opt->position = QStyleOptionHeader::Middle;
+ if (!m_styleoption)
+ m_styleoption = new QStyleOptionHeader();
+
+ QStyleOptionHeader *opt = qstyleoption_cast<QStyleOptionHeader*>(m_styleoption);
+ opt->text = text();
+ opt->sortIndicator = activeControl() == "down" ?
+ QStyleOptionHeader::SortDown
+ : activeControl() == "up" ?
+ QStyleOptionHeader::SortUp : QStyleOptionHeader::None;
+ if (info() == QLatin1String("beginning"))
+ opt->position = QStyleOptionHeader::Beginning;
+ else if (info() == QLatin1String("end"))
+ opt->position = QStyleOptionHeader::End;
+ else if (info() == QLatin1String("only"))
+ opt->position = QStyleOptionHeader::OnlyOneSection;
+ else
+ opt->position = QStyleOptionHeader::Middle;
- }
+ }
break;
case ToolButton :{
- if (!m_styleoption)
- m_styleoption = new QStyleOptionToolButton();
-
- QStyleOptionToolButton *opt =
- qstyleoption_cast<QStyleOptionToolButton*>(m_styleoption);
- opt->subControls = QStyle::SC_ToolButton;
- opt->state |= QStyle::State_AutoRaise;
- opt->activeSubControls = QStyle::SC_ToolButton;
- }
+ if (!m_styleoption)
+ m_styleoption = new QStyleOptionToolButton();
+
+ QStyleOptionToolButton *opt =
+ qstyleoption_cast<QStyleOptionToolButton*>(m_styleoption);
+ opt->subControls = QStyle::SC_ToolButton;
+ opt->state |= QStyle::State_AutoRaise;
+ opt->activeSubControls = QStyle::SC_ToolButton;
+ }
break;
case ToolBar: {
- if (!m_styleoption)
- m_styleoption = new QStyleOptionToolBar();
- }
+ if (!m_styleoption)
+ m_styleoption = new QStyleOptionToolBar();
+ }
break;
case Tab: {
- if (!m_styleoption)
- m_styleoption = new QStyleOptionTabV3();
-
- QStyleOptionTabV3 *opt =
- qstyleoption_cast<QStyleOptionTabV3*>(m_styleoption);
- opt->text = text();
- opt->shape = info() == "South" ? QTabBar::RoundedSouth : QTabBar::RoundedNorth;
- if (activeControl() == QLatin1String("beginning"))
- opt->position = QStyleOptionTabV3::Beginning;
- else if (activeControl() == QLatin1String("end"))
- opt->position = QStyleOptionTabV3::End;
- else if (activeControl() == QLatin1String("only"))
- opt->position = QStyleOptionTabV3::OnlyOneTab;
- else
- opt->position = QStyleOptionTabV3::Middle;
-
- } break;
+ if (!m_styleoption)
+ m_styleoption = new QStyleOptionTabV3();
+
+ QStyleOptionTabV3 *opt =
+ qstyleoption_cast<QStyleOptionTabV3*>(m_styleoption);
+ opt->text = text();
+ opt->shape = info() == "South" ? QTabBar::RoundedSouth : QTabBar::RoundedNorth;
+ if (activeControl() == QLatin1String("beginning"))
+ opt->position = QStyleOptionTabV3::Beginning;
+ else if (activeControl() == QLatin1String("end"))
+ opt->position = QStyleOptionTabV3::End;
+ else if (activeControl() == QLatin1String("only"))
+ opt->position = QStyleOptionTabV3::OnlyOneTab;
+ else
+ opt->position = QStyleOptionTabV3::Middle;
+
+ } break;
case Menu: {
- if (!m_styleoption)
- m_styleoption = new QStyleOptionMenuItem();
- }
+ if (!m_styleoption)
+ m_styleoption = new QStyleOptionMenuItem();
+ }
break;
case Frame: {
- if (!m_styleoption)
- m_styleoption = new QStyleOptionFrameV3();
+ if (!m_styleoption)
+ m_styleoption = new QStyleOptionFrameV3();
- QStyleOptionFrameV3 *opt = qstyleoption_cast<QStyleOptionFrameV3*>(m_styleoption);
- opt->frameShape = QFrame::StyledPanel;
- opt->lineWidth = 1;
- opt->midLineWidth = 1;
- }
+ QStyleOptionFrameV3 *opt = qstyleoption_cast<QStyleOptionFrameV3*>(m_styleoption);
+ opt->frameShape = QFrame::StyledPanel;
+ opt->lineWidth = 1;
+ opt->midLineWidth = 1;
+ }
break;
case TabFrame: {
- if (!m_styleoption)
- m_styleoption = new QStyleOptionTabWidgetFrameV2();
- QStyleOptionTabWidgetFrameV2 *opt = qstyleoption_cast<QStyleOptionTabWidgetFrameV2*>(m_styleoption);
- opt->shape = (info() == "South") ? QTabBar::RoundedSouth : QTabBar::RoundedNorth;
- if (minimum())
- opt->selectedTabRect = QRect(value(), 0, minimum(), height());
- opt->tabBarSize = QSize(minimum() , height());
- // oxygen style needs this hack
- opt->leftCornerWidgetSize = QSize(value(), 0);
- }
+ if (!m_styleoption)
+ m_styleoption = new QStyleOptionTabWidgetFrameV2();
+ QStyleOptionTabWidgetFrameV2 *opt = qstyleoption_cast<QStyleOptionTabWidgetFrameV2*>(m_styleoption);
+ opt->shape = (info() == "South") ? QTabBar::RoundedSouth : QTabBar::RoundedNorth;
+ if (minimum())
+ opt->selectedTabRect = QRect(value(), 0, minimum(), height());
+ opt->tabBarSize = QSize(minimum() , height());
+ // oxygen style needs this hack
+ opt->leftCornerWidgetSize = QSize(value(), 0);
+ }
break;
case MenuItem:
case ComboBoxItem:
- {
- if (!m_styleoption)
- m_styleoption = new QStyleOptionMenuItem();
+ {
+ if (!m_styleoption)
+ m_styleoption = new QStyleOptionMenuItem();
- QStyleOptionMenuItem *opt = qstyleoption_cast<QStyleOptionMenuItem*>(m_styleoption);
- opt->checked = false;
- opt->text = text();
- opt->palette = widget()->palette();
- }
+ QStyleOptionMenuItem *opt = qstyleoption_cast<QStyleOptionMenuItem*>(m_styleoption);
+ opt->checked = false;
+ opt->text = text();
+ opt->palette = widget()->palette();
+ }
break;
case CheckBox:
case RadioButton:
- {
- if (!m_styleoption)
- m_styleoption = new QStyleOptionButton();
+ {
+ if (!m_styleoption)
+ m_styleoption = new QStyleOptionButton();
- QStyleOptionButton *opt = qstyleoption_cast<QStyleOptionButton*>(m_styleoption);
- if (!on())
- opt->state |= QStyle::State_Off;
- opt->text = text();
- }
+ QStyleOptionButton *opt = qstyleoption_cast<QStyleOptionButton*>(m_styleoption);
+ if (!on())
+ opt->state |= QStyle::State_Off;
+ opt->text = text();
+ }
break;
case Edit: {
- if (!m_styleoption)
- m_styleoption = new QStyleOptionFrameV3();
+ if (!m_styleoption)
+ m_styleoption = new QStyleOptionFrameV3();
- QStyleOptionFrameV3 *opt = qstyleoption_cast<QStyleOptionFrameV3*>(m_styleoption);
- opt->lineWidth = 1; // this must be non-zero
- }
+ QStyleOptionFrameV3 *opt = qstyleoption_cast<QStyleOptionFrameV3*>(m_styleoption);
+ opt->lineWidth = 1; // this must be non-zero
+ }
break;
case ComboBox :{
- if (!m_styleoption)
- m_styleoption = new QStyleOptionComboBox();
- QStyleOptionComboBox *opt = qstyleoption_cast<QStyleOptionComboBox*>(m_styleoption);
- opt->currentText = text();
- }
+ if (!m_styleoption)
+ m_styleoption = new QStyleOptionComboBox();
+ QStyleOptionComboBox *opt = qstyleoption_cast<QStyleOptionComboBox*>(m_styleoption);
+ opt->currentText = text();
+ }
break;
case SpinBox: {
- if (!m_styleoption)
- m_styleoption = new QStyleOptionSpinBox();
-
- QStyleOptionSpinBox *opt = qstyleoption_cast<QStyleOptionSpinBox*>(m_styleoption);
- opt->frame = true;
- if (value() & 0x1)
- opt->activeSubControls = QStyle::SC_SpinBoxUp;
- else if (value() & (1<<1))
- opt->activeSubControls = QStyle::SC_SpinBoxDown;
- opt->subControls = QStyle::SC_All;
- opt->stepEnabled = 0;
- if (value() & (1<<2))
- opt->stepEnabled |= QAbstractSpinBox::StepUpEnabled;
- if (value() & (1<<3))
- opt->stepEnabled |= QAbstractSpinBox::StepDownEnabled;
- }
+ if (!m_styleoption)
+ m_styleoption = new QStyleOptionSpinBox();
+
+ QStyleOptionSpinBox *opt = qstyleoption_cast<QStyleOptionSpinBox*>(m_styleoption);
+ opt->frame = true;
+ if (value() & 0x1)
+ opt->activeSubControls = QStyle::SC_SpinBoxUp;
+ else if (value() & (1<<1))
+ opt->activeSubControls = QStyle::SC_SpinBoxDown;
+ opt->subControls = QStyle::SC_All;
+ opt->stepEnabled = 0;
+ if (value() & (1<<2))
+ opt->stepEnabled |= QAbstractSpinBox::StepUpEnabled;
+ if (value() & (1<<3))
+ opt->stepEnabled |= QAbstractSpinBox::StepDownEnabled;
+ }
break;
case Slider:
case Dial:
+ {
+ if (!m_styleoption)
+ m_styleoption = new QStyleOptionSlider();
+
+ QStyleOptionSlider *opt = qstyleoption_cast<QStyleOptionSlider*>(m_styleoption);
+ opt->minimum = minimum();
+ opt->maximum = maximum();
+ // ### fixme - workaround for KDE inverted dial
+ opt->sliderPosition = value();
+ opt->singleStep = step();
+
+ if (opt->singleStep)
{
- if (!m_styleoption)
- m_styleoption = new QStyleOptionSlider();
-
- QStyleOptionSlider *opt = qstyleoption_cast<QStyleOptionSlider*>(m_styleoption);
- opt->minimum = minimum();
- opt->maximum = maximum();
- // ### fixme - workaround for KDE inverted dial
- opt->sliderPosition = value();
- opt->singleStep = step();
-
- if (opt->singleStep)
- {
- qreal numOfSteps = (opt->maximum - opt->minimum) / opt->singleStep;
-
- // at least 5 pixels between tick marks
- if (numOfSteps && (width() / numOfSteps < 5))
- opt->tickInterval = qRound((5*numOfSteps / width()) + 0.5)*step();
- else
- opt->tickInterval = opt->singleStep;
- }
- else // default Qt-components implementation
- opt->tickInterval = opt->maximum != opt->minimum ? 1200 / (opt->maximum - opt->minimum) : 0;
+ qreal numOfSteps = (opt->maximum - opt->minimum) / opt->singleStep;
- if (style() == QLatin1String("oxygen") && type == QLatin1String("dial"))
- opt->sliderValue = maximum() - value();
+ // at least 5 pixels between tick marks
+ if (numOfSteps && (width() / numOfSteps < 5))
+ opt->tickInterval = qRound((5*numOfSteps / width()) + 0.5)*step();
else
- opt->sliderValue = value();
- opt->subControls = QStyle::SC_SliderGroove | QStyle::SC_SliderHandle;
- opt->tickPosition = (activeControl() == "below") ?
- QSlider::TicksBelow : (activeControl() == "above" ?
- QSlider::TicksAbove:
- QSlider::NoTicks);
- if (opt->tickPosition != QSlider::NoTicks)
- opt->subControls |= QStyle::SC_SliderTickmarks;
-
- opt->activeSubControls = QStyle::SC_None;
+ opt->tickInterval = opt->singleStep;
}
+ else // default Qt-components implementation
+ opt->tickInterval = opt->maximum != opt->minimum ? 1200 / (opt->maximum - opt->minimum) : 0;
+
+ if (style() == QLatin1String("oxygen") && type == QLatin1String("dial"))
+ opt->sliderValue = maximum() - value();
+ else
+ opt->sliderValue = value();
+ opt->subControls = QStyle::SC_SliderGroove | QStyle::SC_SliderHandle;
+ opt->tickPosition = (activeControl() == "below") ?
+ QSlider::TicksBelow : (activeControl() == "above" ?
+ QSlider::TicksAbove:
+ QSlider::NoTicks);
+ if (opt->tickPosition != QSlider::NoTicks)
+ opt->subControls |= QStyle::SC_SliderTickmarks;
+
+ opt->activeSubControls = QStyle::SC_None;
+ }
break;
case ProgressBar: {
- if (QProgressBar *bar= qobject_cast<QProgressBar*>(widget())){
- bar->setMaximum(maximum());
- bar->setMinimum(minimum());
- if (maximum() != minimum())
- bar->setValue(1);
- }
- if (!m_styleoption)
- m_styleoption = new QStyleOptionProgressBarV2();
-
- QStyleOptionProgressBarV2 *opt = qstyleoption_cast<QStyleOptionProgressBarV2*>(m_styleoption);
- opt->orientation = horizontal() ? Qt::Horizontal : Qt::Vertical;
- opt->minimum = minimum();
- opt->maximum = maximum();
- opt->progress = value();
+ if (QProgressBar *bar= qobject_cast<QProgressBar*>(widget())){
+ bar->setMaximum(maximum());
+ bar->setMinimum(minimum());
+ if (maximum() != minimum())
+ bar->setValue(1);
}
+ if (!m_styleoption)
+ m_styleoption = new QStyleOptionProgressBarV2();
+
+ QStyleOptionProgressBarV2 *opt = qstyleoption_cast<QStyleOptionProgressBarV2*>(m_styleoption);
+ opt->orientation = horizontal() ? Qt::Horizontal : Qt::Vertical;
+ opt->minimum = minimum();
+ opt->maximum = maximum();
+ opt->progress = value();
+ }
break;
case GroupBox: {
- if (!m_styleoption)
- m_styleoption = new QStyleOptionGroupBox();
-
- QStyleOptionGroupBox *opt = qstyleoption_cast<QStyleOptionGroupBox*>(m_styleoption);
- opt->text = text();
- opt->lineWidth = 1;
- opt->subControls = QStyle::SC_GroupBoxLabel;
- if (sunken()) // Qt draws an ugly line here so I ignore it
- opt->subControls |= QStyle::SC_GroupBoxFrame;
- else
- opt->features |= QStyleOptionFrameV2::Flat;
- if (activeControl() == "checkbox")
- opt->subControls |= QStyle::SC_GroupBoxCheckBox;
-
- if (QGroupBox *group= qobject_cast<QGroupBox*>(widget())) {
- group->setTitle(text());
- group->setCheckable(opt->subControls & QStyle::SC_GroupBoxCheckBox);
- }
+ if (!m_styleoption)
+ m_styleoption = new QStyleOptionGroupBox();
+
+ QStyleOptionGroupBox *opt = qstyleoption_cast<QStyleOptionGroupBox*>(m_styleoption);
+ opt->text = text();
+ opt->lineWidth = 1;
+ opt->subControls = QStyle::SC_GroupBoxLabel;
+ if (sunken()) // Qt draws an ugly line here so I ignore it
+ opt->subControls |= QStyle::SC_GroupBoxFrame;
+ else
+ opt->features |= QStyleOptionFrameV2::Flat;
+ if (activeControl() == "checkbox")
+ opt->subControls |= QStyle::SC_GroupBoxCheckBox;
+
+ if (QGroupBox *group= qobject_cast<QGroupBox*>(widget())) {
+ group->setTitle(text());
+ group->setCheckable(opt->subControls & QStyle::SC_GroupBoxCheckBox);
}
+ }
break;
case ScrollBar: {
- if (!m_styleoption)
- m_styleoption = new QStyleOptionSlider();
-
- QStyleOptionSlider *opt = qstyleoption_cast<QStyleOptionSlider*>(m_styleoption);
- opt->minimum = minimum();
- opt->maximum = maximum();
- opt->pageStep = horizontal() ? width() : height();
- opt->orientation = horizontal() ? Qt::Horizontal : Qt::Vertical;
- opt->sliderPosition = value();
- opt->sliderValue = value();
- opt->activeSubControls = (activeControl() == QLatin1String("up"))
- ? QStyle::SC_ScrollBarSubLine :
- (activeControl() == QLatin1String("down")) ?
- QStyle::SC_ScrollBarAddLine:
- QStyle::SC_ScrollBarSlider;
-
- opt->sliderValue = value();
- opt->subControls = QStyle::SC_All;
-
- QScrollBar *bar = qobject_cast<QScrollBar *>(widget());
- bar->setMaximum(maximum());
- bar->setMinimum(minimum());
- bar->setValue(value());
- }
+ if (!m_styleoption)
+ m_styleoption = new QStyleOptionSlider();
+
+ QStyleOptionSlider *opt = qstyleoption_cast<QStyleOptionSlider*>(m_styleoption);
+ opt->minimum = minimum();
+ opt->maximum = maximum();
+ opt->pageStep = horizontal() ? width() : height();
+ opt->orientation = horizontal() ? Qt::Horizontal : Qt::Vertical;
+ opt->sliderPosition = value();
+ opt->sliderValue = value();
+ opt->activeSubControls = (activeControl() == QLatin1String("up"))
+ ? QStyle::SC_ScrollBarSubLine :
+ (activeControl() == QLatin1String("down")) ?
+ QStyle::SC_ScrollBarAddLine:
+ QStyle::SC_ScrollBarSlider;
+
+ opt->sliderValue = value();
+ opt->subControls = QStyle::SC_All;
+
+ QScrollBar *bar = qobject_cast<QScrollBar *>(widget());
+ bar->setMaximum(maximum());
+ bar->setMinimum(minimum());
+ bar->setValue(value());
+ }
break;
default:
break;
@@ -486,25 +498,25 @@ QString QStyleItem::hitTest(int px, int py)
initStyleOption();
switch (m_itemType) {
case SpinBox :{
- subcontrol = qApp->style()->hitTestComplexControl(QStyle::CC_SpinBox,
- qstyleoption_cast<QStyleOptionComplex*>(m_styleoption),
- QPoint(px,py), 0);
- if (subcontrol == QStyle::SC_SpinBoxUp)
- return "up";
- else if (subcontrol == QStyle::SC_SpinBoxDown)
- return "down";
+ subcontrol = qApp->style()->hitTestComplexControl(QStyle::CC_SpinBox,
+ qstyleoption_cast<QStyleOptionComplex*>(m_styleoption),
+ QPoint(px,py), 0);
+ if (subcontrol == QStyle::SC_SpinBoxUp)
+ return "up";
+ else if (subcontrol == QStyle::SC_SpinBoxDown)
+ return "down";
- }
+ }
break;
case Slider: {
- subcontrol = qApp->style()->hitTestComplexControl(QStyle::CC_Slider,
- qstyleoption_cast<QStyleOptionComplex*>(m_styleoption),
- QPoint(px,py), 0);
- if (subcontrol == QStyle::SC_SliderHandle)
- return "handle";
+ subcontrol = qApp->style()->hitTestComplexControl(QStyle::CC_Slider,
+ qstyleoption_cast<QStyleOptionComplex*>(m_styleoption),
+ QPoint(px,py), 0);
+ if (subcontrol == QStyle::SC_SliderHandle)
+ return "handle";
- }
+ }
break;
case ScrollBar: {
subcontrol = qApp->style()->hitTestComplexControl(QStyle::CC_ScrollBar,
@@ -522,7 +534,7 @@ QString QStyleItem::hitTest(int px, int py)
return "down";
else if (subcontrol == QStyle::SC_ScrollBarAddPage)
return "downPage";
- }
+ }
break;
default:
break;
@@ -550,7 +562,7 @@ QSize QStyleItem::sizeFromContents(int width, int height)
// Macstyle adds some weird constants to buttons
return QSize(textWidth + 18, size.height() + 2);
#endif
-}
+ }
break;
case Tab:
size = qApp->style()->sizeFromContents(QStyle::CT_TabBarTab, m_styleoption, QSize(width,height), widget());
@@ -589,9 +601,9 @@ QSize QStyleItem::sizeFromContents(int width, int height)
}
#ifdef Q_WS_MAC
-// ### hack - With even heights, the text baseline is off on mac
-// if (size.height() %2 == 0)
-// size.setHeight(size.height() + 1);
+ // ### hack - With even heights, the text baseline is off on mac
+ // if (size.height() %2 == 0)
+ // size.setHeight(size.height() + 1);
#endif
return size;
}
@@ -611,7 +623,7 @@ int QStyleItem::pixelMetric(const QString &metric)
// On windows the tabbar paintmargin extends the overlap by one pixels
return 1 + qApp->style()->pixelMetric(QStyle::PM_TabBarBaseOverlap, 0 , widget());
#else
- return qApp->style()->pixelMetric(QStyle::PM_TabBarBaseOverlap, 0 , widget());
+ return qApp->style()->pixelMetric(QStyle::PM_TabBarBaseOverlap, 0 , widget());
#endif
else if (metric == "tabhspace")
return qApp->style()->pixelMetric(QStyle::PM_TabBarTabHSpace, 0 , widget());
@@ -844,51 +856,51 @@ QRect QStyleItem::subControlRect(const QString &subcontrolString)
initStyleOption();
switch (m_itemType) {
case SpinBox:
- {
- QStyle::ComplexControl control = QStyle::CC_SpinBox;
- if (subcontrolString == QLatin1String("down"))
- subcontrol = QStyle::SC_SpinBoxDown;
- else if (subcontrolString == QLatin1String("up"))
- subcontrol = QStyle::SC_SpinBoxUp;
- else if (subcontrolString == QLatin1String("edit")){
- subcontrol = QStyle::SC_SpinBoxEditField;
- }
- return qApp->style()->subControlRect(control,
- qstyleoption_cast<QStyleOptionComplex*>(m_styleoption),
- subcontrol, widget());
-
+ {
+ QStyle::ComplexControl control = QStyle::CC_SpinBox;
+ if (subcontrolString == QLatin1String("down"))
+ subcontrol = QStyle::SC_SpinBoxDown;
+ else if (subcontrolString == QLatin1String("up"))
+ subcontrol = QStyle::SC_SpinBoxUp;
+ else if (subcontrolString == QLatin1String("edit")){
+ subcontrol = QStyle::SC_SpinBoxEditField;
}
+ return qApp->style()->subControlRect(control,
+ qstyleoption_cast<QStyleOptionComplex*>(m_styleoption),
+ subcontrol, widget());
+
+ }
break;
case Slider:
- {
- QStyle::ComplexControl control = QStyle::CC_Slider;
- if (subcontrolString == QLatin1String("handle"))
- subcontrol = QStyle::SC_SliderHandle;
- else if (subcontrolString == QLatin1String("groove"))
- subcontrol = QStyle::SC_SliderGroove;
- return qApp->style()->subControlRect(control,
- qstyleoption_cast<QStyleOptionComplex*>(m_styleoption),
- subcontrol, widget());
+ {
+ QStyle::ComplexControl control = QStyle::CC_Slider;
+ if (subcontrolString == QLatin1String("handle"))
+ subcontrol = QStyle::SC_SliderHandle;
+ else if (subcontrolString == QLatin1String("groove"))
+ subcontrol = QStyle::SC_SliderGroove;
+ return qApp->style()->subControlRect(control,
+ qstyleoption_cast<QStyleOptionComplex*>(m_styleoption),
+ subcontrol, widget());
- }
+ }
break;
case ScrollBar:
- {
- QStyle::ComplexControl control = QStyle::CC_ScrollBar;
- if (subcontrolString == QLatin1String("slider"))
- subcontrol = QStyle::SC_ScrollBarSlider;
- if (subcontrolString == QLatin1String("groove"))
- subcontrol = QStyle::SC_ScrollBarGroove;
- else if (subcontrolString == QLatin1String("handle"))
- subcontrol = QStyle::SC_ScrollBarSlider;
- else if (subcontrolString == QLatin1String("add"))
- subcontrol = QStyle::SC_ScrollBarAddPage;
- else if (subcontrolString == QLatin1String("sub"))
- subcontrol = QStyle::SC_ScrollBarSubPage;
- return qApp->style()->subControlRect(control,
- qstyleoption_cast<QStyleOptionComplex*>(m_styleoption),
- subcontrol, widget());
- }
+ {
+ QStyle::ComplexControl control = QStyle::CC_ScrollBar;
+ if (subcontrolString == QLatin1String("slider"))
+ subcontrol = QStyle::SC_ScrollBarSlider;
+ if (subcontrolString == QLatin1String("groove"))
+ subcontrol = QStyle::SC_ScrollBarGroove;
+ else if (subcontrolString == QLatin1String("handle"))
+ subcontrol = QStyle::SC_ScrollBarSlider;
+ else if (subcontrolString == QLatin1String("add"))
+ subcontrol = QStyle::SC_ScrollBarAddPage;
+ else if (subcontrolString == QLatin1String("sub"))
+ subcontrol = QStyle::SC_ScrollBarSubPage;
+ return qApp->style()->subControlRect(control,
+ qstyleoption_cast<QStyleOptionComplex*>(m_styleoption),
+ subcontrol, widget());
+ }
break;
default:
break;
@@ -916,21 +928,21 @@ void QStyleItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWid
qApp->style()->drawControl(QStyle::CE_PushButton, m_styleoption, painter, widget());
break;
case ItemRow :{
- QPixmap pixmap;
- // Only draw through style once
- const QString pmKey = QLatin1Literal("itemrow") % QString::number(m_styleoption->state,16) % activeControl();
- if (!QPixmapCache::find(pmKey, pixmap) || pixmap.width() < width() || height() != pixmap.height()) {
- int newSize = width();
- pixmap = QPixmap(newSize, height());
- pixmap.fill(Qt::transparent);
- QPainter pixpainter(&pixmap);
- qApp->style()->drawPrimitive(QStyle::PE_PanelItemViewRow, m_styleoption, &pixpainter, widget());
- if (!qApp->style()->styleHint(QStyle::SH_ItemView_ShowDecorationSelected) && selected())
- pixpainter.fillRect(m_styleoption->rect, m_styleoption->palette.highlight());
- QPixmapCache::insert(pmKey, pixmap);
- }
- painter->drawPixmap(0, 0, pixmap);
+ QPixmap pixmap;
+ // Only draw through style once
+ const QString pmKey = QLatin1Literal("itemrow") % QString::number(m_styleoption->state,16) % activeControl();
+ if (!QPixmapCache::find(pmKey, pixmap) || pixmap.width() < width() || height() != pixmap.height()) {
+ int newSize = width();
+ pixmap = QPixmap(newSize, height());
+ pixmap.fill(Qt::transparent);
+ QPainter pixpainter(&pixmap);
+ qApp->style()->drawPrimitive(QStyle::PE_PanelItemViewRow, m_styleoption, &pixpainter, widget());
+ if (!qApp->style()->styleHint(QStyle::SH_ItemView_ShowDecorationSelected) && selected())
+ pixpainter.fillRect(m_styleoption->rect, m_styleoption->palette.highlight());
+ QPixmapCache::insert(pmKey, pixmap);
}
+ painter->drawPixmap(0, 0, pixmap);
+ }
break;
case Item:
qApp->style()->drawControl(QStyle::CE_ItemViewItem, m_styleoption, painter, widget());
@@ -964,8 +976,28 @@ void QStyleItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWid
case RadioButton:
qApp->style()->drawControl(QStyle::CE_RadioButton, m_styleoption, painter, widget());
break;
- case Edit:
+ case Edit: {
+#ifdef Q_WS_MAC
+ if (style() == "mac" && hint().contains("mac.search")) {
+ const QPaintDevice *target = painter->device();
+ HIThemeFrameDrawInfo fdi;
+ fdi.version = 1;
+ fdi.state = kThemeStateActive;
+ SInt32 frame_size;
+ GetThemeMetric(kThemeMetricEditTextFrameOutset, &frame_size);
+ fdi.kind = kHIThemeFrameTextFieldRound;
+ if ((m_styleoption->state & QStyle::State_ReadOnly) || !(m_styleoption->state & QStyle::State_Enabled))
+ fdi.state = kThemeStateInactive;
+ fdi.isFocused = (m_styleoption->state & QStyle::State_HasFocus);
+ HIRect hirect = qt_hirectForQRect(m_styleoption->rect,
+ QRect(frame_size, frame_size,
+ frame_size * 2, frame_size * 2));
+ HIThemeDrawFrame(&hirect, &fdi, qt_mac_cg_context(target), kHIThemeOrientationNormal);
+ return;
+ }
+#endif
qApp->style()->drawPrimitive(QStyle::PE_PanelLineEdit, m_styleoption, painter, widget());
+ }
break;
case Widget:
qApp->style()->drawPrimitive(QStyle::PE_Widget, m_styleoption, painter, widget());
@@ -975,7 +1007,7 @@ void QStyleItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWid
break;
case Splitter:
painter->fillRect(0, 0, width(), height(), m_styleoption->palette.dark().color());
-// qApp->style()->drawControl(QStyle::CE_Splitter, m_styleoption, painter, widget());
+ // qApp->style()->drawControl(QStyle::CE_Splitter, m_styleoption, painter, widget());
break;
case ComboBox:
{
@@ -1016,23 +1048,23 @@ void QStyleItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWid
qApp->style()->drawComplexControl(QStyle::CC_ScrollBar, qstyleoption_cast<QStyleOptionComplex*>(m_styleoption), painter, widget());
break;
case Menu: {
- if (QMenu *menu = qobject_cast<QMenu*>(widget())) {
- m_styleoption->palette = menu->palette();
- }
- QStyleHintReturnMask val;
- qApp->style()->styleHint(QStyle::SH_Menu_Mask, m_styleoption, widget(), &val);
- painter->save();
- painter->setClipRegion(val.region);
- painter->fillRect(m_styleoption->rect, m_styleoption->palette.window());
- painter->restore();
- qApp->style()->drawPrimitive(QStyle::PE_PanelMenu, m_styleoption, painter, widget());
-
- QStyleOptionFrame frame;
- frame.lineWidth = qApp->style()->pixelMetric(QStyle::PM_MenuPanelWidth);
- frame.midLineWidth = 0;
- frame.rect = m_styleoption->rect;
- qApp->style()->drawPrimitive(QStyle::PE_FrameMenu, &frame, painter, widget());
+ if (QMenu *menu = qobject_cast<QMenu*>(widget())) {
+ m_styleoption->palette = menu->palette();
}
+ QStyleHintReturnMask val;
+ qApp->style()->styleHint(QStyle::SH_Menu_Mask, m_styleoption, widget(), &val);
+ painter->save();
+ painter->setClipRegion(val.region);
+ painter->fillRect(m_styleoption->rect, m_styleoption->palette.window());
+ painter->restore();
+ qApp->style()->drawPrimitive(QStyle::PE_PanelMenu, m_styleoption, painter, widget());
+
+ QStyleOptionFrame frame;
+ frame.lineWidth = qApp->style()->pixelMetric(QStyle::PM_MenuPanelWidth);
+ frame.midLineWidth = 0;
+ frame.rect = m_styleoption->rect;
+ qApp->style()->drawPrimitive(QStyle::PE_FrameMenu, &frame, painter, widget());
+ }
break;
default:
break;
diff --git a/src/src.pro b/src/src.pro
index c2689d6f..f28bc293 100644
--- a/src/src.pro
+++ b/src/src.pro
@@ -48,6 +48,10 @@ symbian {
target.path = $$INSTALL_IMPORTS/$$TARGETPATH
+mac {
+ LIBS += -framework Carbon
+}
+
INSTALLS += target
symbian {