KDEUI
kiconengine.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "kiconengine_p.h"
00020
00021 #include <QPainter>
00022 #include <QMenu>
00023 #include <QToolBar>
00024 #include <QApplication>
00025
00026 #include <kiconloader.h>
00027
00028 class KIconEngine::Private
00029 {
00030 public:
00031 QString iconName;
00032 QStringList overlays;
00033 KIconLoader* iconLoader;
00034 };
00035
00036 KIconEngine::KIconEngine(const QString& iconName, KIconLoader* iconLoader, const QStringList &overlays)
00037 : d(new Private)
00038 {
00039 d->iconName = iconName;
00040 d->iconLoader = iconLoader;
00041 d->overlays = overlays;
00042 }
00043
00044 KIconEngine::KIconEngine(const QString& iconName, KIconLoader* iconLoader)
00045 : d(new Private)
00046 {
00047 d->iconName = iconName;
00048 d->iconLoader = iconLoader;
00049 }
00050
00051 KIconEngine::~KIconEngine()
00052 {
00053 delete d;
00054 }
00055
00056 static int qIconModeToKIconState( QIcon::Mode mode )
00057 {
00058 int kstate;
00059 switch (mode) {
00060 default:
00061 case QIcon::Normal:
00062 kstate = KIconLoader::DefaultState;
00063 break;
00064 case QIcon::Active:
00065 kstate = KIconLoader::ActiveState;
00066 break;
00067 case QIcon::Disabled:
00068 kstate = KIconLoader::DisabledState;
00069 break;
00070 }
00071 return kstate;
00072 }
00073
00074 QSize KIconEngine::actualSize( const QSize & size, QIcon::Mode mode, QIcon::State state )
00075 {
00076 Q_UNUSED(state)
00077 const int kstate = qIconModeToKIconState(mode);
00078 const QPixmap pix = iconLoader()->loadIcon(d->iconName, KIconLoader::Desktop,
00079 qMin(size.width(), size.height()),
00080 kstate, d->overlays);
00081 return pix.size();
00082 }
00083
00084 void KIconEngine::paint( QPainter * painter, const QRect & rect, QIcon::Mode mode, QIcon::State state )
00085 {
00086 Q_UNUSED(state)
00087
00088 const int kstate = qIconModeToKIconState(mode);
00089 KIconLoader::Group group = KIconLoader::Desktop;
00090
00091 if (QWidget* targetWidget = dynamic_cast<QWidget*>(painter->device())) {
00092 if (qobject_cast<QMenu*>(targetWidget))
00093 group = KIconLoader::Small;
00094 else if (qobject_cast<QToolBar*>(targetWidget->parent()))
00095 group = KIconLoader::Toolbar;
00096 }
00097
00098 const int iconSize = qMin(rect.width(), rect.height());
00099 const QPixmap pix = iconLoader()->loadIcon(d->iconName, group, iconSize, kstate, d->overlays);
00100 painter->drawPixmap(rect, pix);
00101 }
00102
00103 const QString & KIconEngine::iconName( ) const
00104 {
00105 return d->iconName;
00106 }
00107
00108 KIconLoader * KIconEngine::iconLoader( ) const
00109 {
00110 return d->iconLoader;
00111 }
00112
00113 QPixmap KIconEngine::pixmap( const QSize & size, QIcon::Mode mode, QIcon::State state )
00114 {
00115 Q_UNUSED(state)
00116
00117 const int kstate = qIconModeToKIconState(mode);
00118 const int iconSize = qMin(size.width(), size.height());
00119 QPixmap pix = iconLoader()->loadIcon(d->iconName, KIconLoader::Desktop, iconSize, kstate, d->overlays);
00120
00121 if(pix.size() == size)
00122 return pix;
00123
00124 QPixmap pix2(size);
00125 pix2.fill(QColor(0,0,0,0));
00126
00127 QPainter painter(&pix2);
00128 painter.drawPixmap(QPoint(), pix);
00129
00130 return pix2;
00131 }
00132
00133 QString KIconEngine::key() const
00134 {
00135 return QLatin1String("KIconEngine");
00136 }
00137
00138 QIconEngineV2 *KIconEngine::clone() const
00139 {
00140 return new KIconEngine(d->iconName, d->iconLoader, d->overlays);
00141 }
00142
00143 bool KIconEngine::read(QDataStream &in)
00144 {
00145 in >> d->iconName >> d->overlays;
00146 return true;
00147 }
00148
00149 bool KIconEngine::write(QDataStream &out) const
00150 {
00151 out << d->iconName << d->overlays;
00152 return true;
00153 }
00154