Browse Source

Merge pull request #18075 from guilhermefelipecgs/fix_3086

Fix custom cursor when it's hidden
Rémi Verschelde 7 năm trước cách đây
mục cha
commit
62e5be8651

+ 5 - 0
platform/osx/os_osx.mm

@@ -1474,6 +1474,11 @@ void OS_OSX::set_cursor_shape(CursorShape p_shape) {
 	if (cursor_shape == p_shape)
 	if (cursor_shape == p_shape)
 		return;
 		return;
 
 
+	if (mouse_mode != MOUSE_MODE_VISIBLE) {
+		cursor_shape = p_shape;
+		return;
+	}
+
 	if (cursors[p_shape] != NULL) {
 	if (cursors[p_shape] != NULL) {
 		[cursors[p_shape] set];
 		[cursors[p_shape] set];
 	} else {
 	} else {

+ 9 - 1
platform/windows/os_windows.cpp

@@ -1299,7 +1299,9 @@ void OS_Windows::set_mouse_mode(MouseMode p_mode) {
 	if (p_mode == MOUSE_MODE_CAPTURED || p_mode == MOUSE_MODE_HIDDEN) {
 	if (p_mode == MOUSE_MODE_CAPTURED || p_mode == MOUSE_MODE_HIDDEN) {
 		hCursor = SetCursor(NULL);
 		hCursor = SetCursor(NULL);
 	} else {
 	} else {
-		SetCursor(hCursor);
+		CursorShape c = cursor_shape;
+		cursor_shape = CURSOR_MAX;
+		set_cursor_shape(c);
 	}
 	}
 }
 }
 
 
@@ -1863,6 +1865,11 @@ void OS_Windows::set_cursor_shape(CursorShape p_shape) {
 	if (cursor_shape == p_shape)
 	if (cursor_shape == p_shape)
 		return;
 		return;
 
 
+	if (mouse_mode != MOUSE_MODE_VISIBLE) {
+		cursor_shape = p_shape;
+		return;
+	}
+
 	static const LPCTSTR win_cursors[CURSOR_MAX] = {
 	static const LPCTSTR win_cursors[CURSOR_MAX] = {
 		IDC_ARROW,
 		IDC_ARROW,
 		IDC_IBEAM,
 		IDC_IBEAM,
@@ -1888,6 +1895,7 @@ void OS_Windows::set_cursor_shape(CursorShape p_shape) {
 	} else {
 	} else {
 		SetCursor(LoadCursor(hInstance, win_cursors[p_shape]));
 		SetCursor(LoadCursor(hInstance, win_cursors[p_shape]));
 	}
 	}
+
 	cursor_shape = p_shape;
 	cursor_shape = p_shape;
 }
 }
 
 

+ 1 - 1
platform/x11/os_x11.cpp

@@ -634,7 +634,7 @@ void OS_X11::set_mouse_mode(MouseMode p_mode) {
 	bool showCursor = (p_mode == MOUSE_MODE_VISIBLE || p_mode == MOUSE_MODE_CONFINED);
 	bool showCursor = (p_mode == MOUSE_MODE_VISIBLE || p_mode == MOUSE_MODE_CONFINED);
 
 
 	if (showCursor) {
 	if (showCursor) {
-		XUndefineCursor(x11_display, x11_window); // show cursor
+		XDefineCursor(x11_display, x11_window, cursors[current_cursor]); // show cursor
 	} else {
 	} else {
 		XDefineCursor(x11_display, x11_window, null_cursor); // hide cursor
 		XDefineCursor(x11_display, x11_window, null_cursor); // hide cursor
 	}
 	}