Browse Source

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

Sylvain 3 years ago
parent
commit
34d4f5b14e
3 changed files with 18 additions and 0 deletions
  1. 5 0
      include/SDL_touch.h
  2. 12 0
      src/events/SDL_touch.c
  3. 1 0
      src/events/SDL_touch_c.h

+ 5 - 0
include/SDL_touch.h

@@ -95,6 +95,11 @@ extern DECLSPEC int SDLCALL SDL_GetNumTouchDevices(void);
  */
 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.
  *

+ 12 - 0
src/events/SDL_touch.c

@@ -63,6 +63,16 @@ SDL_GetTouchDevice(int index)
     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
 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]->max_fingers = 0;
     SDL_touchDevices[index]->fingers = NULL;
+    SDL_touchDevices[index]->name = SDL_strdup(name ? name : "");
 
     /* Record this touch device for gestures */
     /* 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);
+    SDL_free(touch->name);
     SDL_free(touch);
 
     SDL_num_touch--;

+ 1 - 0
src/events/SDL_touch_c.h

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