[retro-gtk/wip/aplazas/gamepad: 1/6] input: Add retro_gamepad_button_converter()



commit 5b560c0706bb6a1556fb7e6aea50f9e613f40c37
Author: Adrien Plazas <kekun plazas laposte net>
Date:   Tue Jul 25 12:02:49 2017 +0200

    input: Add retro_gamepad_button_converter()
    
    This will allow to use Linux input event codes for gamepad buttons and
    to convert them internally to the corresponding Libretro buttons,
    reducing the public API.

 retro-gtk/Makefile.am                 |    4 +++
 retro-gtk/input/device.vala           |    5 ++-
 retro-gtk/input/retro-gamepad-input.c |   46 +++++++++++++++++++++++++++++++++
 retro-gtk/input/retro-gamepad-input.h |   15 ++++++++++
 4 files changed, 68 insertions(+), 2 deletions(-)
---
diff --git a/retro-gtk/Makefile.am b/retro-gtk/Makefile.am
index a14d581..d8d69f5 100644
--- a/retro-gtk/Makefile.am
+++ b/retro-gtk/Makefile.am
@@ -37,6 +37,7 @@ libretro_gtk_la_SOURCES = \
        input/input-device-manager.vala \
        input/keyboard-state.vala \
        input/mouse.vala \
+       input/retro-gamepad-input.c \
        input/retro-keyboard-key.c \
        input/virtual-gamepad.vala \
        \
@@ -72,6 +73,8 @@ libretro_gtk_la_SOURCES = \
        video/video-filter.vala \
        $(NULL)
 
+input/retro-gamepad-input.c: retro-gtk-internal.h
+
 video/retro-video-converter.c: retro-gtk-internal.h
 
 retro-core.c: retro-gtk-internal.h
@@ -152,6 +155,7 @@ pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = retro-gtk-0.12.pc
 
 EXTRA_DIST = \
+       input/retro-gamepad-input.h \
        input/retro-keyboard-key.h \
        retro-core.h \
        retro-module.h \
diff --git a/retro-gtk/input/device.vala b/retro-gtk/input/device.vala
index ce8a5bf..4b7f40a 100644
--- a/retro-gtk/input/device.vala
+++ b/retro-gtk/input/device.vala
@@ -62,7 +62,7 @@ public enum JoypadId {
  */
 public enum AnalogIndex {
        LEFT,
-       RIGHT
+       RIGHT,
 }
 
 /**
@@ -70,7 +70,8 @@ public enum AnalogIndex {
  */
 public enum AnalogId {
        X,
-       Y
+       Y,
+       COUNT,
 }
 
 /**
diff --git a/retro-gtk/input/retro-gamepad-input.c b/retro-gtk/input/retro-gamepad-input.c
new file mode 100644
index 0000000..8c44101
--- /dev/null
+++ b/retro-gtk/input/retro-gamepad-input.c
@@ -0,0 +1,46 @@
+// This file is part of retro-gtk. License: GPL-3.0+.
+
+#include "retro-gamepad-input.h"
+
+RetroJoypadId
+retro_gamepad_button_converter (guint16 button)
+{
+  switch (button) {
+  case BTN_A:
+    return RETRO_JOYPAD_ID_B;
+  case BTN_Y:
+    return RETRO_JOYPAD_ID_Y;
+  case BTN_SELECT:
+    return RETRO_JOYPAD_ID_SELECT;
+  case BTN_START:
+    return RETRO_JOYPAD_ID_START;
+  case BTN_DPAD_UP:
+    return RETRO_JOYPAD_ID_UP;
+  case BTN_DPAD_DOWN:
+    return RETRO_JOYPAD_ID_DOWN;
+  case BTN_DPAD_LEFT:
+    return RETRO_JOYPAD_ID_LEFT;
+  case BTN_DPAD_RIGHT:
+    return RETRO_JOYPAD_ID_RIGHT;
+  case BTN_B:
+    return RETRO_JOYPAD_ID_A;
+  case BTN_X:
+    return RETRO_JOYPAD_ID_X;
+  case BTN_TL:
+    return RETRO_JOYPAD_ID_L;
+  case BTN_TR:
+    return RETRO_JOYPAD_ID_R;
+  case BTN_TL2:
+    return RETRO_JOYPAD_ID_L2;
+  case BTN_TR2:
+    return RETRO_JOYPAD_ID_R2;
+  case BTN_THUMBL:
+    return RETRO_JOYPAD_ID_L3;
+  case BTN_THUMBR:
+    return RETRO_JOYPAD_ID_R3;
+  default:
+    return RETRO_JOYPAD_ID_COUNT;
+  }
+
+  return RETRO_JOYPAD_ID_COUNT;
+}
diff --git a/retro-gtk/input/retro-gamepad-input.h b/retro-gtk/input/retro-gamepad-input.h
new file mode 100644
index 0000000..388d64e
--- /dev/null
+++ b/retro-gtk/input/retro-gamepad-input.h
@@ -0,0 +1,15 @@
+// This file is part of retro-gtk. License: GPL-3.0+.
+
+#ifndef RETRO_GAMEPAD_BUTTON_H
+#define RETRO_GAMEPAD_BUTTON_H
+
+#include <linux/input-event-codes.h>
+#include "../retro-gtk-internal.h"
+
+G_BEGIN_DECLS
+
+RetroJoypadId retro_gamepad_button_converter (guint16 button);
+
+G_END_DECLS
+
+#endif /* RETRO_GAMEPAD_BUTTON_H */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]