From c90486066914d7c63716c12f6e2f1c8086f0eb37 Mon Sep 17 00:00:00 2001 From: Gabriel de Dietrich Date: Tue, 30 Apr 2013 17:16:13 +0200 Subject: [PATCH] Cocoa: Port QCocoaTheme::fileIconPixmap() to Cocoa Task-number: QTBUG-30907 Change-Id: Ie460db63413ab9c8e0fb5fb85af907e1c7f12759 Reviewed-by: J-P Nurmi --- src/plugins/platforms/cocoa/qcocoatheme.mm | 29 ++++++++-------------- 1 file 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 #include @@ -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(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) + QCocoaAutoReleasePool pool; + + NSImage *iconImage = [[NSWorkspace sharedWorkspace] iconForFile:QCFString::toNSString(fileInfo.canonicalFilePath())]; + if (!iconImage) return QPixmap(); - QPixmap pixmap = qt_mac_convert_iconref(iconRef, size.width(), size.height()); - ReleaseIconRef(iconRef); - + 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; }