testwm2.c (4677B)
1 /* 2 Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org> 3 4 This software is provided 'as-is', without any express or implied 5 warranty. In no event will the authors be held liable for any damages 6 arising from the use of this software. 7 8 Permission is granted to anyone to use this software for any purpose, 9 including commercial applications, and to alter it and redistribute it 10 freely. 11 */ 12 13 #include <stdlib.h> 14 #include <stdio.h> 15 16 #ifdef __EMSCRIPTEN__ 17 #include <emscripten/emscripten.h> 18 #endif 19 20 #include "SDL_test_common.h" 21 22 static SDLTest_CommonState *state; 23 int done; 24 25 static const char *cursorNames[] = { 26 "arrow", 27 "ibeam", 28 "wait", 29 "crosshair", 30 "waitarrow", 31 "sizeNWSE", 32 "sizeNESW", 33 "sizeWE", 34 "sizeNS", 35 "sizeALL", 36 "NO", 37 "hand", 38 }; 39 int system_cursor = -1; 40 SDL_Cursor *cursor = NULL; 41 42 /* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ 43 static void 44 quit(int rc) 45 { 46 SDLTest_CommonQuit(state); 47 exit(rc); 48 } 49 50 void 51 loop() 52 { 53 int i; 54 SDL_Event event; 55 /* Check for events */ 56 while (SDL_PollEvent(&event)) { 57 SDLTest_CommonEvent(state, &event, &done); 58 59 if (event.type == SDL_WINDOWEVENT) { 60 if (event.window.event == SDL_WINDOWEVENT_RESIZED) { 61 SDL_Window *window = SDL_GetWindowFromID(event.window.windowID); 62 if (window) { 63 SDL_Log("Window %d resized to %dx%d\n", 64 event.window.windowID, 65 event.window.data1, 66 event.window.data2); 67 } 68 } 69 if (event.window.event == SDL_WINDOWEVENT_MOVED) { 70 SDL_Window *window = SDL_GetWindowFromID(event.window.windowID); 71 if (window) { 72 SDL_Log("Window %d moved to %d,%d (display %s)\n", 73 event.window.windowID, 74 event.window.data1, 75 event.window.data2, 76 SDL_GetDisplayName(SDL_GetWindowDisplayIndex(window))); 77 } 78 } 79 } 80 if (event.type == SDL_KEYUP) { 81 SDL_bool updateCursor = SDL_FALSE; 82 83 if (event.key.keysym.sym == SDLK_LEFT) { 84 --system_cursor; 85 if (system_cursor < 0) { 86 system_cursor = SDL_NUM_SYSTEM_CURSORS - 1; 87 } 88 updateCursor = SDL_TRUE; 89 } else if (event.key.keysym.sym == SDLK_RIGHT) { 90 ++system_cursor; 91 if (system_cursor >= SDL_NUM_SYSTEM_CURSORS) { 92 system_cursor = 0; 93 } 94 updateCursor = SDL_TRUE; 95 } 96 if (updateCursor) { 97 SDL_Log("Changing cursor to \"%s\"", cursorNames[system_cursor]); 98 SDL_FreeCursor(cursor); 99 cursor = SDL_CreateSystemCursor((SDL_SystemCursor)system_cursor); 100 SDL_SetCursor(cursor); 101 } 102 } 103 } 104 105 for (i = 0; i < state->num_windows; ++i) { 106 SDL_Renderer *renderer = state->renderers[i]; 107 SDL_RenderClear(renderer); 108 SDL_RenderPresent(renderer); 109 } 110 #ifdef __EMSCRIPTEN__ 111 if (done) { 112 emscripten_cancel_main_loop(); 113 } 114 #endif 115 } 116 117 int 118 main(int argc, char *argv[]) 119 { 120 int i; 121 122 /* Enable standard application logging */ 123 SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO); 124 125 SDL_assert(SDL_arraysize(cursorNames) == SDL_NUM_SYSTEM_CURSORS); 126 127 /* Initialize test framework */ 128 state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); 129 if (!state) { 130 return 1; 131 } 132 133 if (!SDLTest_CommonDefaultArgs(state, argc, argv) || !SDLTest_CommonInit(state)) { 134 SDLTest_CommonQuit(state); 135 return 1; 136 } 137 138 SDL_EventState(SDL_DROPFILE, SDL_ENABLE); 139 SDL_EventState(SDL_DROPTEXT, SDL_ENABLE); 140 141 for (i = 0; i < state->num_windows; ++i) { 142 SDL_Renderer *renderer = state->renderers[i]; 143 SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF); 144 SDL_RenderClear(renderer); 145 } 146 147 /* Main render loop */ 148 done = 0; 149 #ifdef __EMSCRIPTEN__ 150 emscripten_set_main_loop(loop, 0, 1); 151 #else 152 while (!done) { 153 loop(); 154 } 155 #endif 156 SDL_FreeCursor(cursor); 157 158 quit(0); 159 /* keep the compiler happy ... */ 160 return(0); 161 } 162 163 /* vi: set ts=4 sw=4 expandtab: */