test/testwm2.c
author Ryan C. Gordon <icculus@icculus.org>
Thu, 08 Jun 2017 13:27:58 -0400
changeset 11081 eea7f98a37e4
parent 10737 3406a0f8b041
child 11811 5d94cb6b24d3
permissions -rw-r--r--
jack: Initial shot at a JACK audio target.

http://jackaudio.org/

Fixes Bugzilla #2163.
(with several more commits following to improve this code.)
     1 /*
     2   Copyright (C) 1997-2017 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     for (i = 1; i < argc;) {
   133         int consumed;
   134 
   135         consumed = SDLTest_CommonArg(state, i);
   136         if (consumed == 0) {
   137             consumed = -1;
   138         }
   139         if (consumed < 0) {
   140             SDL_Log("Usage: %s %s\n", argv[0], SDLTest_CommonUsage(state));
   141             quit(1);
   142         }
   143         i += consumed;
   144     }
   145     if (!SDLTest_CommonInit(state)) {
   146         quit(2);
   147     }
   148 
   149     for (i = 0; i < state->num_windows; ++i) {
   150         SDL_Renderer *renderer = state->renderers[i];
   151         SDL_SetRenderDrawColor(renderer, 0xA0, 0xA0, 0xA0, 0xFF);
   152         SDL_RenderClear(renderer);
   153     }
   154  
   155     /* Main render loop */
   156     done = 0;
   157 #ifdef __EMSCRIPTEN__
   158     emscripten_set_main_loop(loop, 0, 1);
   159 #else
   160     while (!done) {
   161         loop();
   162     }
   163 #endif
   164     SDL_FreeCursor(cursor);
   165 
   166     quit(0);
   167     /* keep the compiler happy ... */
   168     return(0);
   169 }
   170 
   171 /* vi: set ts=4 sw=4 expandtab: */