Better programmatic representation of gestures
git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@2313 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
@@ -941,9 +941,9 @@ VControl_StartIterByName (char *targetname)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
VControl_NextBindingName (char *buffer)
|
VControl_NextBinding (VCONTROL_GESTURE *gesture)
|
||||||
{
|
{
|
||||||
if ((buffer == NULL) || (iter_target == NULL)
|
if ((gesture == NULL) || (iter_target == NULL)
|
||||||
|| iter_device >= (joycount * 3))
|
|| iter_device >= (joycount * 3))
|
||||||
return 0;
|
return 0;
|
||||||
while (iter_device < (joycount * 3))
|
while (iter_device < (joycount * 3))
|
||||||
@@ -956,8 +956,8 @@ VControl_NextBindingName (char *buffer)
|
|||||||
{
|
{
|
||||||
if (kb->target == iter_target)
|
if (kb->target == iter_target)
|
||||||
{
|
{
|
||||||
strncpy (buffer, VControl_code2name (iter_index), 40);
|
gesture->type = VCONTROL_KEY;
|
||||||
buffer[39] = 0;
|
gesture->gesture.key = iter_index;
|
||||||
done = 1;
|
done = 1;
|
||||||
}
|
}
|
||||||
kb = kb->next;
|
kb = kb->next;
|
||||||
@@ -999,13 +999,10 @@ VControl_NextBindingName (char *buffer)
|
|||||||
if (kb->target == iter_target)
|
if (kb->target == iter_target)
|
||||||
{
|
{
|
||||||
done = 1;
|
done = 1;
|
||||||
switch (iter_index) {
|
gesture->type = VCONTROL_JOYAXIS;
|
||||||
case 0: sprintf (buffer, "Joy%d left", i); break;
|
gesture->gesture.axis.port = i;
|
||||||
case 1: sprintf (buffer, "Joy%d right", i); break;
|
gesture->gesture.axis.index = axis;
|
||||||
case 2: sprintf (buffer, "Joy%d up", i); break;
|
gesture->gesture.axis.polarity = (dir) ? 1 : -1;
|
||||||
case 3: sprintf (buffer, "Joy%d down", i); break;
|
|
||||||
default: sprintf (buffer, "Joy%d A%d %s", i, axis, dir ? "high" : "low"); break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
kb = kb->next;
|
kb = kb->next;
|
||||||
}
|
}
|
||||||
@@ -1026,8 +1023,10 @@ VControl_NextBindingName (char *buffer)
|
|||||||
{
|
{
|
||||||
if (kb->target == iter_target)
|
if (kb->target == iter_target)
|
||||||
{
|
{
|
||||||
|
gesture->type = VCONTROL_JOYBUTTON;
|
||||||
|
gesture->gesture.button.port = i;
|
||||||
|
gesture->gesture.button.index = iter_index;
|
||||||
done = 1;
|
done = 1;
|
||||||
sprintf (buffer, "Joy%d B%d", i, iter_index);
|
|
||||||
}
|
}
|
||||||
kb = kb->next;
|
kb = kb->next;
|
||||||
}
|
}
|
||||||
@@ -1046,25 +1045,23 @@ VControl_NextBindingName (char *buffer)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
keybinding *kb;
|
keybinding *kb;
|
||||||
|
Uint8 targetdir;
|
||||||
switch (hatd)
|
switch (hatd)
|
||||||
{
|
{
|
||||||
case 0: kb = joysticks[i].hats[hat].left; break;
|
case 0: kb = joysticks[i].hats[hat].left; targetdir = SDL_HAT_LEFT; break;
|
||||||
case 1: kb = joysticks[i].hats[hat].right; break;
|
case 1: kb = joysticks[i].hats[hat].right; targetdir = SDL_HAT_RIGHT; break;
|
||||||
case 2: kb = joysticks[i].hats[hat].up; break;
|
case 2: kb = joysticks[i].hats[hat].up; targetdir = SDL_HAT_UP; break;
|
||||||
default: kb = joysticks[i].hats[hat].down; break;
|
default: kb = joysticks[i].hats[hat].down; targetdir = SDL_HAT_DOWN; break;
|
||||||
}
|
}
|
||||||
while (kb != NULL)
|
while (kb != NULL)
|
||||||
{
|
{
|
||||||
if (kb->target == iter_target)
|
if (kb->target == iter_target)
|
||||||
{
|
{
|
||||||
done = 1;
|
done = 1;
|
||||||
switch (hatd)
|
gesture->type = VCONTROL_JOYHAT;
|
||||||
{
|
gesture->gesture.hat.port = i;
|
||||||
case 0: sprintf (buffer, "Joy%d hat%d left", i, hat); break;
|
gesture->gesture.hat.index = hat;
|
||||||
case 1: sprintf (buffer, "Joy%d hat%d right", i, hat); break;
|
gesture->gesture.hat.dir = targetdir;
|
||||||
case 2: sprintf (buffer, "Joy%d hat%d up", i, hat); break;
|
|
||||||
default: sprintf (buffer, "Joy%d hat%d down", i, hat); break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
kb = kb->next;
|
kb = kb->next;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,27 @@
|
|||||||
void VControl_Init (void);
|
void VControl_Init (void);
|
||||||
void VControl_Uninit (void);
|
void VControl_Uninit (void);
|
||||||
|
|
||||||
|
/* Structures for representing actual VControl Inputs. Returned by
|
||||||
|
iterators and used to construct bindings. */
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
VCONTROL_KEY,
|
||||||
|
VCONTROL_JOYAXIS,
|
||||||
|
VCONTROL_JOYBUTTON,
|
||||||
|
VCONTROL_JOYHAT,
|
||||||
|
NUM_VCONTROL_GESTURES
|
||||||
|
} VCONTROL_GESTURE_TYPE;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
VCONTROL_GESTURE_TYPE type;
|
||||||
|
union {
|
||||||
|
SDLKey key;
|
||||||
|
struct { int port, index, polarity; } axis;
|
||||||
|
struct { int port, index; } button;
|
||||||
|
struct { int port, index; Uint8 dir; } hat;
|
||||||
|
} gesture;
|
||||||
|
} VCONTROL_GESTURE;
|
||||||
|
|
||||||
/* Control of bindings */
|
/* Control of bindings */
|
||||||
int VControl_AddKeyBinding (SDLKey symbol, int *target);
|
int VControl_AddKeyBinding (SDLKey symbol, int *target);
|
||||||
void VControl_RemoveKeyBinding (SDLKey symbol, int *target);
|
void VControl_RemoveKeyBinding (SDLKey symbol, int *target);
|
||||||
@@ -55,18 +76,20 @@ void VControl_SetConfigFileVersion (int v);
|
|||||||
|
|
||||||
/* Dump a configuration file corresponding to the current bindings and names. */
|
/* Dump a configuration file corresponding to the current bindings and names. */
|
||||||
void VControl_Dump (FILE *out);
|
void VControl_Dump (FILE *out);
|
||||||
|
|
||||||
/* Read a configuration file. Returns number of errors encountered. */
|
/* Read a configuration file. Returns number of errors encountered. */
|
||||||
int VControl_ReadConfiguration (uio_Stream *in);
|
int VControl_ReadConfiguration (uio_Stream *in);
|
||||||
int VControl_GetErrorCount (void);
|
int VControl_GetErrorCount (void);
|
||||||
int VControl_GetValidCount (void);
|
int VControl_GetValidCount (void);
|
||||||
|
|
||||||
|
|
||||||
/* Iterator control. Start an iteration with StartIter or
|
/* Iterator control. Start an iteration with StartIter or
|
||||||
StartIterByName; then call NextBindingName with a char array of at
|
StartIterByName; then call NextBindingName until it returns 0.
|
||||||
least 40 bytes in size until it returns 0. Produces names. */
|
Produces gestures. */
|
||||||
|
|
||||||
void VControl_StartIter (int *target);
|
void VControl_StartIter (int *target);
|
||||||
void VControl_StartIterByName (char *targetname);
|
void VControl_StartIterByName (char *targetname);
|
||||||
int VControl_NextBindingName (char *buffer);
|
int VControl_NextBinding (VCONTROL_GESTURE *gesture);
|
||||||
|
|
||||||
/* Tracking the "last interesting event." Used to poll to find new
|
/* Tracking the "last interesting event." Used to poll to find new
|
||||||
control keys. */
|
control keys. */
|
||||||
|
|||||||
Reference in New Issue
Block a user