diff options
Diffstat (limited to 'src/plugins/platforms/cocoa/qcocoacursor.mm')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoacursor.mm | 48 |
1 files changed, 33 insertions, 15 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoacursor.mm b/src/plugins/platforms/cocoa/qcocoacursor.mm index 3c1b67830f..99759424f9 100644 --- a/src/plugins/platforms/cocoa/qcocoacursor.mm +++ b/src/plugins/platforms/cocoa/qcocoacursor.mm @@ -134,24 +134,42 @@ NSCursor *QCocoaCursor::convertCursor(QCursor *cursor) case Qt::DragLinkCursor: cocoaCursor = [NSCursor dragLinkCursor]; break; -#if !defined(QT_APPLE_NO_PRIVATE_APIS) case Qt::SizeVerCursor: - if ([NSCursor respondsToSelector:@selector(_windowResizeNorthSouthCursor)]) - cocoaCursor = [NSCursor _windowResizeNorthSouthCursor]; - break; case Qt::SizeHorCursor: - if ([NSCursor respondsToSelector:@selector(_windowResizeEastWestCursor)]) - cocoaCursor = [NSCursor _windowResizeEastWestCursor]; - break; case Qt::SizeBDiagCursor: - if ([NSCursor respondsToSelector:@selector(_windowResizeNorthEastSouthWestCursor)]) - cocoaCursor = [NSCursor _windowResizeNorthEastSouthWestCursor]; - break; - case Qt::SizeFDiagCursor: - if ([NSCursor respondsToSelector:@selector(_windowResizeNorthWestSouthEastCursor)]) - cocoaCursor = [NSCursor _windowResizeNorthWestSouthEastCursor]; - break; + case Qt::SizeFDiagCursor: { +#if QT_MACOS_PLATFORM_SDK_EQUAL_OR_ABOVE(150000) + if (@available(macOS 15, *)) { + auto position = [newShape]{ + switch (newShape) { + case Qt::SizeVerCursor: return NSCursorFrameResizePositionTop; + case Qt::SizeHorCursor: return NSCursorFrameResizePositionLeft; + case Qt::SizeBDiagCursor: return NSCursorFrameResizePositionTopRight; + case Qt::SizeFDiagCursor: return NSCursorFrameResizePositionTopLeft; + default: Q_UNREACHABLE(); + } + }(); + cocoaCursor = [NSCursor frameResizeCursorFromPosition:position + inDirections:NSCursorFrameResizeDirectionsAll]; + break; + } +#endif // macOS 15 SDK +#if !defined(QT_APPLE_NO_PRIVATE_APIS) + auto selector = [newShape]{ + switch (newShape) { + case Qt::SizeVerCursor: return @selector(_windowResizeNorthSouthCursor); + case Qt::SizeHorCursor: return @selector(_windowResizeEastWestCursor); + case Qt::SizeBDiagCursor: return @selector(_windowResizeNorthEastSouthWestCursor); + case Qt::SizeFDiagCursor: return @selector(_windowResizeNorthWestSouthEastCursor); + default: Q_UNREACHABLE(); + } + }(); + + if ([NSCursor respondsToSelector:selector]) + cocoaCursor = [NSCursor performSelector:selector]; #endif // QT_APPLE_NO_PRIVATE_APIS + break; + } default: break; } @@ -240,7 +258,7 @@ NSCursor *QCocoaCursor::createCursorData(QCursor *cursor) switch (cursor->shape()) { case Qt::BitmapCursor: { if (cursor->pixmap().isNull()) - return createCursorFromBitmap(cursor->bitmap(Qt::ReturnByValue), cursor->mask(Qt::ReturnByValue), hotspot); + return createCursorFromBitmap(cursor->bitmap(), cursor->mask(), hotspot); else return createCursorFromPixmap(cursor->pixmap(), hotspot); break; } |