115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot/*
215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org>
315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  This software is provided 'as-is', without any express or implied
515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  warranty.  In no event will the authors be held liable for any damages
615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  arising from the use of this software.
715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  Permission is granted to anyone to use this software for any purpose,
915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  including commercial applications, and to alter it and redistribute it
1015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot  freely.
1115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot*/
1215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
1315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#include <stdlib.h>
1415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#include <stdio.h>
1515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
1615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot#include "SDL_test_common.h"
1715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
1815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robotstatic SDLTest_CommonState *state;
1915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
2015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
2115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robotstatic void
2215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robotquit(int rc)
2315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot{
2415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    SDLTest_CommonQuit(state);
2515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    exit(rc);
2615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot}
2715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
2815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robotint
2915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robotmain(int argc, char *argv[])
3015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot{
3115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    static const char *cursorNames[] = {
3215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        "arrow",
3315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        "ibeam",
3415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        "wait",
3515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        "crosshair",
3615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        "waitarrow",
3715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        "sizeNWSE",
3815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        "sizeNESW",
3915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        "sizeWE",
4015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        "sizeNS",
4115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        "sizeALL",
4215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        "NO",
4315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        "hand",
4415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    };
4515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
4615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    int i, done;
4715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    SDL_Event event;
4815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    int system_cursor = -1;
4915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    SDL_Cursor *cursor = NULL;
5015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
5115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot	/* Enable standard application logging */
5215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);
5315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
5415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    SDL_assert(SDL_arraysize(cursorNames) == SDL_NUM_SYSTEM_CURSORS);
5515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
5615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    /* Initialize test framework */
5715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO);
5815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    if (!state) {
5915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        return 1;
6015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    }
6115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    state->skip_renderer = SDL_TRUE;
6215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    for (i = 1; i < argc;) {
6315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        int consumed;
6415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
6515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        consumed = SDLTest_CommonArg(state, i);
6615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        if (consumed == 0) {
6715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot            consumed = -1;
6815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        }
6915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        if (consumed < 0) {
7015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot            SDL_Log("Usage: %s %s\n", argv[0], SDLTest_CommonUsage(state));
7115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot            quit(1);
7215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        }
7315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        i += consumed;
7415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    }
7515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    if (!SDLTest_CommonInit(state)) {
7615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        quit(2);
7715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    }
7815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
7915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    /* Main render loop */
8015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    done = 0;
8115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    while (!done) {
8215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        /* Check for events */
8315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        while (SDL_PollEvent(&event)) {
8415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot            SDLTest_CommonEvent(state, &event, &done);
8515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
8615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot            if (event.type == SDL_WINDOWEVENT) {
8715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                if (event.window.event == SDL_WINDOWEVENT_RESIZED) {
8815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                    SDL_Window *window = SDL_GetWindowFromID(event.window.windowID);
8915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                    if (window) {
9015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                        SDL_Log("Window %d resized to %dx%d\n",
9115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                            event.window.windowID,
9215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                            event.window.data1,
9315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                            event.window.data2);
9415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                    }
9515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                }
9615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                if (event.window.event == SDL_WINDOWEVENT_MOVED) {
9715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                    SDL_Window *window = SDL_GetWindowFromID(event.window.windowID);
9815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                    if (window) {
9915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                        SDL_Log("Window %d moved to %d,%d (display %s)\n",
10015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                            event.window.windowID,
10115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                            event.window.data1,
10215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                            event.window.data2,
10315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                            SDL_GetDisplayName(SDL_GetWindowDisplayIndex(window)));
10415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                    }
10515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                }
10615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot            }
10715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot            if (event.type == SDL_KEYUP) {
10815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                SDL_bool updateCursor = SDL_FALSE;
10915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
11015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                if (event.key.keysym.sym == SDLK_LEFT) {
11115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                    --system_cursor;
11215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                    if (system_cursor < 0) {
11315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                        system_cursor = SDL_NUM_SYSTEM_CURSORS - 1;
11415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                    }
11515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                    updateCursor = SDL_TRUE;
11615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                } else if (event.key.keysym.sym == SDLK_RIGHT) {
11715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                    ++system_cursor;
11815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                    if (system_cursor >= SDL_NUM_SYSTEM_CURSORS) {
11915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                        system_cursor = 0;
12015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                    }
12115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                    updateCursor = SDL_TRUE;
12215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                }
12315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                if (updateCursor) {
12415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                    SDL_Log("Changing cursor to \"%s\"", cursorNames[system_cursor]);
12515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                    SDL_FreeCursor(cursor);
12615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                    cursor = SDL_CreateSystemCursor((SDL_SystemCursor)system_cursor);
12715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                    SDL_SetCursor(cursor);
12815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot                }
12915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot            }
13015560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot        }
13115560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    }
13215560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    SDL_FreeCursor(cursor);
13315560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
13415560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    quit(0);
13515560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    /* keep the compiler happy ... */
13615560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot    return(0);
13715560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot}
13815560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot
13915560bb32cdb9b47db48eb4865b736df9708a8fandroid-build-team Robot/* vi: set ts=4 sw=4 expandtab: */
140