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:
parent
724e4646e2
commit
31b8a7e5ed
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user