Adds extra cursors for macOS

Before, plain arrow cursor or unsuitable ones were used.
This commit is contained in:
Haoyu Qiu 2020-01-31 12:40:13 +08:00
parent 3c3ed67c39
commit 8f881847c0
1 changed files with 20 additions and 6 deletions

View File

@ -115,6 +115,20 @@ static Vector2 get_mouse_pos(NSPoint locationInWindow, CGFloat backingScaleFacto
return Vector2(mouse_x, mouse_y); return Vector2(mouse_x, mouse_y);
} }
static NSCursor *cursorFromSelector(SEL selector, SEL fallback = nil) {
if ([NSCursor respondsToSelector:selector]) {
id object = [NSCursor performSelector:selector];
if ([object isKindOfClass:[NSCursor class]]) {
return object;
}
}
if (fallback) {
// Fallback should be a reasonable default, no need to check.
return [NSCursor performSelector:fallback];
}
return [NSCursor arrowCursor];
}
@interface GodotApplication : NSApplication @interface GodotApplication : NSApplication
@end @end
@ -1813,15 +1827,15 @@ void OS_OSX::set_cursor_shape(CursorShape p_shape) {
case CURSOR_BUSY: [[NSCursor arrowCursor] set]; break; case CURSOR_BUSY: [[NSCursor arrowCursor] set]; break;
case CURSOR_DRAG: [[NSCursor closedHandCursor] set]; break; case CURSOR_DRAG: [[NSCursor closedHandCursor] set]; break;
case CURSOR_CAN_DROP: [[NSCursor openHandCursor] set]; break; case CURSOR_CAN_DROP: [[NSCursor openHandCursor] set]; break;
case CURSOR_FORBIDDEN: [[NSCursor arrowCursor] set]; break; case CURSOR_FORBIDDEN: [[NSCursor operationNotAllowedCursor] set]; break;
case CURSOR_VSIZE: [[NSCursor resizeUpDownCursor] set]; break; case CURSOR_VSIZE: [cursorFromSelector(@selector(_windowResizeNorthSouthCursor), @selector(resizeUpDownCursor)) set]; break;
case CURSOR_HSIZE: [[NSCursor resizeLeftRightCursor] set]; break; case CURSOR_HSIZE: [cursorFromSelector(@selector(_windowResizeEastWestCursor), @selector(resizeLeftRightCursor)) set]; break;
case CURSOR_BDIAGSIZE: [[NSCursor arrowCursor] set]; break; case CURSOR_BDIAGSIZE: [cursorFromSelector(@selector(_windowResizeNorthEastSouthWestCursor)) set]; break;
case CURSOR_FDIAGSIZE: [[NSCursor arrowCursor] set]; break; case CURSOR_FDIAGSIZE: [cursorFromSelector(@selector(_windowResizeNorthWestSouthEastCursor)) set]; break;
case CURSOR_MOVE: [[NSCursor arrowCursor] set]; break; case CURSOR_MOVE: [[NSCursor arrowCursor] set]; break;
case CURSOR_VSPLIT: [[NSCursor resizeUpDownCursor] set]; break; case CURSOR_VSPLIT: [[NSCursor resizeUpDownCursor] set]; break;
case CURSOR_HSPLIT: [[NSCursor resizeLeftRightCursor] set]; break; case CURSOR_HSPLIT: [[NSCursor resizeLeftRightCursor] set]; break;
case CURSOR_HELP: [[NSCursor arrowCursor] set]; break; case CURSOR_HELP: [cursorFromSelector(@selector(_helpCursor)) set]; break;
default: { default: {
}; };
} }