Fixed bug #2032: add SDL_GetTouchName to expose the driver name of the device (Thanks @mgerhardy!)

This commit is contained in:
Sylvain 2022-02-08 11:32:20 +01:00
parent 8ce003a42c
commit 34d4f5b14e
No known key found for this signature in database
GPG Key ID: 5F87E02E5BC0939E
3 changed files with 18 additions and 0 deletions

View File

@ -95,6 +95,11 @@ extern DECLSPEC int SDLCALL SDL_GetNumTouchDevices(void);
*/ */
extern DECLSPEC SDL_TouchID SDLCALL SDL_GetTouchDevice(int index); extern DECLSPEC SDL_TouchID SDLCALL SDL_GetTouchDevice(int index);
/**
* \brief Get the touch device name as reported from the driver or NULL if the index is invalid.
*/
extern DECLSPEC const char* SDLCALL SDL_GetTouchName(int index);
/** /**
* Get the type of the given touch device. * Get the type of the given touch device.
* *

View File

@ -63,6 +63,16 @@ SDL_GetTouchDevice(int index)
return SDL_touchDevices[index]->id; return SDL_touchDevices[index]->id;
} }
const char*
SDL_GetTouchName(int index)
{
if (index < 0 || index >= SDL_num_touch) {
SDL_SetError("Unknown touch device");
return NULL;
}
return SDL_touchDevices[index]->name;
}
static int static int
SDL_GetTouchIndex(SDL_TouchID id) SDL_GetTouchIndex(SDL_TouchID id)
{ {
@ -185,6 +195,7 @@ SDL_AddTouch(SDL_TouchID touchID, SDL_TouchDeviceType type, const char *name)
SDL_touchDevices[index]->num_fingers = 0; SDL_touchDevices[index]->num_fingers = 0;
SDL_touchDevices[index]->max_fingers = 0; SDL_touchDevices[index]->max_fingers = 0;
SDL_touchDevices[index]->fingers = NULL; SDL_touchDevices[index]->fingers = NULL;
SDL_touchDevices[index]->name = SDL_strdup(name ? name : "");
/* Record this touch device for gestures */ /* Record this touch device for gestures */
/* We could do this on the fly in the gesture code if we wanted */ /* We could do this on the fly in the gesture code if we wanted */
@ -452,6 +463,7 @@ SDL_DelTouch(SDL_TouchID id)
SDL_free(touch->fingers[i]); SDL_free(touch->fingers[i]);
} }
SDL_free(touch->fingers); SDL_free(touch->fingers);
SDL_free(touch->name);
SDL_free(touch); SDL_free(touch);
SDL_num_touch--; SDL_num_touch--;

View File

@ -31,6 +31,7 @@ typedef struct SDL_Touch
int num_fingers; int num_fingers;
int max_fingers; int max_fingers;
SDL_Finger** fingers; SDL_Finger** fingers;
char *name;
} SDL_Touch; } SDL_Touch;