source: trunk/src/gui/styles/qs60style_p.h@ 605

Last change on this file since 605 was 561, checked in by Dmitry A. Kuminov, 15 years ago

trunk: Merged in qt 4.6.1 sources.

  • Property svn:eol-style set to native
File size: 17.0 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation ([email protected])
6**
7** This file is part of the QtGui module of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:LGPL$
10** Commercial Usage
11** Licensees holding valid Qt Commercial licenses may use this file in
12** accordance with the Qt Commercial License Agreement provided with the
13** Software or, alternatively, in accordance with the terms contained in
14** a written agreement between you and Nokia.
15**
16** GNU Lesser General Public License Usage
17** Alternatively, this file may be used under the terms of the GNU Lesser
18** General Public License version 2.1 as published by the Free Software
19** Foundation and appearing in the file LICENSE.LGPL included in the
20** packaging of this file. Please review the following information to
21** ensure the GNU Lesser General Public License version 2.1 requirements
22** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23**
24** In addition, as a special exception, Nokia gives you certain additional
25** rights. These rights are described in the Nokia Qt LGPL Exception
26** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
27**
28** GNU General Public License Usage
29** Alternatively, this file may be used under the terms of the GNU
30** General Public License version 3.0 as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL included in the
32** packaging of this file. Please review the following information to
33** ensure the GNU General Public License version 3.0 requirements will be
34** met: http://www.gnu.org/copyleft/gpl.html.
35**
36** If you have questions regarding the use of this file, please contact
37** Nokia at [email protected].
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42#ifndef QS60STYLE_P_H
43#define QS60STYLE_P_H
44
45#include "qs60style.h"
46#include "qcommonstyle_p.h"
47#include <QtCore/qhash.h>
48
49//
50// W A R N I N G
51// -------------
52//
53// This file is not part of the Qt API. It exists purely as an
54// implementation detail. This header file may change from version to
55// version without notice, or even be removed.
56//
57// We mean it.
58//
59
60QT_BEGIN_NAMESPACE
61
62const int MAX_NON_CUSTOM_PIXELMETRICS = 92;
63const int CUSTOMVALUESCOUNT = 4;
64enum {
65 PM_Custom_FrameCornerWidth = MAX_NON_CUSTOM_PIXELMETRICS,
66 PM_Custom_FrameCornerHeight,
67 PM_Custom_BoldLineWidth,
68 PM_Custom_ThinLineWidth
69 };
70const int MAX_PIXELMETRICS = MAX_NON_CUSTOM_PIXELMETRICS + CUSTOMVALUESCOUNT;
71
72typedef struct {
73 unsigned short height;
74 unsigned short width;
75 int major_version;
76 int minor_version;
77 bool mirroring; // TODO: (nice to have) Use Qt::LayoutDirection
78 const char* layoutName;
79} layoutHeader;
80
81#ifdef Q_OS_SYMBIAN
82NONSHARABLE_CLASS (QS60StyleEnums)
83#else
84class QS60StyleEnums
85#endif
86: public QObject
87{
88#ifndef Q_WS_S60
89 Q_OBJECT
90 Q_ENUMS(FontCategories)
91 Q_ENUMS(SkinParts)
92 Q_ENUMS(ColorLists)
93#endif // !Q_WS_S60
94
95public:
96 // S60 look-and-feel font categories
97 enum FontCategories {
98 FC_Undefined,
99 FC_Primary,
100 FC_Secondary,
101 FC_Title,
102 FC_PrimarySmall,
103 FC_Digital
104 };
105
106 enum SkinParts {
107 SP_QgnGrafBarWait,
108 SP_QgnGrafBarFrameCenter,
109 SP_QgnGrafBarFrameSideL,
110 SP_QgnGrafBarFrameSideR,
111 SP_QgnGrafBarProgress,
112 SP_QgnGrafScrollArrowDown,
113 SP_QgnGrafScrollArrowLeft,
114 SP_QgnGrafScrollArrowRight,
115 SP_QgnGrafScrollArrowUp,
116 SP_QgnGrafTabActiveL,
117 SP_QgnGrafTabActiveM,
118 SP_QgnGrafTabActiveR,
119 SP_QgnGrafTabPassiveL,
120 SP_QgnGrafTabPassiveM,
121 SP_QgnGrafTabPassiveR,
122 SP_QgnGrafNsliderEndLeft,
123 SP_QgnGrafNsliderEndRight,
124 SP_QgnGrafNsliderMiddle,
125 SP_QgnIndiCheckboxOff,
126 SP_QgnIndiCheckboxOn,
127 SP_QgnIndiHlColSuper, // Available in S60 release 3.2 and later.
128 SP_QgnIndiHlExpSuper, // Available in S60 release 3.2 and later.
129 SP_QgnIndiHlLineBranch, // Available in S60 release 3.2 and later.
130 SP_QgnIndiHlLineEnd, // Available in S60 release 3.2 and later.
131 SP_QgnIndiHlLineStraight, // Available in S60 release 3.2 and later.
132 SP_QgnIndiMarkedAdd,
133 SP_QgnIndiNaviArrowLeft,
134 SP_QgnIndiNaviArrowRight,
135 SP_QgnIndiRadiobuttOff,
136 SP_QgnIndiRadiobuttOn,
137 SP_QgnGrafNsliderMarker,
138 SP_QgnGrafNsliderMarkerSelected,
139 SP_QgnIndiSubMenu,
140 SP_QgnNoteErased,
141 SP_QgnNoteError,
142 SP_QgnNoteInfo,
143 SP_QgnNoteOk,
144 SP_QgnNoteQuery,
145 SP_QgnNoteWarning,
146 SP_QgnPropFileSmall,
147 SP_QgnPropFolderCurrent,
148 SP_QgnPropFolderSmall,
149 SP_QgnPropFolderSmallNew,
150 SP_QgnPropPhoneMemcLarge,
151 SP_QsnCpScrollHandleBottomPressed, //ScrollBar handle, pressed state
152 SP_QsnCpScrollHandleMiddlePressed,
153 SP_QsnCpScrollHandleTopPressed,
154 SP_QsnBgScreen,
155 SP_QsnCpScrollBgBottom,
156 SP_QsnCpScrollBgMiddle,
157 SP_QsnCpScrollBgTop,
158 SP_QsnCpScrollHandleBottom,
159 SP_QsnCpScrollHandleMiddle,
160 SP_QsnCpScrollHandleTop,
161 SP_QsnFrButtonTbCornerTl, // Button, normal state
162 SP_QsnFrButtonTbCornerTr,
163 SP_QsnFrButtonTbCornerBl,
164 SP_QsnFrButtonTbCornerBr,
165 SP_QsnFrButtonTbSideT,
166 SP_QsnFrButtonTbSideB,
167 SP_QsnFrButtonTbSideL,
168 SP_QsnFrButtonTbSideR,
169 SP_QsnFrButtonTbCenter,
170 SP_QsnFrButtonTbCornerTlPressed, // Button, pressed state
171 SP_QsnFrButtonTbCornerTrPressed,
172 SP_QsnFrButtonTbCornerBlPressed,
173 SP_QsnFrButtonTbCornerBrPressed,
174 SP_QsnFrButtonTbSideTPressed,
175 SP_QsnFrButtonTbSideBPressed,
176 SP_QsnFrButtonTbSideLPressed,
177 SP_QsnFrButtonTbSideRPressed,
178 SP_QsnFrButtonTbCenterPressed,
179 SP_QsnFrCaleCornerTl, // calendar grid item
180 SP_QsnFrCaleCornerTr,
181 SP_QsnFrCaleCornerBl,
182 SP_QsnFrCaleCornerBr,
183 SP_QsnFrCaleGSideT,
184 SP_QsnFrCaleGSideB,
185 SP_QsnFrCaleGSideL,
186 SP_QsnFrCaleGSideR,
187 SP_QsnFrCaleCenter,
188 SP_QsnFrCaleHeadingCornerTl, // calendar grid header
189 SP_QsnFrCaleHeadingCornerTr,
190 SP_QsnFrCaleHeadingCornerBl,
191 SP_QsnFrCaleHeadingCornerBr,
192 SP_QsnFrCaleHeadingSideT,
193 SP_QsnFrCaleHeadingSideB,
194 SP_QsnFrCaleHeadingSideL,
195 SP_QsnFrCaleHeadingSideR,
196 SP_QsnFrCaleHeadingCenter,
197 SP_QsnFrInputCornerTl, // Text input field
198 SP_QsnFrInputCornerTr,
199 SP_QsnFrInputCornerBl,
200 SP_QsnFrInputCornerBr,
201 SP_QsnFrInputSideT,
202 SP_QsnFrInputSideB,
203 SP_QsnFrInputSideL,
204 SP_QsnFrInputSideR,
205 SP_QsnFrInputCenter,
206 SP_QsnFrListCornerTl, // List background
207 SP_QsnFrListCornerTr,
208 SP_QsnFrListCornerBl,
209 SP_QsnFrListCornerBr,
210 SP_QsnFrListSideT,
211 SP_QsnFrListSideB,
212 SP_QsnFrListSideL,
213 SP_QsnFrListSideR,
214 SP_QsnFrListCenter,
215 SP_QsnFrPopupCornerTl, // Option menu background
216 SP_QsnFrPopupCornerTr,
217 SP_QsnFrPopupCornerBl,
218 SP_QsnFrPopupCornerBr,
219 SP_QsnFrPopupSideT,
220 SP_QsnFrPopupSideB,
221 SP_QsnFrPopupSideL,
222 SP_QsnFrPopupSideR,
223 SP_QsnFrPopupCenter,
224 SP_QsnFrPopupPreviewCornerTl, // tool tip background
225 SP_QsnFrPopupPreviewCornerTr,
226 SP_QsnFrPopupPreviewCornerBl,
227 SP_QsnFrPopupPreviewCornerBr,
228 SP_QsnFrPopupPreviewSideT,
229 SP_QsnFrPopupPreviewSideB,
230 SP_QsnFrPopupPreviewSideL,
231 SP_QsnFrPopupPreviewSideR,
232 SP_QsnFrPopupPreviewCenter,
233 SP_QsnFrSetOptCornerTl, // Settings list
234 SP_QsnFrSetOptCornerTr,
235 SP_QsnFrSetOptCornerBl,
236 SP_QsnFrSetOptCornerBr,
237 SP_QsnFrSetOptSideT,
238 SP_QsnFrSetOptSideB,
239 SP_QsnFrSetOptSideL,
240 SP_QsnFrSetOptSideR,
241 SP_QsnFrSetOptCenter,
242 SP_QsnFrPopupSubCornerTl, // Toolbar background
243 SP_QsnFrPopupSubCornerTr,
244 SP_QsnFrPopupSubCornerBl,
245 SP_QsnFrPopupSubCornerBr,
246 SP_QsnFrPopupSubSideT,
247 SP_QsnFrPopupSubSideB,
248 SP_QsnFrPopupSubSideL,
249 SP_QsnFrPopupSubSideR,
250 SP_QsnFrPopupSubCenter,
251 SP_QsnFrSctrlButtonCornerTl, // Toolbar button
252 SP_QsnFrSctrlButtonCornerTr,
253 SP_QsnFrSctrlButtonCornerBl,
254 SP_QsnFrSctrlButtonCornerBr,
255 SP_QsnFrSctrlButtonSideT,
256 SP_QsnFrSctrlButtonSideB,
257 SP_QsnFrSctrlButtonSideL,
258 SP_QsnFrSctrlButtonSideR,
259 SP_QsnFrSctrlButtonCenter,
260 SP_QsnFrSctrlButtonCornerTlPressed, // Toolbar button, pressed
261 SP_QsnFrSctrlButtonCornerTrPressed,
262 SP_QsnFrSctrlButtonCornerBlPressed,
263 SP_QsnFrSctrlButtonCornerBrPressed,
264 SP_QsnFrSctrlButtonSideTPressed,
265 SP_QsnFrSctrlButtonSideBPressed,
266 SP_QsnFrSctrlButtonSideLPressed,
267 SP_QsnFrSctrlButtonSideRPressed,
268 SP_QsnFrSctrlButtonCenterPressed,
269 SP_QsnFrButtonCornerTlInactive, // Inactive button
270 SP_QsnFrButtonCornerTrInactive,
271 SP_QsnFrButtonCornerBlInactive,
272 SP_QsnFrButtonCornerBrInactive,
273 SP_QsnFrButtonSideTInactive,
274 SP_QsnFrButtonSideBInactive,
275 SP_QsnFrButtonSideLInactive,
276 SP_QsnFrButtonSideRInactive,
277 SP_QsnFrButtonCenterInactive,
278 };
279
280 enum ColorLists {
281 CL_QsnHighlightColors,
282 CL_QsnIconColors,
283 CL_QsnLineColors,
284 CL_QsnOtherColors,
285 CL_QsnParentColors,
286 CL_QsnTextColors
287 };
288};
289
290class QFocusFrame;
291
292// Private class
293#ifdef Q_OS_SYMBIAN
294NONSHARABLE_CLASS (QS60StylePrivate)
295#else
296class QS60StylePrivate
297#endif
298: public QCommonStylePrivate
299{
300 Q_DECLARE_PUBLIC(QS60Style)
301
302public:
303 QS60StylePrivate();
304 ~QS60StylePrivate();
305
306 enum SkinElements {
307 SE_ButtonNormal,
308 SE_ButtonPressed,
309 SE_FrameLineEdit,
310 SE_ProgressBarGrooveHorizontal,
311 SE_ProgressBarIndicatorHorizontal,
312 SE_ProgressBarGrooveVertical,
313 SE_ProgressBarIndicatorVertical,
314 SE_ScrollBarGrooveHorizontal,
315 SE_ScrollBarGrooveVertical,
316 SE_ScrollBarHandleHorizontal,
317 SE_ScrollBarHandleVertical,
318 SE_SliderHandleHorizontal,
319 SE_SliderHandleVertical,
320 SE_SliderHandleSelectedHorizontal,
321 SE_SliderHandleSelectedVertical,
322 SE_SliderGrooveVertical,
323 SE_SliderGrooveHorizontal,
324 SE_TabBarTabEastActive,
325 SE_TabBarTabEastInactive,
326 SE_TabBarTabNorthActive,
327 SE_TabBarTabNorthInactive,
328 SE_TabBarTabSouthActive,
329 SE_TabBarTabSouthInactive,
330 SE_TabBarTabWestActive,
331 SE_TabBarTabWestInactive,
332 SE_ListHighlight,
333 SE_OptionsMenu,
334 SE_SettingsList,
335 SE_TableItem,
336 SE_TableHeaderItem,
337 SE_ToolTip, //own graphic available on 3.2+ releases,
338 SE_ToolBar,
339 SE_ToolBarButton,
340 SE_ToolBarButtonPressed,
341 SE_PanelBackground,
342 SE_ScrollBarHandlePressedHorizontal, //only for 5.0+
343 SE_ScrollBarHandlePressedVertical,
344 SE_ButtonInactive,
345 SE_Editor,
346 };
347
348 enum SkinFrameElements {
349 SF_ButtonNormal,
350 SF_ButtonPressed,
351 SF_FrameLineEdit,
352 SF_ListHighlight,
353 SF_OptionsMenu,
354 SF_SettingsList,
355 SF_TableItem,
356 SF_TableHeaderItem,
357 SF_ToolTip,
358 SF_ToolBar,
359 SF_ToolBarButton,
360 SF_ToolBarButtonPressed,
361 SF_PanelBackground,
362 SF_ButtonInactive,
363 };
364
365 enum SkinElementFlag {
366 SF_PointNorth = 0x0001, // North = the default
367 SF_PointEast = 0x0002,
368 SF_PointSouth = 0x0004,
369 SF_PointWest = 0x0008,
370
371 SF_StateEnabled = 0x0010, // Enabled = the default
372 SF_StateDisabled = 0x0020,
373 SF_ColorSkinned = 0x0040, // pixmap is colored with foreground pen color
374 };
375
376 enum CacheClearReason {
377 CC_UndefinedChange = 0,
378 CC_LayoutChange,
379 CC_ThemeChange
380 };
381
382 Q_DECLARE_FLAGS(SkinElementFlags, SkinElementFlag)
383
384 // draws skin element
385 static void drawSkinElement(SkinElements element, QPainter *painter,
386 const QRect &rect, SkinElementFlags flags = KDefaultSkinElementFlags);
387 // draws a specific skin part
388 static void drawSkinPart(QS60StyleEnums::SkinParts part, QPainter *painter,
389 const QRect &rect, SkinElementFlags flags = KDefaultSkinElementFlags);
390 // gets pixel metrics value
391 static short pixelMetric(int metric);
392 // gets color. 'index' is NOT 0-based.
393 // It corresponds to the enum key 1-based numbers of TAknsQsnXYZColorsIndex, not the values.
394 static QColor s60Color(QS60StyleEnums::ColorLists list,
395 int index, const QStyleOption *option);
396 // gets state specific color
397 static QColor stateColor(const QColor &color, const QStyleOption *option);
398 // gets lighter color than base color
399 static QColor lighterColor(const QColor &baseColor);
400 //deduces if the given widget should have separately themeable background
401 static bool drawsOwnThemeBackground(const QWidget *widget);
402
403 QFont s60Font(QS60StyleEnums::FontCategories fontCategory,
404 int pointSize = -1) const;
405 // clears all style caches (fonts, colors, pixmaps)
406 void clearCaches(CacheClearReason reason = CC_UndefinedChange);
407
408 // themed main background oprations
409 void setBackgroundTexture(QApplication *application) const;
410 static void deleteBackground();
411
412 static bool isTouchSupported();
413 static bool isToolBarBackground();
414 static bool hasSliderGrooveGraphic();
415
416 // calculates average color based on button skin graphics (minus borders).
417 QColor colorFromFrameGraphics(SkinFrameElements frame) const;
418
419 //set theme palette for application
420 void setThemePalette(QApplication *application) const;
421 //access to theme palette
422 static QPalette* themePalette();
423
424 static const layoutHeader m_layoutHeaders[];
425 static const short data[][MAX_PIXELMETRICS];
426
427 void setCurrentLayout(int layoutIndex);
428 void setActiveLayout();
429 // Pointer
430 static short const *m_pmPointer;
431 // number of layouts supported by the style
432 static const int m_numberOfLayouts;
433
434 mutable QHash<QPair<QS60StyleEnums::FontCategories , int>, QFont> m_mappedFontsCache;
435 mutable QHash<SkinFrameElements, QColor> m_colorCache;
436
437 // Has one entry per SkinFrameElements
438 static const struct frameElementCenter {
439 SkinElements element;
440 QS60StyleEnums::SkinParts center;
441 } m_frameElementsData[];
442
443 static QPixmap frame(SkinFrameElements frame, const QSize &size,
444 SkinElementFlags flags = KDefaultSkinElementFlags);
445 static QPixmap backgroundTexture();
446
447#ifdef Q_WS_S60
448 void handleDynamicLayoutVariantSwitch();
449 void handleSkinChange();
450#endif // Q_WS_S60
451
452 static QSize naviPaneSize();
453
454 //Checks that the current brush is transparent or has BrushStyle NoBrush,
455 //so that theme graphic background can be drawn.
456 static bool canDrawThemeBackground(const QBrush &backgroundBrush);
457
458private:
459 static void drawPart(QS60StyleEnums::SkinParts part, QPainter *painter,
460 const QRect &rect, SkinElementFlags flags = KDefaultSkinElementFlags);
461 static void drawRow(QS60StyleEnums::SkinParts start, QS60StyleEnums::SkinParts middle,
462 QS60StyleEnums::SkinParts end, Qt::Orientation orientation, QPainter *painter,
463 const QRect &rect, SkinElementFlags flags = KDefaultSkinElementFlags);
464 static void drawFrame(SkinFrameElements frame, QPainter *painter,
465 const QRect &rect, SkinElementFlags flags = KDefaultSkinElementFlags);
466
467 static QPixmap cachedPart(QS60StyleEnums::SkinParts part, const QSize &size,
468 QPainter *painter, SkinElementFlags flags = KDefaultSkinElementFlags);
469 static QPixmap cachedFrame(SkinFrameElements frame, const QSize &size,
470 SkinElementFlags flags = KDefaultSkinElementFlags);
471
472 static void refreshUI();
473
474 // set S60 font for widget
475 void setFont(QWidget *widget) const;
476 void setThemePalette(QWidget *widget) const;
477 void setThemePalette(QPalette *palette) const;
478 void setThemePaletteHash(QPalette *palette) const;
479 static void storeThemePalette(QPalette *palette);
480 static void deleteThemePalette();
481
482 static QSize partSize(QS60StyleEnums::SkinParts part,
483 SkinElementFlags flags = KDefaultSkinElementFlags);
484 static QPixmap part(QS60StyleEnums::SkinParts part, const QSize &size,
485 QPainter *painter, SkinElementFlags flags = KDefaultSkinElementFlags);
486
487 static QFont s60Font_specific(QS60StyleEnums::FontCategories fontCategory, int pointSize);
488
489 static QSize screenSize();
490
491 // Contains background texture.
492 static QPixmap *m_background;
493 const static SkinElementFlags KDefaultSkinElementFlags;
494 // defined theme palette
495 static QPalette *m_themePalette;
496 QPalette m_originalPalette;
497
498 QPointer<QFocusFrame> m_focusFrame;
499};
500
501QT_END_NAMESPACE
502
503#endif // QS60STYLE_P_H
Note: See TracBrowser for help on using the repository browser.