Mercurial > sdl-ios-xcode
view test/testjoystick.c @ 767:d9e79e31a7b7
Date: Mon, 17 Nov 2003 21:59:24 -0800
From: Pete Shinners
Subject: [SDL] directfb cursor patch
here is a quick and dirty patch that allows directfb to change the
visibility of the cursor. this display backend still has no way to change
the actual cursor shape, but being able to set the cursor visibility is a
simple change that should offer some benefits.
the code was largely based on the cursor code for other sdl backends. and
this documentation.
http://directfb.org/documentation/DirectFB_Reference/IDirectFBDisplayLayer_SetCursorOpacity.html
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Sun, 04 Jan 2004 15:57:16 +0000 |
parents | 74212992fb08 |
children | 281d3f4870e5 |
line wrap: on
line source
/* Simple program to test the SDL joystick routines */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "SDL.h" #define SCREEN_WIDTH 640 #define SCREEN_HEIGHT 480 void WatchJoystick(SDL_Joystick *joystick) { SDL_Surface *screen; const char *name; int i, done; SDL_Event event; int x, y, draw; SDL_Rect axis_area[2]; /* Set a video mode to display joystick axis position */ screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, 16, 0); if ( screen == NULL ) { fprintf(stderr, "Couldn't set video mode: %s\n",SDL_GetError()); return; } /* Print info about the joystick we are watching */ name = SDL_JoystickName(SDL_JoystickIndex(joystick)); printf("Watching joystick %d: (%s)\n", SDL_JoystickIndex(joystick), name ? name : "Unknown Joystick"); printf("Joystick has %d axes, %d hats, %d balls, and %d buttons\n", SDL_JoystickNumAxes(joystick), SDL_JoystickNumHats(joystick), SDL_JoystickNumBalls(joystick),SDL_JoystickNumButtons(joystick)); /* Initialize drawing rectangles */ memset(axis_area, 0, (sizeof axis_area)); draw = 0; /* Loop, getting joystick events! */ done = 0; while ( ! done ) { while ( SDL_PollEvent(&event) ) { switch (event.type) { case SDL_JOYAXISMOTION: printf("Joystick %d axis %d value: %d\n", event.jaxis.which, event.jaxis.axis, event.jaxis.value); break; case SDL_JOYHATMOTION: printf("Joystick %d hat %d value:", event.jhat.which, event.jhat.hat); if ( event.jhat.value == SDL_HAT_CENTERED ) printf(" centered"); if ( event.jhat.value & SDL_HAT_UP ) printf(" up"); if ( event.jhat.value & SDL_HAT_RIGHT ) printf(" right"); if ( event.jhat.value & SDL_HAT_DOWN ) printf(" down"); if ( event.jhat.value & SDL_HAT_LEFT ) printf(" left"); printf("\n"); break; case SDL_JOYBALLMOTION: printf("Joystick %d ball %d delta: (%d,%d)\n", event.jball.which, event.jball.ball, event.jball.xrel, event.jball.yrel); break; case SDL_JOYBUTTONDOWN: printf("Joystick %d button %d down\n", event.jbutton.which, event.jbutton.button); break; case SDL_JOYBUTTONUP: printf("Joystick %d button %d up\n", event.jbutton.which, event.jbutton.button); break; case SDL_KEYDOWN: if ( event.key.keysym.sym != SDLK_ESCAPE ) { break; } /* Fall through to signal quit */ case SDL_QUIT: done = 1; break; default: break; } } /* Update visual joystick state */ for ( i=0; i<SDL_JoystickNumButtons(joystick); ++i ) { SDL_Rect area; area.x = i*34; area.y = SCREEN_HEIGHT-34; area.w = 32; area.h = 32; if (SDL_JoystickGetButton(joystick, i) == SDL_PRESSED) { SDL_FillRect(screen, &area, 0xFFFF); } else { SDL_FillRect(screen, &area, 0x0000); } SDL_UpdateRects(screen, 1, &area); } /* Erase previous axes */ SDL_FillRect(screen, &axis_area[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; } 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); } } int main(int argc, char *argv[]) { const char *name; int i; SDL_Joystick *joystick; /* Initialize SDL (Note: video is required to start event loop) */ if ( SDL_Init(SDL_INIT_VIDEO|SDL_INIT_JOYSTICK) < 0 ) { fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError()); exit(1); } /* Print information about the joysticks */ printf("There are %d joysticks attached\n", SDL_NumJoysticks()); for ( i=0; i<SDL_NumJoysticks(); ++i ) { name = SDL_JoystickName(i); printf("Joystick %d: %s\n",i,name ? name : "Unknown Joystick"); } if ( argv[1] ) { joystick = SDL_JoystickOpen(atoi(argv[1])); if ( joystick == NULL ) { printf("Couldn't open joystick %d: %s\n", atoi(argv[1]), SDL_GetError()); } else { WatchJoystick(joystick); SDL_JoystickClose(joystick); } } SDL_QuitSubSystem(SDL_INIT_VIDEO|SDL_INIT_JOYSTICK); return(0); }