test/testwm2.c
author Sam Lantinga <slouken@libsdl.org>
Tue, 26 May 2015 06:27:46 -0700
changeset 9619 b94b6d0bff0f
parent 9607 7746ab058d12
child 9922 b066d5fd5fa7
permissions -rw-r--r--
Updated the copyright year to 2015
     1 /*
     2   Copyright (C) 1997-2015 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     SDL_Event event;
    54         /* Check for events */
    55         while (SDL_PollEvent(&event)) {
    56             SDLTest_CommonEvent(state, &event, &done);
    57 
    58             if (event.type == SDL_WINDOWEVENT) {
    59                 if (event.window.event == SDL_WINDOWEVENT_RESIZED) {
    60                     SDL_Window *window = SDL_GetWindowFromID(event.window.windowID);
    61                     if (window) {
    62                         SDL_Log("Window %d resized to %dx%d\n",
    63                             event.window.windowID,
    64                             event.window.data1,
    65                             event.window.data2);
    66                     }
    67                 }
    68                 if (event.window.event == SDL_WINDOWEVENT_MOVED) {
    69                     SDL_Window *window = SDL_GetWindowFromID(event.window.windowID);
    70                     if (window) {
    71                         SDL_Log("Window %d moved to %d,%d (display %s)\n",
    72                             event.window.windowID,
    73                             event.window.data1,
    74                             event.window.data2,
    75                             SDL_GetDisplayName(SDL_GetWindowDisplayIndex(window)));
    76                     }
    77                 }
    78             }
    79             if (event.type == SDL_KEYUP) {
    80                 SDL_bool updateCursor = SDL_FALSE;
    81 
    82                 if (event.key.keysym.sym == SDLK_LEFT) {
    83                     --system_cursor;
    84                     if (system_cursor < 0) {
    85                         system_cursor = SDL_NUM_SYSTEM_CURSORS - 1;
    86                     }
    87                     updateCursor = SDL_TRUE;
    88                 } else if (event.key.keysym.sym == SDLK_RIGHT) {
    89                     ++system_cursor;
    90                     if (system_cursor >= SDL_NUM_SYSTEM_CURSORS) {
    91                         system_cursor = 0;
    92                     }
    93                     updateCursor = SDL_TRUE;
    94                 }
    95                 if (updateCursor) {
    96                     SDL_Log("Changing cursor to \"%s\"", cursorNames[system_cursor]);
    97                     SDL_FreeCursor(cursor);
    98                     cursor = SDL_CreateSystemCursor((SDL_SystemCursor)system_cursor);
    99                     SDL_SetCursor(cursor);
   100                 }
   101             }
   102         }
   103 #ifdef __EMSCRIPTEN__
   104     if (done) {
   105         emscripten_cancel_main_loop();
   106     }
   107 #endif
   108 }
   109 
   110 int
   111 main(int argc, char *argv[])
   112 {
   113     int i;
   114 
   115 	/* Enable standard application logging */
   116     SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);
   117 
   118     SDL_assert(SDL_arraysize(cursorNames) == SDL_NUM_SYSTEM_CURSORS);
   119 
   120     /* Initialize test framework */
   121     state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO);
   122     if (!state) {
   123         return 1;
   124     }
   125     state->skip_renderer = SDL_TRUE;
   126     for (i = 1; i < argc;) {
   127         int consumed;
   128 
   129         consumed = SDLTest_CommonArg(state, i);
   130         if (consumed == 0) {
   131             consumed = -1;
   132         }
   133         if (consumed < 0) {
   134             SDL_Log("Usage: %s %s\n", argv[0], SDLTest_CommonUsage(state));
   135             quit(1);
   136         }
   137         i += consumed;
   138     }
   139     if (!SDLTest_CommonInit(state)) {
   140         quit(2);
   141     }
   142 
   143     /* Main render loop */
   144     done = 0;
   145 #ifdef __EMSCRIPTEN__
   146     emscripten_set_main_loop(loop, 0, 1);
   147 #else
   148     while (!done) {
   149         loop();
   150     }
   151 #endif
   152     SDL_FreeCursor(cursor);
   153 
   154     quit(0);
   155     /* keep the compiler happy ... */
   156     return(0);
   157 }
   158 
   159 /* vi: set ts=4 sw=4 expandtab: */