source: trunk/src/gui/image/qiconengine.cpp@ 846

Last change on this file since 846 was 846, checked in by Dmitry A. Kuminov, 14 years ago

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

File size: 9.8 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2011 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#include "qiconengine.h"
43#include "qpainter.h"
44
45QT_BEGIN_NAMESPACE
46
47/*!
48 \class QIconEngine
49
50 \brief The QIconEngine class provides an abstract base class for QIcon renderers.
51
52 \ingroup painting
53
54 \bold {Use QIconEngineV2 instead.}
55
56 An icon engine provides the rendering functions for a QIcon. Each icon has a
57 corresponding icon engine that is responsible for drawing the icon with a
58 requested size, mode and state.
59
60 The icon is rendered by the paint() function, and the icon can additionally be
61 obtained as a pixmap with the pixmap() function (the default implementation
62 simply uses paint() to achieve this). The addPixmap() function can be used to
63 add new pixmaps to the icon engine, and is used by QIcon to add specialized
64 custom pixmaps.
65
66 The paint(), pixmap(), and addPixmap() functions are all virtual, and can
67 therefore be reimplemented in subclasses of QIconEngine.
68
69 \sa QIconEngineV2, QIconEnginePlugin
70
71*/
72
73/*!
74 \fn virtual void QIconEngine::paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state) = 0;
75
76 Uses the given \a painter to paint the icon with the required \a mode and
77 \a state into the rectangle \a rect.
78*/
79
80/*! Returns the actual size of the icon the engine provides for the
81 requested \a size, \a mode and \a state. The default implementation
82 returns the given \a size.
83 */
84QSize QIconEngine::actualSize(const QSize &size, QIcon::Mode /*mode*/, QIcon::State /*state*/)
85{
86 return size;
87}
88
89
90/*!
91 Destroys the icon engine.
92 */
93QIconEngine::~QIconEngine()
94{
95}
96
97
98/*!
99 Returns the icon as a pixmap with the required \a size, \a mode,
100 and \a state. The default implementation creates a new pixmap and
101 calls paint() to fill it.
102*/
103QPixmap QIconEngine::pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state)
104{
105 QPixmap pm(size);
106 {
107 QPainter p(&pm);
108 paint(&p, QRect(QPoint(0,0),size), mode, state);
109 }
110 return pm;
111}
112
113/*!
114 Called by QIcon::addPixmap(). Adds a specialized \a pixmap for the given
115 \a mode and \a state. The default pixmap-based engine stores any supplied
116 pixmaps, and it uses them instead of scaled pixmaps if the size of a pixmap
117 matches the size of icon requested. Custom icon engines that implement
118 scalable vector formats are free to ignores any extra pixmaps.
119 */
120void QIconEngine::addPixmap(const QPixmap &/*pixmap*/, QIcon::Mode /*mode*/, QIcon::State /*state*/)
121{
122}
123
124
125/*! Called by QIcon::addFile(). Adds a specialized pixmap from the
126 file with the given \a fileName, \a size, \a mode and \a state. The
127 default pixmap-based engine stores any supplied file names, and it
128 loads the pixmaps on demand instead of using scaled pixmaps if the
129 size of a pixmap matches the size of icon requested. Custom icon
130 engines that implement scalable vector formats are free to ignores
131 any extra files.
132 */
133void QIconEngine::addFile(const QString &/*fileName*/, const QSize &/*size*/, QIcon::Mode /*mode*/, QIcon::State /*state*/)
134{
135}
136
137
138
139// version 2 functions
140
141
142/*!
143 \class QIconEngineV2
144
145 \brief The QIconEngineV2 class provides an abstract base class for QIcon renderers.
146
147 \ingroup painting
148 \since 4.3
149
150 An icon engine renders \l{QIcon}s. With icon engines, you can
151 customize icons. Qt provides a default engine that makes icons
152 adhere to the current style by scaling the icons and providing a
153 disabled appearance.
154
155 An engine is installed on an icon either through a QIcon
156 constructor or through a QIconEnginePluginV2. The plugins are used
157 by Qt if a specific engine is not given when the icon is created.
158 See the QIconEngineV2 class description to learn how to create
159 icon engine plugins.
160
161 An icon engine provides the rendering functions for a QIcon. Each
162 icon has a corresponding icon engine that is responsible for drawing
163 the icon with a requested size, mode and state.
164
165 QIconEngineV2 extends the API of QIconEngine to allow streaming of
166 the icon engine contents, and should be used instead of QIconEngine
167 for implementing new icon engines.
168
169 \sa QIconEnginePluginV2
170
171*/
172
173/*!
174 \enum QIconEngineV2::IconEngineHook
175 \since 4.5
176
177 These enum values are used for virtual_hook() to allow additional
178 queries to icon engine without breaking binary compatibility.
179
180 \value AvailableSizesHook Allows to query the sizes of the
181 contained pixmaps for pixmap-based engines. The \a data argument
182 of the virtual_hook() function is a AvailableSizesArgument pointer
183 that should be filled with icon sizes. Engines that work in terms
184 of a scalable, vectorial format normally return an empty list.
185
186 \value IconNameHook Allows to query the name used to create the
187 icon, for example when instantiating an icon using
188 QIcon::fromTheme().
189
190 \sa virtual_hook()
191 */
192
193/*!
194 \class QIconEngineV2::AvailableSizesArgument
195 \since 4.5
196
197 This struct represents arguments to virtual_hook() function when
198 \a id parameter is QIconEngineV2::AvailableSizesHook.
199
200 \sa virtual_hook(), QIconEngineV2::IconEngineHook
201 */
202
203/*!
204 \variable QIconEngineV2::AvailableSizesArgument::mode
205 \brief the requested mode of an image.
206
207 \sa QIcon::Mode
208*/
209
210/*!
211 \variable QIconEngineV2::AvailableSizesArgument::state
212 \brief the requested state of an image.
213
214 \sa QIcon::State
215*/
216
217/*!
218 \variable QIconEngineV2::AvailableSizesArgument::sizes
219
220 \brief image sizes that are available with specified \a mode and
221 \a state. This is an output parameter and is filled after call to
222 virtual_hook(). Engines that work in terms of a scalable,
223 vectorial format normally return an empty list.
224*/
225
226
227/*!
228 Returns a key that identifies this icon engine.
229 */
230QString QIconEngineV2::key() const
231{
232 return QString();
233}
234
235/*!
236 Returns a clone of this icon engine.
237 */
238QIconEngineV2 *QIconEngineV2::clone() const
239{
240 return 0;
241}
242
243/*!
244 Reads icon engine contents from the QDataStream \a in. Returns
245 true if the contents were read; otherwise returns false.
246
247 QIconEngineV2's default implementation always return false.
248 */
249bool QIconEngineV2::read(QDataStream &)
250{
251 return false;
252}
253
254/*!
255 Writes the contents of this engine to the QDataStream \a out.
256 Returns true if the contents were written; otherwise returns false.
257
258 QIconEngineV2's default implementation always return false.
259 */
260bool QIconEngineV2::write(QDataStream &) const
261{
262 return false;
263}
264
265/*!
266 \since 4.5
267
268 Additional method to allow extending QIconEngineV2 without
269 adding new virtual methods (and without breaking binary compatibility).
270 The actual action and format of \a data depends on \a id argument
271 which is in fact a constant from IconEngineHook enum.
272
273 \sa IconEngineHook
274*/
275void QIconEngineV2::virtual_hook(int id, void *data)
276{
277 switch (id) {
278 case QIconEngineV2::AvailableSizesHook: {
279 QIconEngineV2::AvailableSizesArgument &arg =
280 *reinterpret_cast<QIconEngineV2::AvailableSizesArgument*>(data);
281 arg.sizes.clear();
282 break;
283 }
284 default:
285 break;
286 }
287}
288
289/*!
290 \since 4.5
291
292 Returns sizes of all images that are contained in the engine for the
293 specific \a mode and \a state.
294
295 \note This is a helper method and the actual work is done by
296 virtual_hook() method, hence this method depends on icon engine support
297 and may not work with all icon engines.
298 */
299QList<QSize> QIconEngineV2::availableSizes(QIcon::Mode mode, QIcon::State state)
300{
301 AvailableSizesArgument arg;
302 arg.mode = mode;
303 arg.state = state;
304 virtual_hook(QIconEngineV2::AvailableSizesHook, reinterpret_cast<void*>(&arg));
305 return arg.sizes;
306}
307
308/*!
309 \since 4.7
310
311 Returns the name used to create the engine, if available.
312
313 \note This is a helper method and the actual work is done by
314 virtual_hook() method, hence this method depends on icon engine support
315 and may not work with all icon engines.
316 */
317QString QIconEngineV2::iconName()
318{
319 QString name;
320 virtual_hook(QIconEngineV2::IconNameHook, reinterpret_cast<void*>(&name));
321 return name;
322}
323
324QT_END_NAMESPACE
Note: See TracBrowser for help on using the repository browser.