Ignore:
Timestamp:
May 5, 2011, 5:36:53 AM (14 years ago)
Author:
Dmitry A. Kuminov
Message:

trunk: Merged in qt 4.7.2 sources from branches/vendor/nokia/qt.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/src/gui/styles/qs60style_s60.cpp

    r769 r846  
    11/****************************************************************************
    22**
    3 ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
     3** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
    44** All rights reserved.
    55** Contact: Nokia Corporation (qt-info@nokia.com)
     
    4949#include "private/qcore_symbian_p.h"
    5050#include "qapplication.h"
     51#include "qsettings.h"
    5152
    5253#include <w32std.h>
     
    6667#include <AknBitmapAnimation.h>
    6768
     69#include <centralrepository.h>
     70
    6871#if !defined(QT_NO_STYLE_S60) || defined(QT_PLUGIN)
    6972
     
    7780    ENoDraw
    7881};
     82
     83const TUid personalisationUID = { 0x101F876F };
    7984
    8085enum TSupportRelease {
     
    180185    /* SP_QgnGrafBarProgress */            {KAknsIIDQgnGrafBarProgress,            EDrawIcon,   ES60_All,    -1,-1},
    181186    // 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
    183188    /* SP_QgnGrafScrollArrowDown */        {KAknsIIDQgnGrafScrollArrowDown,     EDrawGulIcon,   ES60_All,    -1,-1},
    184189    /* SP_QgnGrafScrollArrowLeft */        {KAknsIIDQgnGrafScrollArrowLeft,     EDrawGulIcon,   ES60_All,    -1,-1},
     
    215220    /* SP_QgnGrafNsliderMarker */          {KAknsIIDQgnIndiSliderEdit,             EDrawIcon,   ES60_3_1,    EAknsMajorGeneric, 0x19d1 /* KAknsIIDQgnGrafNsliderMarker */},
    216221    /* SP_QgnGrafNsliderMarkerSelected */  {KAknsIIDQgnIndiSliderEdit,             EDrawIcon,   ES60_3_1,    EAknsMajorGeneric, 0x1a4a /* KAknsIIDQgnGrafNsliderMarkerSelected */},
    217     /* SP_QgnIndiSubMenu */                {KAknsIIDQgnIndiSubmenu,                EDrawIcon,   ES60_All,    -1,-1},
     222    /* SP_QgnIndiSubmenu */                {KAknsIIDQgnIndiSubmenu,                EDrawIcon,   ES60_All,    -1,-1},
    218223    /* SP_QgnNoteErased */                 {KAknsIIDQgnNoteErased,                 EDrawIcon,   ES60_All,    -1,-1},
    219224    /* SP_QgnNoteError */                  {KAknsIIDQgnNoteError,                  EDrawIcon,   ES60_All,    -1,-1},
     
    228233    /* SP_QgnPropPhoneMemcLarge */         {KAknsIIDQgnPropPhoneMemcLarge,         EDrawIcon,   ES60_All,    -1,-1},
    229234
     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
    230257    // 3.1 & 3.2 do not have pressed state for scrollbar, so use normal scrollbar graphics instead.
    231258    /* SP_QsnCpScrollHandleBottomPressed*/ {KAknsIIDQsnCpScrollHandleBottom,    EDrawIcon,   ES60_3_X,    EAknsMajorGeneric, 0x20f8}, /*KAknsIIDQsnCpScrollHandleBottomPressed*/
     
    267294    /* SP_QsnFrCaleCornerBl */          {KAknsIIDQsnFrCaleCornerBl,             ENoDraw,     ES60_All,    -1,-1},
    268295    /* SP_QsnFrCaleCornerBr */          {KAknsIIDQsnFrCaleCornerBr,             ENoDraw,     ES60_All,    -1,-1},
    269     /* SP_QsnFrCaleGSideT */            {KAknsIIDQsnFrCaleSideT,                ENoDraw,     ES60_All,    -1,-1},
    270     /* SP_QsnFrCaleGSideB */            {KAknsIIDQsnFrCaleSideB,                ENoDraw,     ES60_All,    -1,-1},
    271     /* SP_QsnFrCaleGSideL */            {KAknsIIDQsnFrCaleSideL,                ENoDraw,     ES60_All,    -1,-1},
    272     /* SP_QsnFrCaleGSideR */            {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},
    273300    /* SP_QsnFrCaleCenter */            {KAknsIIDQsnFrCaleCenter,               ENoDraw,     ES60_All,    -1,-1},
    274301
     
    345372    /* SP_QsnFrPopupSubCenter */        {KAknsIIDQsnFrPopupCenterSubmenu,       ENoDraw,     ES60_3_X,    -1,-1},
    346373
    347     // Toolbar graphics is different in 3.1/3.2 vs. 5.0
    348     /* 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 
    369374    // No inactive button graphics in 3.1/3.2
    370375    /* SP_QsnFrButtonCornerTlInactive */ {KAknsIIDQsnFrButtonTbCornerTl,        ENoDraw,     ES60_3_X,    EAknsMajorSkin, 0x21b1}, /*KAknsIIDQsnFrButtonCornerTlInactive*/
     
    398403    /* SP_QsnFrListSideLPressed */       {KAknsIIDQsnFrListSideL,       ENoDraw,     ES60_3_X,    EAknsMajorSkin, 0x2691},
    399404    /* SP_QsnFrListSideRPressed */       {KAknsIIDQsnFrListSideR,       ENoDraw,     ES60_3_X,    EAknsMajorSkin, 0x2692},
    400     /* SP_QsnFrListPressed */            {KAknsIIDQsnFrList,            ENoDraw,     ES60_3_X,    EAknsMajorSkin, 0x2693},
     405    /* SP_QsnFrListCenterPressed */      {KAknsIIDQsnFrListCenter,      ENoDraw,     ES60_3_X,    EAknsMajorSkin, 0x2693},
    401406};
    402407
     
    515520            fallbackIndex = 17574; /* EMbmAvkonQgn_graf_nslider_marker_selected */
    516521            break;
    517         case QS60StyleEnums::SP_QgnIndiSubMenu:
     522        case QS60StyleEnums::SP_QgnIndiSubmenu:
    518523            fallbackIndex = EMbmAvkonQgn_indi_submenu;
    519524            break;
     
    684689{
    685690    return (QSysInfo::s60Version() > QSysInfo::SV_S60_5_0);
     691}
     692
     693void 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).
     705QColor 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;
    686760}
    687761
     
    10241098            break;
    10251099        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            }
    10281108            break;
    10291109        case QS60StylePrivate::SF_PopupBackground:
     
    11451225    // No need to set active layout, if dynamic metrics API is available
    11461226    setActiveLayout();
     1227}
     1228
     1229void QS60StylePrivate::removeAnimations()
     1230{
     1231    //currently only one animation in the list.
     1232    m_animations()->removeFirst();
    11471233}
    11481234
     
    12931379{
    12941380    bool createNewBackground = false;
     1381    TRect applicationRect = (static_cast<CEikAppUi*>(S60->appUi())->ApplicationRect());
    12951382    if (!m_background) {
    12961383        createNewBackground = true;
    12971384    } else {
    12981385        //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()) {
    13011388            delete m_background;
    13021389            createNewBackground = true;
     
    13061393    if (createNewBackground) {
    13071394        QPixmap background = part(QS60StyleEnums::SP_QsnBgScreen,
    1308             QSize(S60->screenWidthInPixels, S60->screenHeightInPixels), 0, SkinElementFlags());
     1395                QSize(applicationRect.Width(), applicationRect.Height()), 0, SkinElementFlags());
    13091396        m_background = new QPixmap(background);
    13101397    }
     
    13261413{
    13271414    clearCaches(QS60StylePrivate::CC_LayoutChange);
    1328     setBackgroundTexture(qApp);
    13291415    setActiveLayout();
    13301416    refreshUI();
Note: See TracChangeset for help on using the changeset viewer.