diff options
author | Gabriel de Dietrich <gabriel.dedietrich@digia.com> | 2013-04-30 17:16:13 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-04-30 19:23:05 +0200 |
commit | c90486066914d7c63716c12f6e2f1c8086f0eb37 (patch) | |
tree | 4bf99c027005efafaa41013f8a30283b1e62e1d1 /src/plugins | |
parent | 08ac38a6e368b56d4dfdd872b62eafe13cd93157 (diff) |
Cocoa: Port QCocoaTheme::fileIconPixmap() to Cocoa
Task-number: QTBUG-30907
Change-Id: Ie460db63413ab9c8e0fb5fb85af907e1c7f12759
Reviewed-by: J-P Nurmi <jpnurmi@digia.com>
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoatheme.mm | 29 |
1 files changed, 10 insertions, 19 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoatheme.mm b/src/plugins/platforms/cocoa/qcocoatheme.mm index 8337e00eb6..36d7a49746 100644 --- a/src/plugins/platforms/cocoa/qcocoatheme.mm +++ b/src/plugins/platforms/cocoa/qcocoatheme.mm @@ -54,6 +54,7 @@ #include "qcocoamenu.h" #include "qcocoamenubar.h" #include "qcocoahelpers.h" +#include "qcocoaautoreleasepool.h" #include <QtCore/qfileinfo.h> #include <QtGui/private/qguiapplication_p.h> @@ -250,27 +251,17 @@ QPixmap QCocoaTheme::standardPixmap(StandardPixmap sp, const QSizeF &size) const QPixmap QCocoaTheme::fileIconPixmap(const QFileInfo &fileInfo, const QSizeF &size) const { - FSRef macRef; - OSStatus status = FSPathMakeRef(reinterpret_cast<const UInt8*>(fileInfo.canonicalFilePath().toUtf8().constData()), - &macRef, 0); - if (status != noErr) - return QPixmap(); - FSCatalogInfo info; - HFSUniStr255 macName; - status = FSGetCatalogInfo(&macRef, kIconServicesCatalogInfoMask, &info, &macName, 0, 0); - if (status != noErr) - return QPixmap(); - IconRef iconRef; - SInt16 iconLabel; - status = GetIconRefFromFileInfo(&macRef, macName.length, macName.unicode, - kIconServicesCatalogInfoMask, &info, kIconServicesNormalUsageFlag, - &iconRef, &iconLabel); - if (status != noErr) - return QPixmap(); + QCocoaAutoReleasePool pool; - QPixmap pixmap = qt_mac_convert_iconref(iconRef, size.width(), size.height()); - ReleaseIconRef(iconRef); + NSImage *iconImage = [[NSWorkspace sharedWorkspace] iconForFile:QCFString::toNSString(fileInfo.canonicalFilePath())]; + if (!iconImage) + return QPixmap(); + NSRect iconRect = NSMakeRect(0, 0, size.width(), size.height()); + CGImageRef cgImage = [iconImage CGImageForProposedRect:&iconRect + context:[NSGraphicsContext currentContext] + hints:nil]; + QPixmap pixmap = QPixmap::fromImage(qt_mac_toQImage(cgImage)); return pixmap; } |