Cocoa Helpers: Add qt_objc_cast() function

This generalizes what qnsview_cast() does to any Objective-C class.

Notice that this is a loose cast, using isKindOfClass: instead
of isMemberOfClass:.

Change-Id: I745f548e474f2f9eef89f370d7d45496f0c51434
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
bb10
Gabriel de Dietrich 2018-04-19 14:39:54 -07:00
parent 2b40af7177
commit f35f282c4f
2 changed files with 11 additions and 4 deletions

View File

@ -78,6 +78,16 @@ NSDragOperation qt_mac_mapDropActions(Qt::DropActions actions);
Qt::DropAction qt_mac_mapNSDragOperation(NSDragOperation nsActions);
Qt::DropActions qt_mac_mapNSDragOperations(NSDragOperation nsActions);
template <typename T>
typename std::enable_if<std::is_pointer<T>::value, T>::type
qt_objc_cast(id object)
{
if ([object isKindOfClass:[typename std::remove_pointer<T>::type class]])
return static_cast<T>(object);
return nil;
}
QT_MANGLE_NAMESPACE(QNSView) *qnsview_cast(NSView *view);
// Misc

View File

@ -160,10 +160,7 @@ Qt::DropActions qt_mac_mapNSDragOperations(NSDragOperation nsActions)
*/
QNSView *qnsview_cast(NSView *view)
{
if (![view isKindOfClass:[QNSView class]])
return nil;
return static_cast<QNSView *>(view);
return qt_objc_cast<QNSView *>(view);
}
//