QRegion QRegion::fromHIShapeRef(HIShapeRef shape) { QRegion returnRegion; returnRegion.detach(); // Begin gratuitous #if-defery #if (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) # ifndef Q_WS_MAC64 if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_5) { # endif HIShapeEnumerate(shape, kHIShapeParseFromTopLeft, shape2QRegionHelper, &returnRegion); # ifndef Q_WS_MAC64 } else # endif #endif { #if !defined(Q_WS_MAC64) && !defined(QT_MAC_USE_COCOA) if (ptrHIShapeGetAsQDRgn == 0) { QLibrary library(QLatin1String("/System/Library/Frameworks/Carbon.framework/Carbon")); library.setLoadHints(QLibrary::ExportExternalSymbolsHint); ptrHIShapeGetAsQDRgn = reinterpret_cast<PtrHIShapeGetAsQDRgn>(library.resolve("HIShapeGetAsQDRgn")); } RgnHandle rgn = qt_mac_get_rgn(); ptrHIShapeGetAsQDRgn(shape, rgn); returnRegion = QRegion::fromQDRgn(rgn); qt_mac_dispose_rgn(rgn); #endif } return returnRegion; }
QRegion QRegion::fromQDRgn(RgnHandle rgn) { QRegion ret; ret.detach(); OSStatus oss = QDRegionToRects(rgn, kQDParseRegionFromTopLeft, qt_mac_get_rgn_rect, (void *)&ret); if(oss != noErr) return QRegion(); return ret; }