Changeset 846 for trunk/src/gui/styles/qs60style_s60.cpp
- Timestamp:
- May 5, 2011, 5:36:53 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo changed
/branches/vendor/nokia/qt/4.7.2 (added) merged: 845 /branches/vendor/nokia/qt/current merged: 844 /branches/vendor/nokia/qt/4.6.3 removed
- Property svn:mergeinfo changed
-
trunk/src/gui/styles/qs60style_s60.cpp
r769 r846 1 1 /**************************************************************************** 2 2 ** 3 ** Copyright (C) 201 0Nokia Corporation and/or its subsidiary(-ies).3 ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). 4 4 ** All rights reserved. 5 5 ** Contact: Nokia Corporation (qt-info@nokia.com) … … 49 49 #include "private/qcore_symbian_p.h" 50 50 #include "qapplication.h" 51 #include "qsettings.h" 51 52 52 53 #include <w32std.h> … … 66 67 #include <AknBitmapAnimation.h> 67 68 69 #include <centralrepository.h> 70 68 71 #if !defined(QT_NO_STYLE_S60) || defined(QT_PLUGIN) 69 72 … … 77 80 ENoDraw 78 81 }; 82 83 const TUid personalisationUID = { 0x101F876F }; 79 84 80 85 enum TSupportRelease { … … 180 185 /* SP_QgnGrafBarProgress */ {KAknsIIDQgnGrafBarProgress, EDrawIcon, ES60_All, -1,-1}, 181 186 // No drop area for 3.x non-touch devices 182 /* SP_QgnGrafOrgBgGrid */ {KAknsIIDNone, EDrawIcon, ES60_3_X, EAknsMajorGeneric ,0x1eba}, //KAknsIIDQgnGrafOrgBgGrid 187 /* SP_QgnGrafOrgBgGrid */ {KAknsIIDNone, EDrawIcon, ES60_3_X, EAknsMajorGeneric ,0x1eba}, //KAknsIIDQgnGrafOrgBgGrid 183 188 /* SP_QgnGrafScrollArrowDown */ {KAknsIIDQgnGrafScrollArrowDown, EDrawGulIcon, ES60_All, -1,-1}, 184 189 /* SP_QgnGrafScrollArrowLeft */ {KAknsIIDQgnGrafScrollArrowLeft, EDrawGulIcon, ES60_All, -1,-1}, … … 215 220 /* SP_QgnGrafNsliderMarker */ {KAknsIIDQgnIndiSliderEdit, EDrawIcon, ES60_3_1, EAknsMajorGeneric, 0x19d1 /* KAknsIIDQgnGrafNsliderMarker */}, 216 221 /* SP_QgnGrafNsliderMarkerSelected */ {KAknsIIDQgnIndiSliderEdit, EDrawIcon, ES60_3_1, EAknsMajorGeneric, 0x1a4a /* KAknsIIDQgnGrafNsliderMarkerSelected */}, 217 /* SP_QgnIndiSub Menu */ {KAknsIIDQgnIndiSubmenu, EDrawIcon, ES60_All, -1,-1},222 /* SP_QgnIndiSubmenu */ {KAknsIIDQgnIndiSubmenu, EDrawIcon, ES60_All, -1,-1}, 218 223 /* SP_QgnNoteErased */ {KAknsIIDQgnNoteErased, EDrawIcon, ES60_All, -1,-1}, 219 224 /* SP_QgnNoteError */ {KAknsIIDQgnNoteError, EDrawIcon, ES60_All, -1,-1}, … … 228 233 /* SP_QgnPropPhoneMemcLarge */ {KAknsIIDQgnPropPhoneMemcLarge, EDrawIcon, ES60_All, -1,-1}, 229 234 235 // Toolbar graphics is different in 3.1/3.2 vs. 5.0 236 /* SP_QgnFrSctrlButtonCornerTl */ {KAknsIIDQsnFrButtonTbCornerTl, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2301}, /* KAknsIIDQgnFrSctrlButtonCornerTl*/ 237 /* SP_QgnFrSctrlButtonCornerTr */ {KAknsIIDQsnFrButtonTbCornerTr, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2302}, 238 /* SP_QgnFrSctrlButtonCornerBl */ {KAknsIIDQsnFrButtonTbCornerBl, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2303}, 239 /* SP_QgnFrSctrlButtonCornerBr */ {KAknsIIDQsnFrButtonTbCornerBr, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2304}, 240 /* SP_QgnFrSctrlButtonSideT */ {KAknsIIDQsnFrButtonTbSideT, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2305}, 241 /* SP_QgnFrSctrlButtonSideB */ {KAknsIIDQsnFrButtonTbSideB, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2306}, 242 /* SP_QgnFrSctrlButtonSideL */ {KAknsIIDQsnFrButtonTbSideL, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2307}, 243 /* SP_QgnFrSctrlButtonSideR */ {KAknsIIDQsnFrButtonTbSideR, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2308}, 244 /* SP_QgnFrSctrlButtonCenter */ {KAknsIIDQsnFrButtonTbCenter, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2309}, /*KAknsIIDQgnFrSctrlButtonCenter*/ 245 246 // No pressed state for toolbar button in 3.1/3.2. 247 /* SP_QgnFrSctrlButtonCornerTlPressed */ {KAknsIIDQsnFrButtonTbCornerTl, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2621}, /*KAknsIIDQgnFrSctrlButtonCornerTlPressed*/ 248 /* SP_QgnFrSctrlButtonCornerTrPressed */ {KAknsIIDQsnFrButtonTbCornerTr, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2622}, 249 /* SP_QgnFrSctrlButtonCornerBlPressed */ {KAknsIIDQsnFrButtonTbCornerBl, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2623}, 250 /* SP_QgnFrSctrlButtonCornerBrPressed */ {KAknsIIDQsnFrButtonTbCornerBr, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2624}, 251 /* SP_QgnFrSctrlButtonSideTPressed */ {KAknsIIDQsnFrButtonTbSideT, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2625}, 252 /* SP_QgnFrSctrlButtonSideBPressed */ {KAknsIIDQsnFrButtonTbSideB, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2626}, 253 /* SP_QgnFrSctrlButtonSideLPressed */ {KAknsIIDQsnFrButtonTbSideL, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2627}, 254 /* SP_QgnFrSctrlButtonSideRPressed */ {KAknsIIDQsnFrButtonTbSideR, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2628}, 255 /* SP_QgnFrSctrlButtonCenterPressed */ {KAknsIIDQsnFrButtonTbCenter, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2629}, 256 230 257 // 3.1 & 3.2 do not have pressed state for scrollbar, so use normal scrollbar graphics instead. 231 258 /* SP_QsnCpScrollHandleBottomPressed*/ {KAknsIIDQsnCpScrollHandleBottom, EDrawIcon, ES60_3_X, EAknsMajorGeneric, 0x20f8}, /*KAknsIIDQsnCpScrollHandleBottomPressed*/ … … 267 294 /* SP_QsnFrCaleCornerBl */ {KAknsIIDQsnFrCaleCornerBl, ENoDraw, ES60_All, -1,-1}, 268 295 /* SP_QsnFrCaleCornerBr */ {KAknsIIDQsnFrCaleCornerBr, ENoDraw, ES60_All, -1,-1}, 269 /* SP_QsnFrCale GSideT */{KAknsIIDQsnFrCaleSideT, ENoDraw, ES60_All, -1,-1},270 /* SP_QsnFrCale GSideB */{KAknsIIDQsnFrCaleSideB, ENoDraw, ES60_All, -1,-1},271 /* SP_QsnFrCale GSideL */{KAknsIIDQsnFrCaleSideL, ENoDraw, ES60_All, -1,-1},272 /* SP_QsnFrCale GSideR */{KAknsIIDQsnFrCaleSideR, ENoDraw, ES60_All, -1,-1},296 /* SP_QsnFrCaleSideT */ {KAknsIIDQsnFrCaleSideT, ENoDraw, ES60_All, -1,-1}, 297 /* SP_QsnFrCaleSideB */ {KAknsIIDQsnFrCaleSideB, ENoDraw, ES60_All, -1,-1}, 298 /* SP_QsnFrCaleSideL */ {KAknsIIDQsnFrCaleSideL, ENoDraw, ES60_All, -1,-1}, 299 /* SP_QsnFrCaleSideR */ {KAknsIIDQsnFrCaleSideR, ENoDraw, ES60_All, -1,-1}, 273 300 /* SP_QsnFrCaleCenter */ {KAknsIIDQsnFrCaleCenter, ENoDraw, ES60_All, -1,-1}, 274 301 … … 345 372 /* SP_QsnFrPopupSubCenter */ {KAknsIIDQsnFrPopupCenterSubmenu, ENoDraw, ES60_3_X, -1,-1}, 346 373 347 // Toolbar graphics is different in 3.1/3.2 vs. 5.0348 /* SP_QsnFrSctrlButtonCornerTl */ {KAknsIIDQsnFrButtonTbCornerTl, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2301}, /* KAknsIIDQgnFrSctrlButtonCornerTl*/349 /* SP_QsnFrSctrlButtonCornerTr */ {KAknsIIDQsnFrButtonTbCornerTr, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2302},350 /* SP_QsnFrSctrlButtonCornerBl */ {KAknsIIDQsnFrButtonTbCornerBl, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2303},351 /* SP_QsnFrSctrlButtonCornerBr */ {KAknsIIDQsnFrButtonTbCornerBr, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2304},352 /* SP_QsnFrSctrlButtonSideT */ {KAknsIIDQsnFrButtonTbSideT, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2305},353 /* SP_QsnFrSctrlButtonSideB */ {KAknsIIDQsnFrButtonTbSideB, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2306},354 /* SP_QsnFrSctrlButtonSideL */ {KAknsIIDQsnFrButtonTbSideL, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2307},355 /* SP_QsnFrSctrlButtonSideR */ {KAknsIIDQsnFrButtonTbSideR, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2308},356 /* SP_QsnFrSctrlButtonCenter */ {KAknsIIDQsnFrButtonTbCenter, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2309}, /*KAknsIIDQgnFrSctrlButtonCenter*/357 358 // No pressed state for toolbar button in 3.1/3.2.359 /* SP_QsnFrSctrlButtonCornerTlPressed */ {KAknsIIDQsnFrButtonTbCornerTl, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2621}, /*KAknsIIDQsnFrSctrlButtonCornerTlPressed*/360 /* SP_QsnFrSctrlButtonCornerTrPressed */ {KAknsIIDQsnFrButtonTbCornerTr, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2622},361 /* SP_QsnFrSctrlButtonCornerBlPressed */ {KAknsIIDQsnFrButtonTbCornerBl, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2623},362 /* SP_QsnFrSctrlButtonCornerBrPressed */ {KAknsIIDQsnFrButtonTbCornerBr, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2624},363 /* SP_QsnFrSctrlButtonSideTPressed */ {KAknsIIDQsnFrButtonTbSideT, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2625},364 /* SP_QsnFrSctrlButtonSideBPressed */ {KAknsIIDQsnFrButtonTbSideB, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2626},365 /* SP_QsnFrSctrlButtonSideLPressed */ {KAknsIIDQsnFrButtonTbSideL, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2627},366 /* SP_QsnFrSctrlButtonSideRPressed */ {KAknsIIDQsnFrButtonTbSideR, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2628},367 /* SP_QsnFrSctrlButtonCenterPressed */ {KAknsIIDQsnFrButtonTbCenter, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2629},368 369 374 // No inactive button graphics in 3.1/3.2 370 375 /* SP_QsnFrButtonCornerTlInactive */ {KAknsIIDQsnFrButtonTbCornerTl, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x21b1}, /*KAknsIIDQsnFrButtonCornerTlInactive*/ … … 398 403 /* SP_QsnFrListSideLPressed */ {KAknsIIDQsnFrListSideL, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2691}, 399 404 /* SP_QsnFrListSideRPressed */ {KAknsIIDQsnFrListSideR, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2692}, 400 /* SP_QsnFrList Pressed */ {KAknsIIDQsnFrList,ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2693},405 /* SP_QsnFrListCenterPressed */ {KAknsIIDQsnFrListCenter, ENoDraw, ES60_3_X, EAknsMajorSkin, 0x2693}, 401 406 }; 402 407 … … 515 520 fallbackIndex = 17574; /* EMbmAvkonQgn_graf_nslider_marker_selected */ 516 521 break; 517 case QS60StyleEnums::SP_QgnIndiSub Menu:522 case QS60StyleEnums::SP_QgnIndiSubmenu: 518 523 fallbackIndex = EMbmAvkonQgn_indi_submenu; 519 524 break; … … 684 689 { 685 690 return (QSysInfo::s60Version() > QSysInfo::SV_S60_5_0); 691 } 692 693 void QS60StylePrivate::deleteStoredSettings() 694 { 695 QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); 696 settings.beginGroup(QLatin1String("QS60Style")); 697 settings.remove(QString()); 698 settings.endGroup(); 699 } 700 701 // Since S60Style has 'button' as a graphic, we don't have any native color which to use 702 // for QPalette::Button. Therefore S60Style needs to guesstimate palette color by calculating 703 // average rgb values for button pixels. 704 // Returns Qt::black if there is an issue with the graphics (image is NULL, or no constBits() found). 705 QColor QS60StylePrivate::colorFromFrameGraphics(SkinFrameElements frame) const 706 { 707 #ifndef QT_NO_SETTINGS 708 TInt themeID = 0; 709 //First we need to fetch active theme ID. We need to store the themeID at the same time 710 //as color, so that we can later check if the stored color is still from the same theme. 711 //Native side stores active theme UID/Timestamp into central repository. 712 int error = 0; 713 QT_TRAP_THROWING( 714 CRepository *themeRepository = CRepository::NewLC(personalisationUID); 715 if (themeRepository) { 716 TBuf<32> value; //themeID is currently max of 8 + 1 + 8 characters, but lets have some extra space 717 const TUint32 key = 0x00000002; //active theme key in the repository 718 error = themeRepository->Get(key, value); 719 if (error == KErrNone) { 720 TLex lex(value); 721 TPtrC numberToken(lex.NextToken()); 722 if (numberToken.Length()) 723 error = TLex(numberToken).Val(themeID); 724 else 725 error = KErrArgument; 726 } 727 } 728 CleanupStack::PopAndDestroy(themeRepository); 729 ); 730 731 QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); 732 settings.beginGroup(QLatin1String("QS60Style")); 733 if (themeID != 0) { 734 QVariant buttonColor = settings.value(QLatin1String("ButtonColor")); 735 if (!buttonColor.isNull()) { 736 //there is a stored color value, lets see if the theme ID matches 737 if (error == KErrNone) { 738 QVariant themeUID = settings.value(QLatin1String("ThemeUID")); 739 if (!themeUID.isNull() && themeUID.toInt() == themeID) { 740 QColor storedColor(buttonColor.value<QColor>()); 741 if (storedColor.isValid()) 742 return storedColor; 743 } 744 } 745 settings.remove(QString()); //if color was invalid, or theme has been changed, just delete all stored settings 746 } 747 } 748 #endif 749 750 QColor color = calculatedColor(frame); 751 752 #ifndef QT_NO_SETTINGS 753 settings.setValue(QLatin1String("ThemeUID"), QVariant(themeID)); 754 if (frame == SF_ButtonNormal) //other colors are not currently calculated from graphics 755 settings.setValue(QLatin1String("ButtonColor"), QVariant(color)); 756 settings.endGroup(); 757 #endif 758 759 return color; 686 760 } 687 761 … … 1024 1098 break; 1025 1099 case QS60StylePrivate::SF_ListHighlight: 1026 widthShrink = widthShrink - 2; 1027 heightShrink = heightShrink - 2; 1100 //In Sym^3 devices highlights are less blocky 1101 if (QSysInfo::s60Version() > QSysInfo::SV_S60_5_0) { 1102 widthShrink += 2; 1103 heightShrink += 2; 1104 } else { 1105 widthShrink -= 2; 1106 heightShrink -= 2; 1107 } 1028 1108 break; 1029 1109 case QS60StylePrivate::SF_PopupBackground: … … 1145 1225 // No need to set active layout, if dynamic metrics API is available 1146 1226 setActiveLayout(); 1227 } 1228 1229 void QS60StylePrivate::removeAnimations() 1230 { 1231 //currently only one animation in the list. 1232 m_animations()->removeFirst(); 1147 1233 } 1148 1234 … … 1293 1379 { 1294 1380 bool createNewBackground = false; 1381 TRect applicationRect = (static_cast<CEikAppUi*>(S60->appUi())->ApplicationRect()); 1295 1382 if (!m_background) { 1296 1383 createNewBackground = true; 1297 1384 } else { 1298 1385 //if background brush does not match screensize, re-create it 1299 if (m_background->width() != S60->screenWidthInPixels||1300 m_background->height() != S60->screenHeightInPixels) {1386 if (m_background->width() != applicationRect.Width() || 1387 m_background->height() != applicationRect.Height()) { 1301 1388 delete m_background; 1302 1389 createNewBackground = true; … … 1306 1393 if (createNewBackground) { 1307 1394 QPixmap background = part(QS60StyleEnums::SP_QsnBgScreen, 1308 QSize(S60->screenWidthInPixels, S60->screenHeightInPixels), 0, SkinElementFlags());1395 QSize(applicationRect.Width(), applicationRect.Height()), 0, SkinElementFlags()); 1309 1396 m_background = new QPixmap(background); 1310 1397 } … … 1326 1413 { 1327 1414 clearCaches(QS60StylePrivate::CC_LayoutChange); 1328 setBackgroundTexture(qApp);1329 1415 setActiveLayout(); 1330 1416 refreshUI();
Note:
See TracChangeset
for help on using the changeset viewer.