summaryrefslogtreecommitdiff
path: root/src/plugins/coreplugin/fileiconprovider.cpp
diff options
context:
space:
mode:
authorJens Bache-Wiig <jbache@trolltech.com>2009-01-27 12:40:49 +0100
committerJens Bache-Wiig <jbache@trolltech.com>2009-01-27 12:42:19 +0100
commit629a4778a295534e1483a67bb58b7f7136475464 (patch)
treed704231b363c6fbb679b8ce38d568b46424adabe /src/plugins/coreplugin/fileiconprovider.cpp
parentccfbdf5b1b3037f9e8a817b5e6f713573b8a0a49 (diff)
downloadqt-creator-629a4778a295534e1483a67bb58b7f7136475464.tar.gz
Fixes: Improved file icons
Details: This patch makes use of system icons as a base and draws overlay on top. This should blend a bit better into the native icon theme.
Diffstat (limited to 'src/plugins/coreplugin/fileiconprovider.cpp')
-rw-r--r--src/plugins/coreplugin/fileiconprovider.cpp24
1 files changed, 19 insertions, 5 deletions
diff --git a/src/plugins/coreplugin/fileiconprovider.cpp b/src/plugins/coreplugin/fileiconprovider.cpp
index bf48ba3701..63947e8ed6 100644
--- a/src/plugins/coreplugin/fileiconprovider.cpp
+++ b/src/plugins/coreplugin/fileiconprovider.cpp
@@ -32,6 +32,9 @@
***************************************************************************/
#include "fileiconprovider.h"
+#include <QtGui/QApplication>
+#include <QtGui/QStyle>
+#include <QtGui/QPainter>
using namespace Core;
@@ -48,7 +51,7 @@ using namespace Core;
FileIconProvider *FileIconProvider::m_instance = 0;
FileIconProvider::FileIconProvider()
- : m_unknownFileIcon(QLatin1String(":/core/images/unknownfile.png"))
+ : m_unknownFileIcon(qApp->style()->standardIcon(QStyle::SP_FileIcon))
{
}
@@ -76,7 +79,7 @@ QIcon FileIconProvider::icon(const QFileInfo &fileInfo)
// same suffix (Mac OS X), but should speed up the retrieval a lot ...
icon = m_systemIconProvider.icon(fileInfo);
if (!suffix.isEmpty())
- registerIconForSuffix(icon, suffix);
+ registerIconOverlayForSuffix(icon, suffix);
#else
if (fileInfo.isDir()) {
icon = m_systemIconProvider.icon(fileInfo);
@@ -89,11 +92,22 @@ QIcon FileIconProvider::icon(const QFileInfo &fileInfo)
return icon;
}
+// Creates a pixmap with baseicon at size and overlayous overlayIcon over it.
+QPixmap FileIconProvider::overlayIcon(QStyle::StandardPixmap baseIcon, const QIcon &overlayIcon, const QSize &size) const
+{
+ QPixmap iconPixmap = qApp->style()->standardIcon(baseIcon).pixmap(size);
+ QPainter painter(&iconPixmap);
+ painter.drawPixmap(0, 0, overlayIcon.pixmap(size));
+ painter.end();
+ return iconPixmap;
+}
+
/*!
- Registers an icon for a given suffix, overriding any existing icon.
+ Registers an icon for a given suffix, overlaying the system file icon
*/
-void FileIconProvider::registerIconForSuffix(const QIcon &icon, const QString &suffix)
+void FileIconProvider::registerIconOverlayForSuffix(const QIcon &icon, const QString &suffix)
{
+ QPixmap fileIconPixmap = overlayIcon(QStyle::SP_FileIcon, icon, QSize(16, 16));
// delete old icon, if it exists
QList<QPair<QString,QIcon> >::iterator iter = m_cache.begin();
for (; iter != m_cache.end(); ++iter) {
@@ -103,7 +117,7 @@ void FileIconProvider::registerIconForSuffix(const QIcon &icon, const QString &s
}
}
- QPair<QString,QIcon> newEntry(suffix, icon);
+ QPair<QString,QIcon> newEntry(suffix, fileIconPixmap);
m_cache.append(newEntry);
}