cscg22-gearboy

CSCG 2022 Challenge 'Gearboy'
git clone https://git.sinitax.com/sinitax/cscg22-gearboy
Log | Files | Refs | sfeed.txt

testwm2.c (4188B)


      1/*
      2  Copyright (C) 1997-2014 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#include "SDL_test_common.h"
     17
     18static SDLTest_CommonState *state;
     19
     20/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
     21static void
     22quit(int rc)
     23{
     24    SDLTest_CommonQuit(state);
     25    exit(rc);
     26}
     27
     28int
     29main(int argc, char *argv[])
     30{
     31    static const char *cursorNames[] = {
     32        "arrow",
     33        "ibeam",
     34        "wait",
     35        "crosshair",
     36        "waitarrow",
     37        "sizeNWSE",
     38        "sizeNESW",
     39        "sizeWE",
     40        "sizeNS",
     41        "sizeALL",
     42        "NO",
     43        "hand",
     44    };
     45
     46    int i, done;
     47    SDL_Event event;
     48    int system_cursor = -1;
     49    SDL_Cursor *cursor = NULL;
     50
     51	/* Enable standard application logging */
     52    SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);
     53
     54    SDL_assert(SDL_arraysize(cursorNames) == SDL_NUM_SYSTEM_CURSORS);
     55
     56    /* Initialize test framework */
     57    state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO);
     58    if (!state) {
     59        return 1;
     60    }
     61    state->skip_renderer = SDL_TRUE;
     62    for (i = 1; i < argc;) {
     63        int consumed;
     64
     65        consumed = SDLTest_CommonArg(state, i);
     66        if (consumed == 0) {
     67            consumed = -1;
     68        }
     69        if (consumed < 0) {
     70            SDL_Log("Usage: %s %s\n", argv[0], SDLTest_CommonUsage(state));
     71            quit(1);
     72        }
     73        i += consumed;
     74    }
     75    if (!SDLTest_CommonInit(state)) {
     76        quit(2);
     77    }
     78
     79    /* Main render loop */
     80    done = 0;
     81    while (!done) {
     82        /* Check for events */
     83        while (SDL_PollEvent(&event)) {
     84            SDLTest_CommonEvent(state, &event, &done);
     85
     86            if (event.type == SDL_WINDOWEVENT) {
     87                if (event.window.event == SDL_WINDOWEVENT_RESIZED) {
     88                    SDL_Window *window = SDL_GetWindowFromID(event.window.windowID);
     89                    if (window) {
     90                        SDL_Log("Window %d resized to %dx%d\n",
     91                            event.window.windowID,
     92                            event.window.data1,
     93                            event.window.data2);
     94                    }
     95                }
     96                if (event.window.event == SDL_WINDOWEVENT_MOVED) {
     97                    SDL_Window *window = SDL_GetWindowFromID(event.window.windowID);
     98                    if (window) {
     99                        SDL_Log("Window %d moved to %d,%d (display %s)\n",
    100                            event.window.windowID,
    101                            event.window.data1,
    102                            event.window.data2,
    103                            SDL_GetDisplayName(SDL_GetWindowDisplayIndex(window)));
    104                    }
    105                }
    106            }
    107            if (event.type == SDL_KEYUP) {
    108                SDL_bool updateCursor = SDL_FALSE;
    109
    110                if (event.key.keysym.sym == SDLK_LEFT) {
    111                    --system_cursor;
    112                    if (system_cursor < 0) {
    113                        system_cursor = SDL_NUM_SYSTEM_CURSORS - 1;
    114                    }
    115                    updateCursor = SDL_TRUE;
    116                } else if (event.key.keysym.sym == SDLK_RIGHT) {
    117                    ++system_cursor;
    118                    if (system_cursor >= SDL_NUM_SYSTEM_CURSORS) {
    119                        system_cursor = 0;
    120                    }
    121                    updateCursor = SDL_TRUE;
    122                }
    123                if (updateCursor) {
    124                    SDL_Log("Changing cursor to \"%s\"", cursorNames[system_cursor]);
    125                    SDL_FreeCursor(cursor);
    126                    cursor = SDL_CreateSystemCursor((SDL_SystemCursor)system_cursor);
    127                    SDL_SetCursor(cursor);
    128                }
    129            }
    130        }
    131    }
    132    SDL_FreeCursor(cursor);
    133
    134    quit(0);
    135    /* keep the compiler happy ... */
    136    return(0);
    137}
    138
    139/* vi: set ts=4 sw=4 expandtab: */