diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/qstyleitem.cpp | 700 | ||||
-rw-r--r-- | src/src.pro | 4 |
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 { |