diff options
author | miniak <milan.burda@gmail.com> | 2009-09-22 08:33:30 (GMT) |
---|---|---|
committer | Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com> | 2009-09-22 08:33:30 (GMT) |
commit | e689e41ad1baad65d90866eefe88a96f5e16fa04 (patch) | |
tree | 1914948c3416a725ff243b2ee5b09a4d04d8321d /src | |
parent | ac7fca3606d1a7dd5985b6fc284c40c0f2682fe5 (diff) | |
download | Qt-e689e41ad1baad65d90866eefe88a96f5e16fa04.zip Qt-e689e41ad1baad65d90866eefe88a96f5e16fa04.tar.gz Qt-e689e41ad1baad65d90866eefe88a96f5e16fa04.tar.bz2 |
Cleanup convertHIconToPixmap() & loadIconFromShell32()
Replace convertHIconToPixmap() by QPixmap::fromWinHICON()
Move loadIconFromShell32() to qwindowsstyle.cpp
Merge-request: 1570
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/image/qpixmap_win.cpp | 50 | ||||
-rw-r--r-- | src/gui/image/qpixmapdata_p.h | 9 | ||||
-rw-r--r-- | src/gui/itemviews/qfileiconprovider.cpp | 9 | ||||
-rw-r--r-- | src/gui/styles/qwindowsstyle.cpp | 31 |
4 files changed, 44 insertions, 55 deletions
diff --git a/src/gui/image/qpixmap_win.cpp b/src/gui/image/qpixmap_win.cpp index 7f0c8e3..a9bcca2 100644 --- a/src/gui/image/qpixmap_win.cpp +++ b/src/gui/image/qpixmap_win.cpp @@ -274,11 +274,6 @@ HICON QPixmap::toWinHICON() const return hIcon; } -QPixmap QPixmap::fromWinHICON(HICON icon) -{ - return convertHIconToPixmap(icon); -} - #ifdef Q_WS_WIN #ifndef Q_WS_WINCE @@ -316,7 +311,7 @@ static QImage qt_fromWinHBITMAP(HDC hdc, HBITMAP bitmap, int w, int h) return image; } -QPixmap convertHIconToPixmap( const HICON icon) +QPixmap QPixmap::fromWinHICON(HICON icon) { bool foundAlpha = false; HDC screenDevice = GetDC(0); @@ -326,7 +321,7 @@ QPixmap convertHIconToPixmap( const HICON icon) ICONINFO iconinfo; bool result = GetIconInfo(icon, &iconinfo); //x and y Hotspot describes the icon center if (!result) - qWarning("convertHIconToPixmap(), failed to GetIconInfo()"); + qWarning("QPixmap::fromWinHICON(), failed to GetIconInfo()"); int w = iconinfo.xHotspot * 2; int h = iconinfo.yHotspot * 2; @@ -385,19 +380,25 @@ QPixmap convertHIconToPixmap( const HICON icon) return QPixmap::fromImage(image); } #else //ifndef Q_WS_WINCE -QPixmap convertHIconToPixmap( const HICON icon, bool large) +QPixmap QPixmap::fromWinHICON(HICON icon) { HDC screenDevice = GetDC(0); HDC hdc = CreateCompatibleDC(screenDevice); ReleaseDC(0, screenDevice); - int size = large ? 64 : 32; + ICONINFO iconinfo; + bool result = GetIconInfo(icon, &iconinfo); //x and y Hotspot describes the icon center + if (!result) + qWarning("QPixmap::fromWinHICON(), failed to GetIconInfo()"); + + int w = iconinfo.xHotspot * 2; + int h = iconinfo.yHotspot * 2; BITMAPINFO bmi; memset(&bmi, 0, sizeof(bmi)); bmi.bmiHeader.biSize = sizeof(BITMAPINFO); - bmi.bmiHeader.biWidth = size; - bmi.bmiHeader.biHeight = -size; + bmi.bmiHeader.biWidth = w; + bmi.bmiHeader.biHeight = -h; bmi.bmiHeader.biPlanes = 1; bmi.bmiHeader.biBitCount = 32; bmi.bmiHeader.biCompression = BI_RGB; @@ -409,13 +410,13 @@ QPixmap convertHIconToPixmap( const HICON icon, bool large) if (winBitmap ) memset(bits, 0xff, size*size*4); if (!winBitmap) { - qWarning("convertHIconToPixmap(), failed to CreateDIBSection()"); + qWarning("QPixmap::fromWinHICON(), failed to CreateDIBSection()"); return QPixmap(); } HGDIOBJ oldhdc = (HBITMAP)SelectObject(hdc, winBitmap); if (!DrawIconEx( hdc, 0, 0, icon, size, size, 0, 0, DI_NORMAL)) - qWarning("convertHIconToPixmap(), failed to DrawIcon()"); + qWarning("QPixmap::fromWinHICON(), failed to DrawIcon()"); uint mask = 0xff000000; // Create image and copy data into image. @@ -432,7 +433,7 @@ QPixmap convertHIconToPixmap( const HICON icon, bool large) } } if (!DrawIconEx( hdc, 0, 0, icon, size, size, 0, 0, DI_MASK)) - qWarning("convertHIconToPixmap(), failed to DrawIcon()"); + qWarning("QPixmap::fromWinHICON(), failed to DrawIcon()"); if (!image.isNull()) { // failed to alloc? int bytes_per_line = size * sizeof(QRgb); for (int y=0; y<size; ++y) { @@ -450,25 +451,6 @@ QPixmap convertHIconToPixmap( const HICON icon, bool large) return QPixmap::fromImage(image); } #endif //ifndef Q_WS_WINCE - -QPixmap loadIconFromShell32( int resourceId, int size ) -{ -#ifdef Q_OS_WINCE - HMODULE hmod = LoadLibrary(L"ceshell.dll"); -#else - HMODULE hmod = LoadLibrary(L"shell32.dll"); -#endif - if( hmod ) { - HICON iconHandle = (HICON)LoadImage(hmod, MAKEINTRESOURCE(resourceId), IMAGE_ICON, size, size, 0); - if( iconHandle ) { - QPixmap iconpixmap = convertHIconToPixmap( iconHandle ); - DestroyIcon(iconHandle); - return iconpixmap; - } - } - return QPixmap(); -} - -#endif +#endif //ifdef Q_WS_WIN QT_END_NAMESPACE diff --git a/src/gui/image/qpixmapdata_p.h b/src/gui/image/qpixmapdata_p.h index bac5065..5920a06 100644 --- a/src/gui/image/qpixmapdata_p.h +++ b/src/gui/image/qpixmapdata_p.h @@ -141,15 +141,6 @@ private: uint is_cached; }; -#ifdef Q_WS_WIN -#ifndef Q_WS_WINCE -QPixmap convertHIconToPixmap( const HICON icon); -#else -QPixmap convertHIconToPixmap( const HICON icon, bool large = false); -#endif -QPixmap loadIconFromShell32( int resourceId, int size ); -#endif - # define QT_XFORM_TYPE_MSBFIRST 0 # define QT_XFORM_TYPE_LSBFIRST 1 # if defined(Q_WS_WIN) diff --git a/src/gui/itemviews/qfileiconprovider.cpp b/src/gui/itemviews/qfileiconprovider.cpp index 76e1a7e..4abdef9 100644 --- a/src/gui/itemviews/qfileiconprovider.cpp +++ b/src/gui/itemviews/qfileiconprovider.cpp @@ -51,7 +51,6 @@ #include <qt_windows.h> #include <commctrl.h> #include <objbase.h> -#include <private/qpixmapdata_p.h> #elif defined(Q_WS_MAC) #include <private/qt_cocoa_helpers_mac_p.h> #endif @@ -262,9 +261,9 @@ QIcon QFileIconProviderPrivate::getWinIcon(const QFileInfo &fileInfo) const } if (pixmap.isNull()) { #ifndef Q_OS_WINCE - pixmap = convertHIconToPixmap(info.hIcon); + pixmap = QPixmap::fromWinHICON(info.hIcon); #else - pixmap = convertHIconToPixmap(ImageList_GetIcon((HIMAGELIST) val, info.iIcon, ILD_NORMAL)); + pixmap = QPixmap::fromWinHICON(ImageList_GetIcon((HIMAGELIST) val, info.iIcon, ILD_NORMAL)); #endif if (!pixmap.isNull()) { retIcon.addPixmap(pixmap); @@ -292,9 +291,9 @@ QIcon QFileIconProviderPrivate::getWinIcon(const QFileInfo &fileInfo) const key = QString::fromLatin1("qt_dir_%1").arg(info.iIcon); } #ifndef Q_OS_WINCE - pixmap = convertHIconToPixmap(info.hIcon); + pixmap = QPixmap::fromWinHICON(info.hIcon); #else - pixmap = convertHIconToPixmap(ImageList_GetIcon((HIMAGELIST) val, info.iIcon, ILD_NORMAL), true); + pixmap = QPixmap::fromWinHICON(ImageList_GetIcon((HIMAGELIST) val, info.iIcon, ILD_NORMAL)); #endif if (!pixmap.isNull()) { retIcon.addPixmap(pixmap); diff --git a/src/gui/styles/qwindowsstyle.cpp b/src/gui/styles/qwindowsstyle.cpp index 742b5b0..f5aadb8 100644 --- a/src/gui/styles/qwindowsstyle.cpp +++ b/src/gui/styles/qwindowsstyle.cpp @@ -41,7 +41,6 @@ #include "qwindowsstyle.h" #include "qwindowsstyle_p.h" -#include <private/qpixmapdata_p.h> #include <private/qstylehelper_p.h> #if !defined(QT_NO_STYLE_WINDOWS) || defined(QT_PLUGIN) @@ -927,6 +926,24 @@ static const char *const question_xpm[] = { #endif //QT_NO_IMAGEFORMAT_XPM +static QPixmap loadIconFromShell32( int resourceId, int size ) +{ +#ifdef Q_OS_WINCE + HMODULE hmod = LoadLibrary(L"ceshell.dll"); +#else + HMODULE hmod = LoadLibrary(L"shell32.dll"); +#endif + if( hmod ) { + HICON iconHandle = (HICON)LoadImage(hmod, MAKEINTRESOURCE(resourceId), IMAGE_ICON, size, size, 0); + if( iconHandle ) { + QPixmap iconpixmap = QPixmap::fromWinHICON( iconHandle ); + DestroyIcon(iconHandle); + return iconpixmap; + } + } + return QPixmap(); +} + /*! \reimp */ @@ -1016,28 +1033,28 @@ QPixmap QWindowsStyle::standardPixmap(StandardPixmap standardPixmap, const QStyl case SP_MessageBoxInformation: { HICON iconHandle = LoadIcon(NULL, IDI_INFORMATION); - desktopIcon = convertHIconToPixmap( iconHandle ); + desktopIcon = QPixmap::fromWinHICON( iconHandle ); DestroyIcon(iconHandle); break; } case SP_MessageBoxWarning: { HICON iconHandle = LoadIcon(NULL, IDI_WARNING); - desktopIcon = convertHIconToPixmap( iconHandle ); + desktopIcon = QPixmap::fromWinHICON( iconHandle ); DestroyIcon(iconHandle); break; } case SP_MessageBoxCritical: { HICON iconHandle = LoadIcon(NULL, IDI_ERROR); - desktopIcon = convertHIconToPixmap( iconHandle ); + desktopIcon = QPixmap::fromWinHICON( iconHandle ); DestroyIcon(iconHandle); break; } case SP_MessageBoxQuestion: { HICON iconHandle = LoadIcon(NULL, IDI_QUESTION); - desktopIcon = convertHIconToPixmap( iconHandle ); + desktopIcon = QPixmap::fromWinHICON( iconHandle ); DestroyIcon(iconHandle); break; } @@ -1052,7 +1069,7 @@ QPixmap QWindowsStyle::standardPixmap(StandardPixmap standardPixmap, const QStyl memset(&iconInfo, 0, sizeof(iconInfo)); iconInfo.cbSize = sizeof(iconInfo); if (pSHGetStockIconInfo(_SIID_SHIELD, _SHGFI_ICON | _SHGFI_SMALLICON, &iconInfo) == S_OK) { - pixmap = convertHIconToPixmap(iconInfo.hIcon); + pixmap = QPixmap::fromWinHICON(iconInfo.hIcon); DestroyIcon(iconInfo.hIcon); return pixmap; } @@ -3346,7 +3363,7 @@ QIcon QWindowsStyle::standardIconImplementation(StandardPixmap standardIcon, con memset(&iconInfo, 0, sizeof(iconInfo)); iconInfo.cbSize = sizeof(iconInfo); if (pSHGetStockIconInfo(_SIID_SHIELD, _SHGFI_ICON | _SHGFI_LARGEICON, &iconInfo) == S_OK) { - icon.addPixmap(convertHIconToPixmap(iconInfo.hIcon)); + icon.addPixmap(QPixmap::fromWinHICON(iconInfo.hIcon)); DestroyIcon(iconInfo.hIcon); } } |