From 745f9905c1356333ef9d3295296c8a919a74358b Mon Sep 17 00:00:00 2001 From: Anonymous Maarten Date: Mon, 13 Apr 2026 23:52:34 +0200 Subject: [PATCH] test: render name of current active cursor --- test/testcustomcursor.c | 159 ++++++++++++++++++++-------------------- 1 file changed, 80 insertions(+), 79 deletions(-) diff --git a/test/testcustomcursor.c b/test/testcustomcursor.c index dabe57a8d1..bf4e136e1d 100644 --- a/test/testcustomcursor.c +++ b/test/testcustomcursor.c @@ -19,6 +19,15 @@ #include +enum +{ + CUSTOM_CURSOR_ARGUMENTS = -1, + CUSTOM_CURSOR_ARROW = -2, + CUSTOM_CURSOR_CROSS = -3, + CUSTOM_ANIMATED_CURSOR = -4, + CUSTOM_ANIMATED_CURSOR_ONE_SHOT = -5, +}; + /* Stolen from the mailing list */ /* Creates a new mouse cursor from an XPM */ @@ -318,6 +327,7 @@ static SDL_Cursor *cursors[5 + SDL_SYSTEM_CURSOR_COUNT]; static SDL_SystemCursor cursor_types[5 + SDL_SYSTEM_CURSOR_COUNT]; static int num_cursors; static int current_cursor; +static bool current_cursor_valid; static bool show_cursor; /* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ @@ -331,6 +341,67 @@ quit(int rc) } } +static const char *get_active_cursor_name() +{ + // if (!current_cursor_valid) { + // return ""; + // } + switch ((int)cursor_types[current_cursor]) { + case CUSTOM_CURSOR_ARGUMENTS: + return "Custom cursor (arguments)"; + case CUSTOM_CURSOR_ARROW: + return "Custom cursor (arrow)"; + case CUSTOM_CURSOR_CROSS: + return "Custom cursor (cross)"; + case CUSTOM_ANIMATED_CURSOR_ONE_SHOT: + return "Animated custom cursor (one-shot)"; + case CUSTOM_ANIMATED_CURSOR: + return "Animated custom cursor"; + case SDL_SYSTEM_CURSOR_DEFAULT: + return "Default"; + case SDL_SYSTEM_CURSOR_TEXT: + return "Text"; + case SDL_SYSTEM_CURSOR_WAIT: + return "Wait"; + case SDL_SYSTEM_CURSOR_CROSSHAIR: + return "Crosshair"; + case SDL_SYSTEM_CURSOR_PROGRESS: + return "Progress: Small wait cursor (or Wait if not available)"; + case SDL_SYSTEM_CURSOR_NWSE_RESIZE: + return "Double arrow pointing northwest and southeast"; + case SDL_SYSTEM_CURSOR_NESW_RESIZE: + return "Double arrow pointing northeast and southwest"; + case SDL_SYSTEM_CURSOR_EW_RESIZE: + return "Double arrow pointing west and east"; + case SDL_SYSTEM_CURSOR_NS_RESIZE: + return "Double arrow pointing north and south"; + case SDL_SYSTEM_CURSOR_MOVE: + return "Move: Four pointed arrow pointing north, south, east, and west"; + case SDL_SYSTEM_CURSOR_NOT_ALLOWED: + return "Not Allowed: Slashed circle or crossbones"; + case SDL_SYSTEM_CURSOR_POINTER: + return "Pointer: Hand"; + case SDL_SYSTEM_CURSOR_NW_RESIZE: + return "Window resize top-left"; + case SDL_SYSTEM_CURSOR_N_RESIZE: + return "Window resize top"; + case SDL_SYSTEM_CURSOR_NE_RESIZE: + return "Window resize top-right"; + case SDL_SYSTEM_CURSOR_E_RESIZE: + return "Window resize right"; + case SDL_SYSTEM_CURSOR_SE_RESIZE: + return "Window resize bottom-right"; + case SDL_SYSTEM_CURSOR_S_RESIZE: + return "Window resize bottom"; + case SDL_SYSTEM_CURSOR_SW_RESIZE: + return "Window resize bottom-left"; + case SDL_SYSTEM_CURSOR_W_RESIZE: + return "Window resize left"; + default: + return "UNKNOWN CURSOR TYPE, FIX THIS PROGRAM."; + } +} + static void loop(void) { int i; @@ -344,6 +415,7 @@ static void loop(void) continue; } + current_cursor_valid = true; ++current_cursor; if (current_cursor == num_cursors) { current_cursor = 0; @@ -351,80 +423,7 @@ static void loop(void) SDL_SetCursor(cursors[current_cursor]); - switch ((int)cursor_types[current_cursor]) { - case (SDL_SystemCursor)-3: - SDL_Log("Animated custom cursor (one-shot)"); - break; - case (SDL_SystemCursor)-2: - SDL_Log("Animated custom cursor"); - break; - case (SDL_SystemCursor)-1: - SDL_Log("Custom cursor"); - break; - case SDL_SYSTEM_CURSOR_DEFAULT: - SDL_Log("Default"); - break; - case SDL_SYSTEM_CURSOR_TEXT: - SDL_Log("Text"); - break; - case SDL_SYSTEM_CURSOR_WAIT: - SDL_Log("Wait"); - break; - case SDL_SYSTEM_CURSOR_CROSSHAIR: - SDL_Log("Crosshair"); - break; - case SDL_SYSTEM_CURSOR_PROGRESS: - SDL_Log("Progress: Small wait cursor (or Wait if not available)"); - break; - case SDL_SYSTEM_CURSOR_NWSE_RESIZE: - SDL_Log("Double arrow pointing northwest and southeast"); - break; - case SDL_SYSTEM_CURSOR_NESW_RESIZE: - SDL_Log("Double arrow pointing northeast and southwest"); - break; - case SDL_SYSTEM_CURSOR_EW_RESIZE: - SDL_Log("Double arrow pointing west and east"); - break; - case SDL_SYSTEM_CURSOR_NS_RESIZE: - SDL_Log("Double arrow pointing north and south"); - break; - case SDL_SYSTEM_CURSOR_MOVE: - SDL_Log("Move: Four pointed arrow pointing north, south, east, and west"); - break; - case SDL_SYSTEM_CURSOR_NOT_ALLOWED: - SDL_Log("Not Allowed: Slashed circle or crossbones"); - break; - case SDL_SYSTEM_CURSOR_POINTER: - SDL_Log("Pointer: Hand"); - break; - case SDL_SYSTEM_CURSOR_NW_RESIZE: - SDL_Log("Window resize top-left"); - break; - case SDL_SYSTEM_CURSOR_N_RESIZE: - SDL_Log("Window resize top"); - break; - case SDL_SYSTEM_CURSOR_NE_RESIZE: - SDL_Log("Window resize top-right"); - break; - case SDL_SYSTEM_CURSOR_E_RESIZE: - SDL_Log("Window resize right"); - break; - case SDL_SYSTEM_CURSOR_SE_RESIZE: - SDL_Log("Window resize bottom-right"); - break; - case SDL_SYSTEM_CURSOR_S_RESIZE: - SDL_Log("Window resize bottom"); - break; - case SDL_SYSTEM_CURSOR_SW_RESIZE: - SDL_Log("Window resize bottom-left"); - break; - case SDL_SYSTEM_CURSOR_W_RESIZE: - SDL_Log("Window resize left"); - break; - default: - SDL_Log("UNKNOWN CURSOR TYPE, FIX THIS PROGRAM."); - break; - } + SDL_Log("%s", get_active_cursor_name()); } else { show_cursor = !show_cursor; @@ -463,6 +462,8 @@ static void loop(void) black = !black; } } + SDL_SetRenderDrawColor(renderer, 0xff, 0x00, 0x00, 0xFF); + SDL_RenderDebugText(renderer, 0.0f, 0.0f, get_active_cursor_name()); SDL_RenderPresent(renderer); } #ifdef SDL_PLATFORM_EMSCRIPTEN @@ -526,7 +527,7 @@ int main(int argc, char *argv[]) cursor = init_color_cursor(frames, num_frames); if (cursor) { cursors[num_cursors] = cursor; - cursor_types[num_cursors] = (SDL_SystemCursor)-1; + cursor_types[num_cursors] = (SDL_SystemCursor)CUSTOM_CURSOR_ARGUMENTS; num_cursors++; } } @@ -534,28 +535,28 @@ int main(int argc, char *argv[]) cursor = init_system_cursor(arrow); if (cursor) { cursors[num_cursors] = cursor; - cursor_types[num_cursors] = (SDL_SystemCursor)-1; + cursor_types[num_cursors] = (SDL_SystemCursor)CUSTOM_CURSOR_ARROW; num_cursors++; } cursor = init_system_cursor(cross); if (cursor) { cursors[num_cursors] = cursor; - cursor_types[num_cursors] = (SDL_SystemCursor)-1; + cursor_types[num_cursors] = (SDL_SystemCursor)CUSTOM_CURSOR_CROSS; num_cursors++; } cursor = init_animated_cursor(arrow, false); if (cursor) { cursors[num_cursors] = cursor; - cursor_types[num_cursors] = (SDL_SystemCursor)-2; + cursor_types[num_cursors] = (SDL_SystemCursor)CUSTOM_ANIMATED_CURSOR; num_cursors++; } cursor = init_animated_cursor(arrow, true); if (cursor) { cursors[num_cursors] = cursor; - cursor_types[num_cursors] = (SDL_SystemCursor)-3; + cursor_types[num_cursors] = (SDL_SystemCursor)CUSTOM_ANIMATED_CURSOR_ONE_SHOT; num_cursors++; }