Split the redraw effect to own function

This commit is contained in:
expikr 2025-04-28 11:40:35 +08:00 committed by Sam Lantinga
parent 6c172e5220
commit 4779499048
2 changed files with 24 additions and 13 deletions

View File

@ -1599,6 +1599,26 @@ SDL_Cursor *SDL_CreateSystemCursor(SDL_SystemCursor id)
return cursor;
}
void SDL_RedrawCursor(void)
{
SDL_Mouse *mouse = SDL_GetMouse();
SDL_Cursor *cursor;
if (mouse->focus) {
cursor = mouse->cur_cursor;
} else {
cursor = mouse->def_cursor;
}
if (mouse->focus && (!mouse->cursor_visible || (mouse->relative_mode && mouse->relative_mode_hide_cursor))) {
cursor = NULL;
}
if (mouse->ShowCursor) {
mouse->ShowCursor(cursor);
}
}
/* SDL_SetCursor(NULL) can be used to force the cursor redraw,
if this is desired for any reason. This is used when setting
the video mode and when the SDL window gains the mouse focus.
@ -1629,19 +1649,7 @@ bool SDL_SetCursor(SDL_Cursor *cursor)
mouse->cur_cursor = cursor;
}
if (mouse->focus) {
cursor = mouse->cur_cursor;
} else {
cursor = mouse->def_cursor;
}
if (mouse->focus && (!mouse->cursor_visible || (mouse->relative_mode && mouse->relative_mode_hide_cursor))) {
cursor = NULL;
}
if (mouse->ShowCursor) {
mouse->ShowCursor(cursor);
}
SDL_RedrawCursor();
return true;
}

View File

@ -175,6 +175,9 @@ extern void SDL_SetMouseName(SDL_MouseID mouseID, const char *name);
// Get the mouse state structure
extern SDL_Mouse *SDL_GetMouse(void);
// Set the default mouse cursor
extern void SDL_RedrawCursor(void);
// Set the default mouse cursor
extern void SDL_SetDefaultCursor(SDL_Cursor *cursor);