Vita: add hint to select which touchpad generates mouse events
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
diff --git a/include/SDL_hints.h b/include/SDL_hints.h
index 133f687..b61eb32 100644
--- a/include/SDL_hints.h
+++ b/include/SDL_hints.h
@@ -1355,6 +1355,18 @@ extern "C" {
#define SDL_HINT_TOUCH_MOUSE_EVENTS "SDL_TOUCH_MOUSE_EVENTS"
/**
+ * \brief A variable controlling which touchpad should generate synthetic mouse events
+ *
+ * This variable can be set to the following values:
+ * "0" - Only front touchpad should generate mouse events. Default
+ * "1" - Only back touchpad should generate mouse events.
+ * "2" - Both touchpads should generate mouse events.
+ *
+ * By default SDL will generate mouse events for all touch devices
+ */
+#define SDL_HINT_VITA_TOUCH_MOUSE_DEVICE "SDL_HINT_VITA_TOUCH_MOUSE_DEVICE"
+
+/**
* \brief A variable controlling whether the Android / tvOS remotes
* should be listed as joystick devices, instead of sending keyboard events.
*
diff --git a/src/events/SDL_mouse.c b/src/events/SDL_mouse.c
index acf75ac..092c95f 100644
--- a/src/events/SDL_mouse.c
+++ b/src/events/SDL_mouse.c
@@ -109,6 +109,28 @@ SDL_TouchMouseEventsChanged(void *userdata, const char *name, const char *oldVal
mouse->touch_mouse_events = SDL_GetStringBoolean(hint, SDL_TRUE);
}
+#if defined(__vita__)
+static void SDLCALL
+SDL_VitaTouchMouseDeviceChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
+{
+ SDL_Mouse *mouse = (SDL_Mouse *)userdata;
+ if (hint) {
+ switch(*hint) {
+ default:
+ case '0':
+ mouse->vita_touch_mouse_device = 0;
+ break;
+ case '1':
+ mouse->vita_touch_mouse_device = 1;
+ break;
+ case '2':
+ mouse->vita_touch_mouse_device = 2;
+ break;
+ }
+ }
+}
+#endif
+
static void SDLCALL
SDL_MouseTouchEventsChanged(void *userdata, const char *name, const char *oldValue, const char *hint)
{
@@ -166,6 +188,11 @@ SDL_MouseInit(void)
SDL_AddHintCallback(SDL_HINT_TOUCH_MOUSE_EVENTS,
SDL_TouchMouseEventsChanged, mouse);
+#if defined(__vita__)
+ SDL_AddHintCallback(SDL_HINT_VITA_TOUCH_MOUSE_DEVICE,
+ SDL_VitaTouchMouseDeviceChanged, mouse);
+#endif
+
SDL_AddHintCallback(SDL_HINT_MOUSE_TOUCH_EVENTS,
SDL_MouseTouchEventsChanged, mouse);
diff --git a/src/events/SDL_mouse_c.h b/src/events/SDL_mouse_c.h
index 7b02044..e2298d9 100644
--- a/src/events/SDL_mouse_c.h
+++ b/src/events/SDL_mouse_c.h
@@ -100,6 +100,9 @@ typedef struct
SDL_bool touch_mouse_events;
SDL_bool mouse_touch_events;
SDL_bool was_touch_mouse_events; /* Was a touch-mouse event pending? */
+#if defined(__vita__)
+ Uint8 vita_touch_mouse_device;
+#endif
SDL_bool auto_capture;
/* Data for input source state */
diff --git a/src/events/SDL_touch.c b/src/events/SDL_touch.c
index c3534f0..ebf26e0 100644
--- a/src/events/SDL_touch.c
+++ b/src/events/SDL_touch.c
@@ -265,8 +265,13 @@ SDL_SendTouch(SDL_TouchID id, SDL_FingerID fingerid, SDL_Window * window,
#if SYNTHESIZE_TOUCH_TO_MOUSE
/* SDL_HINT_TOUCH_MOUSE_EVENTS: controlling whether touch events should generate synthetic mouse events */
+ /* SDL_HINT_VITA_TOUCH_MOUSE_DEVICE: controlling which touchpad should generate synthetic mouse events, PSVita-only */
{
+#if defined(__vita__)
+ if (mouse->touch_mouse_events && ((mouse->vita_touch_mouse_device == id) || (mouse->vita_touch_mouse_device == 2)) ) {
+#else
if (mouse->touch_mouse_events) {
+#endif
/* FIXME: maybe we should only restrict to a few SDL_TouchDeviceType */
if (id != SDL_MOUSE_TOUCHID) {
if (window) {