diff test/testjoystick.c @ 1854:2280e314a978

Closed bug #74 Added DirectInput joystick code, contributed by Glenn Maynard. This fixes a problem with the Windows Multimedia joystick driver not showing all 6 axes on a GameCube controller converter, which was donated by Jacob Kolding.
author Sam Lantinga <slouken@libsdl.org>
date Sun, 21 May 2006 16:47:41 +0000
parents 74212992fb08
children 782fd950bd46 5ff2c01e475e
line wrap: on
line diff
--- a/test/testjoystick.c	Sun May 21 02:50:05 2006 +0000
+++ b/test/testjoystick.c	Sun May 21 16:47:41 2006 +0000
@@ -17,7 +17,7 @@
 	int i, done;
 	SDL_Event event;
 	int x, y, draw;
-	SDL_Rect axis_area[2];
+	SDL_Rect axis_area[6][2];
 
 	/* Set a video mode to display joystick axis position */
 	screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, 16, 0);
@@ -110,36 +110,38 @@
 			SDL_UpdateRects(screen, 1, &area);
 		}
 
-		/* Erase previous axes */
-		SDL_FillRect(screen, &axis_area[draw], 0x0000);
+		for ( i=0; i<SDL_JoystickNumAxes(joystick)/2 && i < SDL_arraysize(axis_area); ++i ) {
+			/* Erase previous axes */
+			SDL_FillRect(screen, &axis_area[i][draw], 0x0000);
 
-		/* Draw the X/Y axis */
-		draw = !draw;
-		x = (((int)SDL_JoystickGetAxis(joystick, 0))+32768);
-		x *= SCREEN_WIDTH;
-		x /= 65535;
-		if ( x < 0 ) {
-			x = 0;
-		} else
-		if ( x > (SCREEN_WIDTH-16) ) {
-			x = SCREEN_WIDTH-16;
+			/* Draw the X/Y axis */
+			draw = !draw;
+			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;
+			}
+			axis_area[i][draw].x = (Sint16)x;
+			axis_area[i][draw].y = (Sint16)y;
+			axis_area[i][draw].w = 16;
+			axis_area[i][draw].h = 16;
+			SDL_FillRect(screen, &axis_area[i][draw], 0xFFFF);
+
+			SDL_UpdateRects(screen, 2, axis_area[i]);
 		}
-		y = (((int)SDL_JoystickGetAxis(joystick, 1))+32768);
-		y *= SCREEN_HEIGHT;
-		y /= 65535;
-		if ( y < 0 ) {
-			y = 0;
-		} else
-		if ( y > (SCREEN_HEIGHT-16) ) {
-			y = SCREEN_HEIGHT-16;
-		}
-		axis_area[draw].x = (Sint16)x;
-		axis_area[draw].y = (Sint16)y;
-		axis_area[draw].w = 16;
-		axis_area[draw].h = 16;
-		SDL_FillRect(screen, &axis_area[draw], 0xFFFF);
-
-		SDL_UpdateRects(screen, 2, axis_area);
 	}
 }