macOS: Use native resize cursors for diagonal resize

The diagonal resize cursors provided by Qt does not
quite look like the ones used everywhere else on macOS,
especially for scaled desktops. After some googling this
seems to be how everyone else uses the native versions
since they are private API.

Pick-to: 5.15 6.2 6.3
Change-Id: I3461d07638f4e49cd3e25ab65ef5aa65730bb3a6
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
This commit is contained in:
Viktor Arvidsson 2022-01-31 20:49:38 +01:00
parent 724e4646e2
commit 31b8a7e5ed

View File

@ -47,6 +47,15 @@
#include <QtGui/QBitmap>
#if !defined(QT_APPLE_NO_PRIVATE_APIS)
@interface NSCursor()
+ (id)_windowResizeNorthWestSouthEastCursor;
+ (id)_windowResizeNorthEastSouthWestCursor;
+ (id)_windowResizeNorthSouthCursor;
+ (id)_windowResizeEastWestCursor;
@end
#endif // QT_APPLE_NO_PRIVATE_APIS
QT_BEGIN_NAMESPACE
QCocoaCursor::QCocoaCursor()
@ -118,7 +127,7 @@ NSCursor *QCocoaCursor::convertCursor(QCursor *cursor)
return nil;
const Qt::CursorShape newShape = cursor->shape();
NSCursor *cocoaCursor;
NSCursor *cocoaCursor = nil;
// Check for a suitable built-in NSCursor first:
switch (newShape) {
@ -159,7 +168,29 @@ NSCursor *QCocoaCursor::convertCursor(QCursor *cursor)
case Qt::DragLinkCursor:
cocoaCursor = [NSCursor dragLinkCursor];
break;
default : {
#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;
#endif // QT_APPLE_NO_PRIVATE_APIS
default:
break;
}
if (!cocoaCursor) {
// No suitable OS cursor exist, use cursors provided
// by Qt for the rest. Check for a cached cursor:
cocoaCursor = m_cursors.value(newShape);
@ -174,8 +205,6 @@ NSCursor *QCocoaCursor::convertCursor(QCursor *cursor)
m_cursors.insert(newShape, cocoaCursor);
}
break; }
}
return cocoaCursor;
}