sdl

FORK: Simple Directmedia Layer
git clone https://git.neptards.moe/neptards/sdl.git
Log | Files | Refs

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: */