From b0d6b7f9409c9527f11f15aeb8124bb4b1829c85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sami=20Meril=C3=A4?= Date: Fri, 8 May 2009 12:51:07 +0300 Subject: S60Style: Support for flat and checkable pushbuttons --- src/gui/styles/qs60style.cpp | 54 +++++++++++++++++++++++++++++++++--- src/gui/styles/qs60style_symbian.cpp | 4 +-- 2 files changed, 52 insertions(+), 6 deletions(-) diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp index 041e151..1b81b33 100644 --- a/src/gui/styles/qs60style.cpp +++ b/src/gui/styles/qs60style.cpp @@ -1125,17 +1125,64 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option, Q_D(const QS60Style); const QS60StylePrivate::SkinElementFlags flags = (option->state & State_Enabled) ? QS60StylePrivate::SF_StateEnabled : QS60StylePrivate::SF_StateDisabled; switch (element) { + case CE_PushButton: + if (const QStyleOptionButton *btn = qstyleoption_cast(option)) { + + drawControl(CE_PushButtonBevel, btn, painter, widget); + QStyleOptionButton subopt = *btn; + subopt.rect = subElementRect(SE_PushButtonContents, btn, widget); + + if (const QAbstractButton *buttonWidget = (qobject_cast(widget))) { + if (buttonWidget->isCheckable()) { + QStyleOptionButton checkopt = subopt; + + const int indicatorHeight(pixelMetric(PM_IndicatorHeight)); + const int verticalAdjust = (option->rect.height() - indicatorHeight) >> 1; + + checkopt.rect.adjust(pixelMetric(PM_ButtonMargin), verticalAdjust, 0, 0); + checkopt.rect.setWidth(pixelMetric(PM_IndicatorWidth)); + checkopt.rect.setHeight(indicatorHeight); + + drawPrimitive(PE_IndicatorCheckBox, &checkopt, painter, widget); + } + } + + drawControl(CE_PushButtonLabel, &subopt, painter, widget); + if (btn->state & State_HasFocus) { + QStyleOptionFocusRect fropt; + fropt.QStyleOption::operator=(*btn); + fropt.rect = subElementRect(SE_PushButtonFocusRect, btn, widget); + drawPrimitive(PE_FrameFocusRect, &fropt, painter, widget); + } + } + break; case CE_PushButtonBevel: { + if (const QStyleOptionButton *button = qstyleoption_cast(option)) { const bool isPressed = option->state & QStyle::State_Sunken; - const QS60StylePrivate::SkinElements skinElement = - isPressed ? QS60StylePrivate::SE_ButtonPressed : QS60StylePrivate::SE_ButtonNormal; - QS60StylePrivate::drawSkinElement(skinElement, painter, option->rect, flags); + if (button->features & QStyleOptionButton::Flat) { + const QS60StyleEnums::SkinParts skinPart = + isPressed ? QS60StyleEnums::SP_QsnFrButtonTbCenterPressed : QS60StyleEnums::SP_QsnFrButtonTbCenter; + QS60StylePrivate::drawSkinPart(skinPart, painter, option->rect, flags); + } else { + const QS60StylePrivate::SkinElements skinElement = + isPressed ? QS60StylePrivate::SE_ButtonPressed : QS60StylePrivate::SE_ButtonNormal; + QS60StylePrivate::drawSkinElement(skinElement, painter, option->rect, flags); + } + } } break; case CE_PushButtonLabel: if (const QStyleOptionButton *button = qstyleoption_cast(option)) { QStyleOptionButton optionButton = *button; + + if (const QAbstractButton *buttonWidget = (qobject_cast(widget))) { + if (buttonWidget->isCheckable()) { + // space for check box. + optionButton.rect.adjust(pixelMetric(PM_IndicatorWidth) + + pixelMetric(PM_ButtonMargin) + pixelMetric(PM_CheckBoxLabelSpacing), 0, 0, 0); + } + } QCommonStyle::drawControl(element, &optionButton, painter, widget); } break; @@ -1756,7 +1803,6 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option, case CE_MenuTearoff: #endif //QT_NO_MENU - case CE_PushButton: case CE_CheckBox: case CE_RadioButton: #ifndef QT_NO_TABBAR diff --git a/src/gui/styles/qs60style_symbian.cpp b/src/gui/styles/qs60style_symbian.cpp index b58f8a2..b95271d 100644 --- a/src/gui/styles/qs60style_symbian.cpp +++ b/src/gui/styles/qs60style_symbian.cpp @@ -147,7 +147,7 @@ const partMapEntry QS60StyleModeSpecifics::m_partMap[] = { /* SP_QsnFrButtonTbSideB */ {KAknsIIDQsnFrButtonTbSideB, ENoDraw, ES60_AllReleases, -1,-1,-1}, /* SP_QsnFrButtonTbSideL */ {KAknsIIDQsnFrButtonTbSideL, ENoDraw, ES60_AllReleases, -1,-1,-1}, /* SP_QsnFrButtonTbSideR */ {KAknsIIDQsnFrButtonTbSideR, ENoDraw, ES60_AllReleases, -1,-1,-1}, - /* SP_QsnFrButtonTbCenter */ {KAknsIIDQsnFrButtonTbCenter, ENoDraw, ES60_AllReleases, -1,-1,-1}, + /* SP_QsnFrButtonTbCenter */ {KAknsIIDQsnFrButtonTbCenter, EDrawIcon, ES60_AllReleases, -1,-1,-1}, /* SP_QsnFrButtonTbCornerTlPressed */{KAknsIIDQsnFrButtonTbCornerTlPressed, ENoDraw, ES60_AllReleases, -1,-1,-1}, /* SP_QsnFrButtonTbCornerTrPressed */{KAknsIIDQsnFrButtonTbCornerTrPressed, ENoDraw, ES60_AllReleases, -1,-1,-1}, @@ -157,7 +157,7 @@ const partMapEntry QS60StyleModeSpecifics::m_partMap[] = { /* SP_QsnFrButtonTbSideBPressed */ {KAknsIIDQsnFrButtonTbSideBPressed, ENoDraw, ES60_AllReleases, -1,-1,-1}, /* SP_QsnFrButtonTbSideLPressed */ {KAknsIIDQsnFrButtonTbSideLPressed, ENoDraw, ES60_AllReleases, -1,-1,-1}, /* SP_QsnFrButtonTbSideRPressed */ {KAknsIIDQsnFrButtonTbSideRPressed, ENoDraw, ES60_AllReleases, -1,-1,-1}, - /* SP_QsnFrButtonTbCenterPressed */ {KAknsIIDQsnFrButtonTbCenterPressed, ENoDraw, ES60_AllReleases, -1,-1,-1}, + /* SP_QsnFrButtonTbCenterPressed */ {KAknsIIDQsnFrButtonTbCenterPressed, EDrawIcon, ES60_AllReleases, -1,-1,-1}, /* SP_QsnFrCaleCornerTl */ {KAknsIIDQsnFrCaleCornerTl, ENoDraw, ES60_AllReleases, -1,-1,-1}, /* SP_QsnFrCaleCornerTr */ {KAknsIIDQsnFrCaleCornerTr, ENoDraw, ES60_AllReleases, -1,-1,-1}, -- cgit v0.12