macOS: Adopt new NSCursor API for window frame resize cursors

Fixes: QTBUG-126240
Change-Id: I25799d5fa38cebae756a393e3d8f27e422567adb
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
(cherry picked from commit 4aeb27fbacfade7106b19c460deb5414143a5e53)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Tor Arne Vestbø 2024-06-11 17:20:14 +02:00 committed by Qt Cherry-pick Bot
parent f9d33433f3
commit 22518b26c9

View File

@ -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;
}