test/testwm2.c
author Sam Lantinga <slouken@libsdl.org>
Thu, 07 Dec 2017 16:08:09 -0800
changeset 11730 ac6c607e065c
parent 10737 3406a0f8b041
child 11811 5d94cb6b24d3
permissions -rw-r--r--
Enable building the Metal renderer by default, and weak link the Metal framework so the SDL library is safe to use on older Macs
Also generate iOS versions of the Metal shaders
     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: */