blob: 2d3dc8c30ca506016d6e026b224ba9056728a69b [file] [log] [blame]
/****************************************************************************
**
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the QtGui module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** GNU Lesser General Public License Usage
** This file may be used under the terms of the GNU Lesser General Public
** License version 2.1 as published by the Free Software Foundation and
** appearing in the file LICENSE.LGPL included in the packaging of this
** file. Please review the following information to ensure the GNU Lesser
** General Public License version 2.1 requirements will be met:
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU General
** Public License version 3.0 as published by the Free Software Foundation
** and appearing in the file LICENSE.GPL included in the packaging of this
** file. Please review the following information to ensure the GNU General
** Public License version 3.0 requirements will be met:
** http://www.gnu.org/copyleft/gpl.html.
**
** Other Usage
** Alternatively, this file may be used in accordance with the terms and
** conditions contained in a signed written agreement between you and Nokia.
**
**
**
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
#ifndef QS60STYLE_P_H
#define QS60STYLE_P_H
#include "qs60style.h"
#include "qcommonstyle_p.h"
#include <QtCore/qhash.h>
//
// W A R N I N G
// -------------
//
// This file is not part of the Qt API. It exists purely as an
// implementation detail. This header file may change from version to
// version without notice, or even be removed.
//
// We mean it.
//
QT_BEGIN_NAMESPACE
const int MAX_NON_CUSTOM_PIXELMETRICS = 92;
const int CUSTOMVALUESCOUNT = 7;
const int MAX_PIXELMETRICS = MAX_NON_CUSTOM_PIXELMETRICS + CUSTOMVALUESCOUNT;
typedef struct {
unsigned short height;
unsigned short width;
int major_version;
int minor_version;
const char* layoutName;
} layoutHeader;
#ifdef Q_OS_SYMBIAN
NONSHARABLE_CLASS (QS60StyleEnums)
#else
class QS60StyleEnums
#endif
: public QObject
{
#ifndef Q_WS_S60
Q_OBJECT
Q_ENUMS(FontCategories)
Q_ENUMS(SkinParts)
Q_ENUMS(ColorLists)
#endif // !Q_WS_S60
public:
// S60 definitions within theme
enum ThemeDefinitions {
TD_AnimationData,
};
//Defines which values are contained within animation data (retrieved using TD_AnimationData).
//Additionally defines the order in which the items are given out in QList<QVariant>.
enum AnimationData {
AD_Interval = 0,
AD_NumberOfFrames,
AD_AnimationPlayMode, //currently not used as themes seem to contain invalid data
};
// Animation modes
enum AnimationMode {
AM_PlayOnce = 0, //animation is played exactly once
AM_Looping, //animation is repeated until stopped
AM_Bounce //animation is played repeatedly until stopped,
//but frames are played in reverse order every second time
//(no support yet)
};
// S60 look-and-feel font categories
enum FontCategories {
FC_Undefined,
FC_Primary,
FC_Secondary,
FC_Title,
FC_PrimarySmall,
FC_Digital
};
enum SkinParts {
SP_QgnGrafBarWaitAnim,
SP_QgnGrafBarFrameCenter,
SP_QgnGrafBarFrameSideL,
SP_QgnGrafBarFrameSideR,
SP_QgnGrafBarProgress,
SP_QgnGrafOrgBgGrid,
SP_QgnGrafScrollArrowDown,
SP_QgnGrafScrollArrowLeft,
SP_QgnGrafScrollArrowRight,
SP_QgnGrafScrollArrowUp,
SP_QgnGrafTabActiveL,
SP_QgnGrafTabActiveM,
SP_QgnGrafTabActiveR,
SP_QgnGrafTabPassiveL,
SP_QgnGrafTabPassiveM,
SP_QgnGrafTabPassiveR,
SP_QgnGrafNsliderEndLeft,
SP_QgnGrafNsliderEndRight,
SP_QgnGrafNsliderMiddle,
SP_QgnIndiCheckboxOff,
SP_QgnIndiCheckboxOn,
SP_QgnIndiHlColSuper,
SP_QgnIndiHlExpSuper,
SP_QgnIndiHlLineBranch,
SP_QgnIndiHlLineEnd,
SP_QgnIndiHlLineStraight,
SP_QgnIndiMarkedAdd,
SP_QgnIndiNaviArrowLeft,
SP_QgnIndiNaviArrowRight,
SP_QgnIndiRadiobuttOff,
SP_QgnIndiRadiobuttOn,
SP_QgnGrafNsliderMarker,
SP_QgnGrafNsliderMarkerSelected,
SP_QgnIndiSubmenu,
SP_QgnNoteErased,
SP_QgnNoteError,
SP_QgnNoteInfo,
SP_QgnNoteOk,
SP_QgnNoteQuery,
SP_QgnNoteWarning,
SP_QgnPropFileSmall,
SP_QgnPropFolderCurrent,
SP_QgnPropFolderSmall,
SP_QgnPropFolderSmallNew,
SP_QgnPropPhoneMemcLarge,
SP_QgnFrSctrlButtonCornerTl, // Toolbar button
SP_QgnFrSctrlButtonCornerTr,
SP_QgnFrSctrlButtonCornerBl,
SP_QgnFrSctrlButtonCornerBr,
SP_QgnFrSctrlButtonSideT,
SP_QgnFrSctrlButtonSideB,
SP_QgnFrSctrlButtonSideL,
SP_QgnFrSctrlButtonSideR,
SP_QgnFrSctrlButtonCenter,
SP_QgnFrSctrlButtonCornerTlPressed, // Toolbar button, pressed
SP_QgnFrSctrlButtonCornerTrPressed,
SP_QgnFrSctrlButtonCornerBlPressed,
SP_QgnFrSctrlButtonCornerBrPressed,
SP_QgnFrSctrlButtonSideTPressed,
SP_QgnFrSctrlButtonSideBPressed,
SP_QgnFrSctrlButtonSideLPressed,
SP_QgnFrSctrlButtonSideRPressed,
SP_QgnFrSctrlButtonCenterPressed,
SP_QsnCpScrollHandleBottomPressed, //ScrollBar handle, pressed state
SP_QsnCpScrollHandleMiddlePressed,
SP_QsnCpScrollHandleTopPressed,
SP_QsnBgScreen,
SP_QsnCpScrollBgBottom,
SP_QsnCpScrollBgMiddle,
SP_QsnCpScrollBgTop,
SP_QsnCpScrollHandleBottom,
SP_QsnCpScrollHandleMiddle,
SP_QsnCpScrollHandleTop,
SP_QsnFrButtonTbCornerTl, // Button, normal state
SP_QsnFrButtonTbCornerTr,
SP_QsnFrButtonTbCornerBl,
SP_QsnFrButtonTbCornerBr,
SP_QsnFrButtonTbSideT,
SP_QsnFrButtonTbSideB,
SP_QsnFrButtonTbSideL,
SP_QsnFrButtonTbSideR,
SP_QsnFrButtonTbCenter,
SP_QsnFrButtonTbCornerTlPressed, // Button, pressed state
SP_QsnFrButtonTbCornerTrPressed,
SP_QsnFrButtonTbCornerBlPressed,
SP_QsnFrButtonTbCornerBrPressed,
SP_QsnFrButtonTbSideTPressed,
SP_QsnFrButtonTbSideBPressed,
SP_QsnFrButtonTbSideLPressed,
SP_QsnFrButtonTbSideRPressed,
SP_QsnFrButtonTbCenterPressed,
SP_QsnFrCaleCornerTl, // calendar grid item
SP_QsnFrCaleCornerTr,
SP_QsnFrCaleCornerBl,
SP_QsnFrCaleCornerBr,
SP_QsnFrCaleSideT,
SP_QsnFrCaleSideB,
SP_QsnFrCaleSideL,
SP_QsnFrCaleSideR,
SP_QsnFrCaleCenter,
SP_QsnFrCaleHeadingCornerTl, // calendar grid header
SP_QsnFrCaleHeadingCornerTr,
SP_QsnFrCaleHeadingCornerBl,
SP_QsnFrCaleHeadingCornerBr,
SP_QsnFrCaleHeadingSideT,
SP_QsnFrCaleHeadingSideB,
SP_QsnFrCaleHeadingSideL,
SP_QsnFrCaleHeadingSideR,
SP_QsnFrCaleHeadingCenter,
SP_QsnFrInputCornerTl, // Text input field
SP_QsnFrInputCornerTr,
SP_QsnFrInputCornerBl,
SP_QsnFrInputCornerBr,
SP_QsnFrInputSideT,
SP_QsnFrInputSideB,
SP_QsnFrInputSideL,
SP_QsnFrInputSideR,
SP_QsnFrInputCenter,
SP_QsnFrListCornerTl, // List background
SP_QsnFrListCornerTr,
SP_QsnFrListCornerBl,
SP_QsnFrListCornerBr,
SP_QsnFrListSideT,
SP_QsnFrListSideB,
SP_QsnFrListSideL,
SP_QsnFrListSideR,
SP_QsnFrListCenter,
SP_QsnFrPopupCornerTl, // Option menu background
SP_QsnFrPopupCornerTr,
SP_QsnFrPopupCornerBl,
SP_QsnFrPopupCornerBr,
SP_QsnFrPopupSideT,
SP_QsnFrPopupSideB,
SP_QsnFrPopupSideL,
SP_QsnFrPopupSideR,
SP_QsnFrPopupCenter,
SP_QsnFrPopupPreviewCornerTl, // tool tip background
SP_QsnFrPopupPreviewCornerTr,
SP_QsnFrPopupPreviewCornerBl,
SP_QsnFrPopupPreviewCornerBr,
SP_QsnFrPopupPreviewSideT,
SP_QsnFrPopupPreviewSideB,
SP_QsnFrPopupPreviewSideL,
SP_QsnFrPopupPreviewSideR,
SP_QsnFrPopupPreviewCenter,
SP_QsnFrSetOptCornerTl, // Settings list
SP_QsnFrSetOptCornerTr,
SP_QsnFrSetOptCornerBl,
SP_QsnFrSetOptCornerBr,
SP_QsnFrSetOptSideT,
SP_QsnFrSetOptSideB,
SP_QsnFrSetOptSideL,
SP_QsnFrSetOptSideR,
SP_QsnFrSetOptCenter,
SP_QsnFrPopupSubCornerTl, // Toolbar background
SP_QsnFrPopupSubCornerTr,
SP_QsnFrPopupSubCornerBl,
SP_QsnFrPopupSubCornerBr,
SP_QsnFrPopupSubSideT,
SP_QsnFrPopupSubSideB,
SP_QsnFrPopupSubSideL,
SP_QsnFrPopupSubSideR,
SP_QsnFrPopupSubCenter,
SP_QsnFrButtonCornerTlInactive, // Inactive button
SP_QsnFrButtonCornerTrInactive,
SP_QsnFrButtonCornerBlInactive,
SP_QsnFrButtonCornerBrInactive,
SP_QsnFrButtonSideTInactive,
SP_QsnFrButtonSideBInactive,
SP_QsnFrButtonSideLInactive,
SP_QsnFrButtonSideRInactive,
SP_QsnFrButtonCenterInactive,
SP_QsnFrGridCornerTlPressed, // Pressed table item
SP_QsnFrGridCornerTrPressed,
SP_QsnFrGridCornerBlPressed,
SP_QsnFrGridCornerBrPressed,
SP_QsnFrGridSideTPressed,
SP_QsnFrGridSideBPressed,
SP_QsnFrGridSideLPressed,
SP_QsnFrGridSideRPressed,
SP_QsnFrGridCenterPressed,
SP_QsnFrListCornerTlPressed, // Pressed list item
SP_QsnFrListCornerTrPressed,
SP_QsnFrListCornerBlPressed,
SP_QsnFrListCornerBrPressed,
SP_QsnFrListSideTPressed,
SP_QsnFrListSideBPressed,
SP_QsnFrListSideLPressed,
SP_QsnFrListSideRPressed,
SP_QsnFrListCenterPressed,
SP_QtgToolBarAdd,
SP_QtgToolBarAddDetail,
SP_QtgToolBarAgain,
SP_QtgToolBarAgenda,
SP_QtgToolBarAudioOff,
SP_QtgToolBarAudioOn,
SP_QtgToolBarBack,
SP_QtgToolBarBluetoothOff,
SP_QtgToolBarBluetoothOn,
SP_QtgToolBarCancel,
SP_QtgToolBarDelete,
SP_QtgToolBarDetails,
SP_QtgToolBarDone,
SP_QtgToolBarEdit,
SP_QtgToolBarEditDisabled,
SP_QtgToolBarEmailSend,
SP_QtgToolBarEmergencyCall,
SP_QtgToolBarFavouriteAdd,
SP_QtgToolBarFavouriteRemove,
SP_QtgToolBarFavourites,
SP_QtgToolBarForward,
SP_QtgToolBarGo,
SP_QtgToolBarHome,
SP_QtgToolBarImageTools,
SP_QtgToolBarList,
SP_QtgToolBarLock,
SP_QtgToolBarLogs,
SP_QtgToolBarMenu,
SP_QtgToolBarNewContact,
SP_QtgToolBarNewGroup,
SP_QtgToolBarNext,
SP_QtgToolBarNextFrame,
SP_QtgToolBarNowPlay,
SP_QtgToolBarOptions,
SP_QtgToolBarOther,
SP_QtgToolBarOvi,
SP_QtgToolBarPause,
SP_QtgToolBarPlay,
SP_QtgToolBarPrevious,
SP_QtgToolBarPreviousFrame,
SP_QtgToolBarRead,
SP_QtgToolBarRedo,
SP_QtgToolBarRedoDisabled,
SP_QtgToolBarRefresh,
SP_QtgToolBarRemoveDetail,
SP_QtgToolBarRemoveDisabled,
SP_QtgToolBarRepeat,
SP_QtgToolBarRepeatOff,
SP_QtgToolBarRepeatOne,
SP_QtgToolBarRewind,
SP_QtgToolBarSearch,
SP_QtgToolBarSearchDisabled,
SP_QtgToolBarSelectContent,
SP_QtgToolBarSelfTimer,
SP_QtgToolBarSend,
SP_QtgToolBarSendDimmed,
SP_QtgToolBarShare,
SP_QtgToolBarShift,
SP_QtgToolBarShuffle,
SP_QtgToolBarShuffleOff,
SP_QtgToolBarSignalOff,
SP_QtgToolBarSignalOn,
SP_QtgToolBarStop,
SP_QtgToolBarSync,
SP_QtgToolBarTools,
SP_QtgToolBarTrim,
SP_QtgToolBarUnlock,
SP_QtgToolBarUnmark,
SP_QtgToolBarView,
SP_QtgToolBarWlanOff,
SP_QtgToolBarWlanOn,
SP_QtgGrafCameraButtonCaptureNormal,
SP_QtgGrafCameraButtonCapturePressed,
SP_QtgGrafCameraButtonPauseNormal,
SP_QtgGrafCameraButtonPausePressed,
SP_QtgGrafCameraButtonPlayNormal,
SP_QtgGrafCameraButtonPlayPressed,
SP_QtgGrafCameraButtonRecNormal,
SP_QtgGrafCameraButtonRecPressed,
SP_QtgGrafCameraButtonStopNormal,
SP_QtgGrafCameraButtonStopPressed,
SP_QtgTabAll,
SP_QtgTabArtist,
SP_QtgTabFavourite,
SP_QtgTabGenre,
SP_QtgTabLanguage,
SP_QtgTabMusicAlbum,
SP_QtgTabPhotosAlbum,
SP_QtgTabPhotosAll,
SP_QtgTabPlaylist,
SP_QtgTabServices,
SP_QtgTabSongs,
SP_QtgTabVideos,
SP_QgnIndiBrowserTbReload,
SP_QgnIndiBrowserTbHome,
SP_QgnIndiBrowserTbStop,
};
enum ColorLists {
CL_QsnHighlightColors,
CL_QsnIconColors,
CL_QsnLineColors,
CL_QsnOtherColors,
CL_QsnParentColors,
CL_QsnTextColors
};
};
#ifdef Q_WS_S60
class CAknBitmapAnimation;
NONSHARABLE_CLASS (AnimationData) : public QObject
{
public:
AnimationData(const QS60StyleEnums::SkinParts part, int frames, int interval);
const QS60StyleEnums::SkinParts m_id;
int m_frames;
int m_interval;
QS60StyleEnums::AnimationMode m_mode;
};
NONSHARABLE_CLASS (AnimationDataV2) : public AnimationData
{
public:
AnimationDataV2(const AnimationData &data);
~AnimationDataV2();
CAknBitmapAnimation *m_animation;
int m_currentFrame;
bool m_resourceBased;
int m_timerId;
};
class QS60StyleAnimation : public QObject
{
public:
QS60StyleAnimation(const QS60StyleEnums::SkinParts part, int frames, int interval);
~QS60StyleAnimation();
public:
QS60StyleEnums::SkinParts animationId() const {return m_currentData->m_id;}
int frameCount() const { return m_currentData->m_frames;}
int interval() const {return m_currentData->m_interval;}
QS60StyleEnums::AnimationMode playMode() const {return m_currentData->m_mode;}
CAknBitmapAnimation* animationObject() const {return m_currentData->m_animation;}
bool isResourceBased() const {return m_currentData->m_resourceBased;}
int timerId() const {return m_currentData->m_timerId;}
int currentFrame() const {return m_currentData->m_currentFrame;}
void setFrameCount(int frameCount) {m_currentData->m_frames = frameCount;}
void setInterval(int interval) {m_currentData->m_interval = interval;}
void setAnimationObject(CAknBitmapAnimation* animation);
void setResourceBased(bool resourceBased) {m_currentData->m_resourceBased = resourceBased;}
void setTimerId(int timerId) {m_currentData->m_timerId = timerId;}
void setCurrentFrame(int currentFrame) {m_currentData->m_currentFrame = currentFrame;}
void resetToDefaults();
private: //data members
//TODO: consider changing these to non-pointers as the classes are rather small anyway
AnimationData *m_defaultData;
AnimationDataV2 *m_currentData;
};
#endif //Q_WS_S60
class QFocusFrame;
class QProgressBar;
class QS60StyleAnimation;
// Private class
#ifdef Q_OS_SYMBIAN
NONSHARABLE_CLASS (QS60StylePrivate)
#else
class QS60StylePrivate
#endif
: public QCommonStylePrivate
{
Q_DECLARE_PUBLIC(QS60Style)
public:
QS60StylePrivate();
~QS60StylePrivate();
enum SkinElements {
SE_ButtonNormal,
SE_ButtonPressed,
SE_FrameLineEdit,
SE_ProgressBarGrooveHorizontal,
SE_ProgressBarIndicatorHorizontal,
SE_ProgressBarGrooveVertical,
SE_ProgressBarIndicatorVertical,
SE_ScrollBarGrooveHorizontal,
SE_ScrollBarGrooveVertical,
SE_ScrollBarHandleHorizontal,
SE_ScrollBarHandleVertical,
SE_SliderHandleHorizontal,
SE_SliderHandleVertical,
SE_SliderHandleSelectedHorizontal,
SE_SliderHandleSelectedVertical,
SE_SliderGrooveVertical,
SE_SliderGrooveHorizontal,
SE_TabBarTabEastActive,
SE_TabBarTabEastInactive,
SE_TabBarTabNorthActive,
SE_TabBarTabNorthInactive,
SE_TabBarTabSouthActive,
SE_TabBarTabSouthInactive,
SE_TabBarTabWestActive,
SE_TabBarTabWestInactive,
SE_ListHighlight,
SE_PopupBackground,
SE_SettingsList,
SE_TableItem,
SE_TableHeaderItem,
SE_ToolTip, //own graphic available on 3.2+ releases,
SE_ToolBar,
SE_ToolBarButton,
SE_ToolBarButtonPressed,
SE_PanelBackground,
SE_ScrollBarHandlePressedHorizontal,
SE_ScrollBarHandlePressedVertical,
SE_ButtonInactive,
SE_Editor,
SE_DropArea,
SE_TableItemPressed,
SE_ListItemPressed,
SE_DialogBackground,
};
enum SkinFrameElements {
SF_ButtonNormal,
SF_ButtonPressed,
SF_FrameLineEdit,
SF_ListHighlight,
SF_PopupBackground,
SF_SettingsList,
SF_TableItem,
SF_TableHeaderItem,
SF_ToolTip,
SF_ToolBar,
SF_ToolBarButton,
SF_ToolBarButtonPressed,
SF_PanelBackground,
SF_ButtonInactive,
SF_TableItemPressed,
SF_ListItemPressed,
SF_DialogBackground,
};
enum SkinElementFlag {
SF_PointNorth = 0x0001, // North = the default
SF_PointEast = 0x0002,
SF_PointSouth = 0x0004,
SF_PointWest = 0x0008,
SF_StateEnabled = 0x0010, // Enabled = the default
SF_StateDisabled = 0x0020,
SF_ColorSkinned = 0x0040, // pixmap is colored with foreground pen color
SF_Animation = 0x0080,
SF_Mirrored_X_Axis = 0x0100,
SF_Mirrored_Y_Axis = 0x0200
};
enum CacheClearReason {
CC_UndefinedChange = 0,
CC_LayoutChange,
CC_ThemeChange
};
Q_DECLARE_FLAGS(SkinElementFlags, SkinElementFlag)
// draws skin element
static void drawSkinElement(SkinElements element, QPainter *painter,
const QRect &rect, SkinElementFlags flags = KDefaultSkinElementFlags);
// draws a specific skin part
static void drawSkinPart(QS60StyleEnums::SkinParts part, QPainter *painter,
const QRect &rect, SkinElementFlags flags = KDefaultSkinElementFlags);
// gets pixel metrics value
static short pixelMetric(int metric);
// gets color. 'index' is NOT 0-based.
// It corresponds to the enum key 1-based numbers of TAknsQsnXYZColorsIndex, not the values.
static QColor s60Color(QS60StyleEnums::ColorLists list,
int index, const QStyleOption *option);
// gets state specific color
static QColor stateColor(const QColor &color, const QStyleOption *option);
// gets lighter color than base color
static QColor lighterColor(const QColor &baseColor);
//deduces if the given widget should have separately themeable background
static bool drawsOwnThemeBackground(const QWidget *widget);
QFont s60Font(QS60StyleEnums::FontCategories fontCategory,
int pointSize = -1, bool resolveFontSize = true) const;
// clears all style caches (fonts, colors, pixmaps)
void clearCaches(CacheClearReason reason = CC_UndefinedChange);
// themed main background oprations
void setBackgroundTexture(QApplication *application) const;
static void deleteBackground();
static bool isTouchSupported();
static bool isToolBarBackground();
static bool hasSliderGrooveGraphic();
static bool isSingleClickUi();
static bool isWidgetPressed(const QWidget *widget);
#ifdef Q_WS_S60
static void deleteStoredSettings();
// calculates average color based on theme graphics (minus borders).
QColor colorFromFrameGraphics(SkinFrameElements frame) const;
#endif
QColor calculatedColor(SkinFrameElements frame) const;
//set theme palette for application
void setThemePalette(QApplication *application) const;
//access to theme palette
static QPalette* themePalette();
static const layoutHeader m_layoutHeaders[];
static const short data[][MAX_PIXELMETRICS];
void setCurrentLayout(int layoutIndex);
void setActiveLayout();
// Pointer
static short const *m_pmPointer;
// number of layouts supported by the style
static const int m_numberOfLayouts;
mutable QHash<QPair<QS60StyleEnums::FontCategories , int>, QFont> m_mappedFontsCache;
// Has one entry per SkinFrameElements
static const struct frameElementCenter {
SkinElements element;
QS60StyleEnums::SkinParts center;
} m_frameElementsData[];
static QPixmap frame(SkinFrameElements frame, const QSize &size,
SkinElementFlags flags = KDefaultSkinElementFlags);
static QPixmap backgroundTexture(bool skipCreation = false);
static QPixmap placeHolderTexture();
#ifdef Q_WS_S60
void handleDynamicLayoutVariantSwitch();
void handleSkinChange();
#endif // Q_WS_S60
//Checks that the current brush is transparent or has BrushStyle NoBrush,
//so that theme graphic background can be drawn.
static bool canDrawThemeBackground(const QBrush &backgroundBrush, const QWidget *widget);
static int currentAnimationFrame(QS60StyleEnums::SkinParts part);
#ifdef Q_WS_S60
//No support for animations on emulated style
void startAnimation(QS60StyleEnums::SkinParts animation);
void stopAnimation(QS60StyleEnums::SkinParts animation);
static QS60StyleAnimation* animationDefinition(QS60StyleEnums::SkinParts part);
static void removeAnimations();
#endif
private:
static void drawPart(QS60StyleEnums::SkinParts part, QPainter *painter,
const QRect &rect, SkinElementFlags flags = KDefaultSkinElementFlags);
static void drawRow(QS60StyleEnums::SkinParts start, QS60StyleEnums::SkinParts middle,
QS60StyleEnums::SkinParts end, Qt::Orientation orientation, QPainter *painter,
const QRect &rect, SkinElementFlags flags = KDefaultSkinElementFlags);
static void drawFrame(SkinFrameElements frame, QPainter *painter,
const QRect &rect, SkinElementFlags flags = KDefaultSkinElementFlags);
static QPixmap cachedPart(QS60StyleEnums::SkinParts part, const QSize &size,
QPainter *painter, SkinElementFlags flags = KDefaultSkinElementFlags);
static QPixmap cachedFrame(SkinFrameElements frame, const QSize &size,
SkinElementFlags flags = KDefaultSkinElementFlags);
// set S60 font for widget
void setFont(QWidget *widget) const;
static void setThemePalette(QWidget *widget);
void setThemePalette(QPalette *palette) const;
static void setThemePaletteHash(QPalette *palette);
static void storeThemePalette(QPalette *palette);
static void deleteThemePalette();
static bool equalToThemePalette(QColor color, QPalette::ColorRole role);
static bool equalToThemePalette(qint64 cacheKey, QPalette::ColorRole role);
static QSize partSize(QS60StyleEnums::SkinParts part,
SkinElementFlags flags = KDefaultSkinElementFlags);
static QPixmap part(QS60StyleEnums::SkinParts part, const QSize &size,
QPainter *painter, SkinElementFlags flags = KDefaultSkinElementFlags);
static QFont s60Font_specific(QS60StyleEnums::FontCategories fontCategory,
int pointSize, bool resolveFontSize);
static QSize screenSize();
// Contains background texture.
static QPixmap *m_background;
// Placeholder pixmap for the real background texture.
static QPixmap *m_placeHolderTexture;
const static SkinElementFlags KDefaultSkinElementFlags;
// defined theme palette
static QPalette *m_themePalette;
QPalette m_originalPalette;
QPointer<QFocusFrame> m_focusFrame;
static qint64 m_webPaletteKey;
static QPointer<QWidget> m_pressedWidget;
#ifdef Q_WS_S60
//list of progress bars having animation running
QList<QProgressBar *> m_bars;
#endif
};
QT_END_NAMESPACE
#endif // QS60STYLE_P_H