From b5cb5f91b832b5f1fdfa686fd4820b41b179eedb Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Sun, 14 Oct 2012 00:24:07 -0700 Subject: [PATCH] Updated testjoystick for SDL 2.0 API - patch from simon --- test/Makefile.in | 2 +- test/testjoystick.c | 183 +++++++++++++++++++++++--------------------- 2 files changed, 98 insertions(+), 87 deletions(-) diff --git a/test/Makefile.in b/test/Makefile.in index fa1bbb902..cd4320e75 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -110,7 +110,7 @@ testiconv$(EXE): $(srcdir)/testiconv.c testime$(EXE): $(srcdir)/testime.c $(srcdir)/common.c $(CC) -o $@ $(srcdir)/testime.c $(srcdir)/common.c $(CFLAGS) $(LIBS) @SDL_TTF_LIB@ -testjoystick$(EXE): $(srcdir)/testjoystick.c +testjoystick$(EXE): $(srcdir)/testjoystick.c $(srcdir)/common.c $(CC) -o $@ $? $(CFLAGS) $(LIBS) testkeys$(EXE): $(srcdir)/testkeys.c diff --git a/test/testjoystick.c b/test/testjoystick.c index 20221a089..a20c3dd1f 100644 --- a/test/testjoystick.c +++ b/test/testjoystick.c @@ -17,14 +17,10 @@ #include #include "SDL.h" +#include "common.h" -#ifdef __IPHONEOS__ -#define SCREEN_WIDTH 320 -#define SCREEN_HEIGHT 480 -#else -#define SCREEN_WIDTH 640 -#define SCREEN_HEIGHT 480 -#endif +static CommonState *state; +static SDL_BlendMode blendMode = SDL_BLENDMODE_NONE; #define MAX_NUM_AXES 6 #define MAX_NUM_HATS 2 @@ -41,31 +37,13 @@ WatchJoystick(SDL_Joystick * joystick) { SDL_Window *window = NULL; SDL_Renderer *screen = NULL; + SDL_Rect viewport; + SDL_Event event; + const char *name = NULL; int done = 0; - SDL_Event event; int i; - /* Create a window to display joystick axis position */ - window = SDL_CreateWindow("Joystick Test", SDL_WINDOWPOS_CENTERED, - SDL_WINDOWPOS_CENTERED, SCREEN_WIDTH, - SCREEN_HEIGHT, SDL_WINDOW_SHOWN); - if (window == NULL) { - fprintf(stderr, "Couldn't create window: %s\n", SDL_GetError()); - return; - } - - screen = SDL_CreateRenderer(window, -1, 0); - if (screen == NULL) { - fprintf(stderr, "Couldn't create renderer: %s\n", SDL_GetError()); - SDL_DestroyWindow(window); - return; - } - - SDL_SetRenderDrawColor(screen, 0x00, 0x00, 0x00, SDL_ALPHA_OPAQUE); - SDL_RenderClear(screen); - SDL_RenderPresent(screen); - /* Print info about the joystick we are watching */ name = SDL_JoystickName(SDL_JoystickIndex(joystick)); printf("Watching joystick %d: (%s)\n", SDL_JoystickIndex(joystick), @@ -76,10 +54,6 @@ WatchJoystick(SDL_Joystick * joystick) /* Loop, getting joystick events! */ while (!done) { - /* blank screen, set up for drawing this frame. */ - SDL_SetRenderDrawColor(screen, 0x00, 0x00, 0x00, SDL_ALPHA_OPAQUE); - SDL_RenderClear(screen); - while (SDL_PollEvent(&event)) { switch (event.type) { case SDL_JOYAXISMOTION: @@ -127,80 +101,96 @@ WatchJoystick(SDL_Joystick * joystick) break; } } + /* Update visual joystick state */ - SDL_SetRenderDrawColor(screen, 0x00, 0xFF, 0x00, SDL_ALPHA_OPAQUE); - for (i = 0; i < SDL_JoystickNumButtons(joystick); ++i) { - if (SDL_JoystickGetButton(joystick, i) == SDL_PRESSED) { - DrawRect(screen, i * 34, SCREEN_HEIGHT - 34, 32, 32); - } - } + for (i = 0; i < state->num_windows; ++i) { + screen = state->renderers[i]; - SDL_SetRenderDrawColor(screen, 0xFF, 0x00, 0x00, SDL_ALPHA_OPAQUE); - for (i = 0; i < SDL_JoystickNumAxes(joystick) / 2; ++i) { - /* Draw the X/Y axis */ - int x, y; - x = (((int) SDL_JoystickGetAxis(joystick, i * 2 + 0)) + 32768); - x *= SCREEN_WIDTH; - x /= 65535; - if (x < 0) { - x = 0; - } else if (x > (SCREEN_WIDTH - 16)) { - x = SCREEN_WIDTH - 16; - } - y = (((int) SDL_JoystickGetAxis(joystick, i * 2 + 1)) + 32768); - y *= SCREEN_HEIGHT; - y /= 65535; - if (y < 0) { - y = 0; - } else if (y > (SCREEN_HEIGHT - 16)) { - y = SCREEN_HEIGHT - 16; + /* Erase previous axes */ + SDL_SetRenderDrawColor(screen, 0x00, 0x00, 0x00, SDL_ALPHA_OPAQUE); + SDL_RenderClear(screen); + + /* Query the sizes */ + SDL_RenderGetViewport(screen, &viewport); + + SDL_SetRenderDrawColor(screen, 0x00, 0xFF, 0x00, SDL_ALPHA_OPAQUE); + for (i = 0; i < SDL_JoystickNumButtons(joystick); ++i) { + if (SDL_JoystickGetButton(joystick, i) == SDL_PRESSED) { + DrawRect(screen, i * 34, viewport.h - 34, 32, 32); + } } - DrawRect(screen, x, y, 16, 16); - } + SDL_SetRenderDrawColor(screen, 0xFF, 0x00, 0x00, SDL_ALPHA_OPAQUE); + for (i = 0; i < SDL_JoystickNumAxes(joystick) / 2; ++i) { + /* Draw the X/Y axis */ + int x, y; + x = (((int) SDL_JoystickGetAxis(joystick, i * 2 + 0)) + 32768); + x *= viewport.w ; + x /= 65535; + if (x < 0) { + x = 0; + } else if (x > (viewport.w - 16)) { + x = viewport.w - 16; + } + y = (((int) SDL_JoystickGetAxis(joystick, i * 2 + 1)) + 32768); + y *= viewport.h; + y /= 65535; + if (y < 0) { + y = 0; + } else if (y > (viewport.h - 16)) { + y = viewport.h - 16; + } - SDL_SetRenderDrawColor(screen, 0x00, 0x00, 0xFF, SDL_ALPHA_OPAQUE); - for (i = 0; i < SDL_JoystickNumHats(joystick); ++i) { - /* Derive the new position */ - int x = SCREEN_WIDTH/2; - int y = SCREEN_HEIGHT/2; - const Uint8 hat_pos = SDL_JoystickGetHat(joystick, i); - - if (hat_pos & SDL_HAT_UP) { - y = 0; - } else if (hat_pos & SDL_HAT_DOWN) { - y = SCREEN_HEIGHT-8; + DrawRect(screen, x, y, 16, 16); } - if (hat_pos & SDL_HAT_LEFT) { - x = 0; - } else if (hat_pos & SDL_HAT_RIGHT) { - x = SCREEN_WIDTH-8; + SDL_SetRenderDrawColor(screen, 0x00, 0x00, 0xFF, SDL_ALPHA_OPAQUE); + for (i = 0; i < SDL_JoystickNumHats(joystick); ++i) { + /* Derive the new position */ + int x = viewport.w/2; + int y = viewport.h/2; + const Uint8 hat_pos = SDL_JoystickGetHat(joystick, i); + + if (hat_pos & SDL_HAT_UP) { + y = 0; + } else if (hat_pos & SDL_HAT_DOWN) { + y = viewport.h-8; + } + + if (hat_pos & SDL_HAT_LEFT) { + x = 0; + } else if (hat_pos & SDL_HAT_RIGHT) { + x = viewport.w-8; + } + + DrawRect(screen, x, y, 8, 8); } - DrawRect(screen, x, y, 8, 8); + SDL_RenderPresent(screen); } - - SDL_RenderPresent(screen); } - - SDL_DestroyRenderer(screen); - SDL_DestroyWindow(window); } int main(int argc, char *argv[]) { const char *name; - int i; + int i, joy=-1; SDL_Joystick *joystick; /* Initialize SDL (Note: video is required to start event loop) */ - if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) < 0) { + if (SDL_Init(SDL_INIT_JOYSTICK) < 0) { fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError()); exit(1); } + /* Initialize test framework */ + state = CommonCreateState(argv, SDL_INIT_VIDEO | SDL_INIT_JOYSTICK); + if (!state) { + fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError()); + return 1; + } + /* Print information about the joysticks */ printf("There are %d joysticks attached\n", SDL_NumJoysticks()); for (i = 0; i < SDL_NumJoysticks(); ++i) { @@ -219,17 +209,38 @@ main(int argc, char *argv[]) } } - if (argv[1]) { - joystick = SDL_JoystickOpen(atoi(argv[1])); + for (i = 1; i < argc;) { + int consumed; + + consumed = CommonArg(state, i); + if (consumed == 0) { + consumed = -1; + if (SDL_isdigit(*argv[i])) { + joy = SDL_atoi(argv[i]); + consumed = 1; + } + } + if (consumed < 0) { + return 1; + } + i += consumed; + } + if (!CommonInit(state)) { + return 2; + } + + if (joy > -1) { + joystick = SDL_JoystickOpen(joy); if (joystick == NULL) { - printf("Couldn't open joystick %d: %s\n", atoi(argv[1]), + printf("Couldn't open joystick %d: %s\n", joy, SDL_GetError()); } else { WatchJoystick(joystick); SDL_JoystickClose(joystick); } } - SDL_QuitSubSystem(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK); + SDL_QuitSubSystem(SDL_INIT_JOYSTICK); + CommonQuit(state); return (0); }