/******************************************************************************** Copyright (C) 2009 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$** No Commercial Usage** This file contains pre-release code and may not be distributed.** You may use this file in accordance with the terms and conditions** contained in the Technology Preview License Agreement accompanying** this package.**** GNU Lesser General Public License Usage** Alternatively, 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.**** If you have questions regarding the use of this file, please contact** Nokia at qt-info@nokia.com.****************** $QT_END_LICENSE$******************************************************************************/#ifndef QICON_P_H#define QICON_P_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.//#include <QtCore/qglobal.h>#include <QtCore/qsize.h>#include <QtCore/qlist.h>#include <QtGui/qpixmap.h>#include <QtGui/qicon.h>#include <QtGui/qiconengine.h>#ifndef QT_NO_ICONQT_BEGIN_NAMESPACEclass QIconPrivate{public: QIconPrivate(); ~QIconPrivate() { if (engine_version == 1) { if (!v1RefCount->deref()) { delete engine; delete v1RefCount; } } else if (engine_version == 2) { delete engine; } } QIconEngine *engine; QAtomicInt ref; int serialNum; int detach_no; int engine_version; QAtomicInt *v1RefCount;};struct QPixmapIconEngineEntry{ QPixmapIconEngineEntry():mode(QIcon::Normal), state(QIcon::Off){} QPixmapIconEngineEntry(const QPixmap &pm, QIcon::Mode m = QIcon::Normal, QIcon::State s = QIcon::Off) :pixmap(pm), size(pm.size()), mode(m), state(s){} QPixmapIconEngineEntry(const QString &file, const QSize &sz = QSize(), QIcon::Mode m = QIcon::Normal, QIcon::State s = QIcon::Off) :fileName(file), size(sz), mode(m), state(s){} QPixmap pixmap; QString fileName; QSize size; QIcon::Mode mode; QIcon::State state; bool isNull() const {return (fileName.isEmpty() && pixmap.isNull()); }};class QPixmapIconEngine : public QIconEngineV2 {public: QPixmapIconEngine(); QPixmapIconEngine(const QPixmapIconEngine &); ~QPixmapIconEngine(); void paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state); QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state); QPixmapIconEngineEntry *bestMatch(const QSize &size, QIcon::Mode mode, QIcon::State state, bool sizeOnly); QSize actualSize(const QSize &size, QIcon::Mode mode, QIcon::State state); void addPixmap(const QPixmap &pixmap, QIcon::Mode mode, QIcon::State state); void addFile(const QString &fileName, const QSize &size, QIcon::Mode mode, QIcon::State state); // v2 functions QString key() const; QIconEngineV2 *clone() const; bool read(QDataStream &in); bool write(QDataStream &out) const; void virtual_hook(int id, void *data);private: QPixmapIconEngineEntry *tryMatch(const QSize &size, QIcon::Mode mode, QIcon::State state); QVector<QPixmapIconEngineEntry> pixmaps; friend QDataStream &operator<<(QDataStream &s, const QIcon &icon); friend class QIconThemeEngine;};QT_END_NAMESPACE#endif //QT_NO_ICON#endif // QICON_P_H