[retro-gtk/count] controller-codes: Drop the COUNT values
- From: Adrien Plazas <aplazas src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [retro-gtk/count] controller-codes: Drop the COUNT values
- Date: Sat, 12 Sep 2020 12:06:17 +0000 (UTC)
commit 59f52fa9150441394791e2586334f313c9485f06
Author: Adrien Plazas <kekun plazas laposte net>
Date: Fri Sep 11 10:29:58 2020 +0200
controller-codes: Drop the COUNT values
They aren't per-se values and hence shouldn't be presented as such.
retro-gtk/retro-core-view.c | 2 +-
retro-gtk/retro-key-joypad-mapping.c | 1 +
shared/retro-controller-codes-private.h | 20 ++++++
shared/retro-controller-codes.c | 2 +-
shared/retro-controller-codes.h | 12 ----
shared/retro-controller-state.c | 1 +
shared/retro-controller-type.c | 2 +-
shared/retro-input.c | 2 +
tests/retro-test-controller.c | 108 ++++++++++++++------------------
9 files changed, 75 insertions(+), 75 deletions(-)
---
diff --git a/retro-gtk/retro-core-view.c b/retro-gtk/retro-core-view.c
index 9f331400..b67cdbdf 100644
--- a/retro-gtk/retro-core-view.c
+++ b/retro-gtk/retro-core-view.c
@@ -10,7 +10,7 @@
#include "retro-core-view.h"
#include "retro-gl-display-private.h"
-#include "retro-controller-codes.h"
+#include "retro-controller-codes-private.h"
#include "retro-core-view-controller-private.h"
#include "retro-input-private.h"
#include "retro-keyboard-private.h"
diff --git a/retro-gtk/retro-key-joypad-mapping.c b/retro-gtk/retro-key-joypad-mapping.c
index fc5b91ad..4a6a2dae 100644
--- a/retro-gtk/retro-key-joypad-mapping.c
+++ b/retro-gtk/retro-key-joypad-mapping.c
@@ -10,6 +10,7 @@
#include "retro-key-joypad-mapping.h"
#include <linux/input-event-codes.h>
+#include "retro-controller-codes-private.h"
static guint16 DEFAULT_KEY_JOYPAD_BUTTON_MAPPING[RETRO_JOYPAD_ID_COUNT] = {
KEY_S,
diff --git a/shared/retro-controller-codes-private.h b/shared/retro-controller-codes-private.h
new file mode 100644
index 00000000..c83cd7b7
--- /dev/null
+++ b/shared/retro-controller-codes-private.h
@@ -0,0 +1,20 @@
+// This file is part of retro-gtk. License: GPL-3.0+.
+
+#pragma once
+
+#if !defined(__RETRO_GTK_INSIDE__) && !defined(RETRO_GTK_COMPILATION)
+# error "Only <retro-gtk.h> can be included directly."
+#endif
+
+#include "retro-controller-codes.h"
+
+G_BEGIN_DECLS
+
+#define RETRO_ANALOG_ID_COUNT (RETRO_ANALOG_ID_Y + 1)
+#define RETRO_ANALOG_INDEX_COUNT (RETRO_ANALOG_INDEX_RIGHT + 1)
+#define RETRO_JOYPAD_ID_COUNT (RETRO_JOYPAD_ID_R3 + 1)
+#define RETRO_LIGHTGUN_ID_COUNT (RETRO_LIGHTGUN_ID_START + 1)
+#define RETRO_MOUSE_ID_COUNT (RETRO_MOUSE_ID_HORIZ_WHEELDOWN + 1)
+#define RETRO_POINTER_ID_COUNT (RETRO_POINTER_ID_PRESSED + 1)
+
+G_END_DECLS
diff --git a/shared/retro-controller-codes.c b/shared/retro-controller-codes.c
index 803b35af..ef6b4db6 100644
--- a/shared/retro-controller-codes.c
+++ b/shared/retro-controller-codes.c
@@ -8,7 +8,7 @@
*/
#include <linux/input-event-codes.h>
-#include "retro-controller-codes.h"
+#include "retro-controller-codes-private.h"
static guint16 RETRO_JOYPAD_ID_EVENT_CODE_MAPPING[RETRO_JOYPAD_ID_COUNT] = {
BTN_A,
diff --git a/shared/retro-controller-codes.h b/shared/retro-controller-codes.h
index 043061f7..f6f63248 100644
--- a/shared/retro-controller-codes.h
+++ b/shared/retro-controller-codes.h
@@ -32,7 +32,6 @@ GType retro_joypad_id_get_type (void) G_GNUC_CONST;
* @RETRO_JOYPAD_ID_R2: the second right shoulder button
* @RETRO_JOYPAD_ID_L3: the left thumb button
* @RETRO_JOYPAD_ID_R3: the right thumb button
- * @RETRO_JOYPAD_ID_COUNT: the number of ids
*
* Represents the buttons for the Libretro gamepad. The available buttons are
* the same as the W3C Standard Gamepad, the SDL GameController and many other
@@ -59,7 +58,6 @@ typedef enum
RETRO_JOYPAD_ID_R2,
RETRO_JOYPAD_ID_L3,
RETRO_JOYPAD_ID_R3,
- RETRO_JOYPAD_ID_COUNT,
} RetroJoypadId;
guint16 retro_joypad_id_to_button_code (RetroJoypadId joypad_id);
@@ -80,7 +78,6 @@ GType retro_mouse_id_get_type (void) G_GNUC_CONST;
* @RETRO_MOUSE_ID_MIDDLE: the middle button of a mouse
* @RETRO_MOUSE_ID_HORIZ_WHEELUP: the horizontal up direction of a mouse wheel
* @RETRO_MOUSE_ID_HORIZ_WHEELDOWN: the horizontal down direction of a mouse wheel
- * @RETRO_MOUSE_ID_COUNT: the number of ids
*
* Represents the inputs for the Libretro mouse.
*/
@@ -95,7 +92,6 @@ typedef enum
RETRO_MOUSE_ID_MIDDLE,
RETRO_MOUSE_ID_HORIZ_WHEELUP,
RETRO_MOUSE_ID_HORIZ_WHEELDOWN,
- RETRO_MOUSE_ID_COUNT,
} RetroMouseId;
#define RETRO_TYPE_LIGHTGUN_ID (retro_lightgun_id_get_type ())
@@ -111,7 +107,6 @@ GType retro_lightgun_id_get_type (void) G_GNUC_CONST;
* @RETRO_LIGHTGUN_ID_TURBO: the turbo button of a lightgun
* @RETRO_LIGHTGUN_ID_PAUSE: the pause button of a lightgun
* @RETRO_LIGHTGUN_ID_START: the start button of a lightgun
- * @RETRO_LIGHTGUN_ID_COUNT: the number of ids
*
* Represents the inputs for the Libretro lightgun.
*/
@@ -124,7 +119,6 @@ typedef enum
RETRO_LIGHTGUN_ID_TURBO,
RETRO_LIGHTGUN_ID_PAUSE,
RETRO_LIGHTGUN_ID_START,
- RETRO_LIGHTGUN_ID_COUNT,
} RetroLightgunId;
#define RETRO_TYPE_ANALOG_ID (retro_analog_id_get_type ())
@@ -135,7 +129,6 @@ GType retro_analog_id_get_type (void) G_GNUC_CONST;
* RetroAnalogId:
* @RETRO_ANALOG_ID_X: the X axis of an analog stick
* @RETRO_ANALOG_ID_Y: the Y axis of an analog stick
- * @RETRO_ANALOG_ID_COUNT: the number of ids
*
* Represents the axes of the analog sticks for the Libretro gamepad.
*/
@@ -143,7 +136,6 @@ typedef enum
{
RETRO_ANALOG_ID_X,
RETRO_ANALOG_ID_Y,
- RETRO_ANALOG_ID_COUNT,
} RetroAnalogId;
#define RETRO_TYPE_ANALOG_INDEX (retro_analog_index_get_type ())
@@ -154,7 +146,6 @@ GType retro_analog_index_get_type (void) G_GNUC_CONST;
* RetroAnalogIndex:
* @RETRO_ANALOG_INDEX_LEFT: the left analog stick
* @RETRO_ANALOG_INDEX_RIGHT: the right analog stick
- * @RETRO_ANALOG_INDEX_COUNT: the number of indexes
*
* Represents the analog sticks for the Libretro gamepad.
*/
@@ -162,7 +153,6 @@ typedef enum
{
RETRO_ANALOG_INDEX_LEFT,
RETRO_ANALOG_INDEX_RIGHT,
- RETRO_ANALOG_INDEX_COUNT,
} RetroAnalogIndex;
#define RETRO_TYPE_POINTER_ID (retro_pointer_id_get_type ())
@@ -174,7 +164,6 @@ GType retro_pointer_id_get_type (void) G_GNUC_CONST;
* @RETRO_POINTER_ID_X: the X axis of a pointer
* @RETRO_POINTER_ID_Y: the Y axis of a pointer
* @RETRO_POINTER_ID_PRESSED: the pression of a pointer
- * @RETRO_POINTER_ID_COUNT: the number of ids
*
* Represents the inputs for the Libretro pointer.
*/
@@ -183,7 +172,6 @@ typedef enum
RETRO_POINTER_ID_X,
RETRO_POINTER_ID_Y,
RETRO_POINTER_ID_PRESSED,
- RETRO_POINTER_ID_COUNT,
} RetroPointerId;
G_END_DECLS
diff --git a/shared/retro-controller-state.c b/shared/retro-controller-state.c
index 292e1ae7..edc3331f 100644
--- a/shared/retro-controller-state.c
+++ b/shared/retro-controller-state.c
@@ -6,6 +6,7 @@
#include <errno.h>
#include <sys/mman.h>
#include <unistd.h>
+#include "retro-controller-codes-private.h"
#include "retro-controller-type.h"
#include "retro-input-private.h"
diff --git a/shared/retro-controller-type.c b/shared/retro-controller-type.c
index 1a847344..401b2bf8 100644
--- a/shared/retro-controller-type.c
+++ b/shared/retro-controller-type.c
@@ -9,7 +9,7 @@
#include "retro-controller-type.h"
-#include "retro-controller-codes.h"
+#include "retro-controller-codes-private.h"
#include "retro-keyboard-key-private.h"
int
diff --git a/shared/retro-input.c b/shared/retro-input.c
index f60a025c..d2932fee 100644
--- a/shared/retro-input.c
+++ b/shared/retro-input.c
@@ -18,6 +18,8 @@
#include "retro-input-private.h"
+#include "retro-controller-codes-private.h"
+
G_DEFINE_BOXED_TYPE (RetroInput, retro_input, retro_input_copy, retro_input_free)
/* Private */
diff --git a/tests/retro-test-controller.c b/tests/retro-test-controller.c
index 4c29f7ea..fb73f06a 100644
--- a/tests/retro-test-controller.c
+++ b/tests/retro-test-controller.c
@@ -20,8 +20,7 @@
#include "retro-test-controller.h"
-#define RETRO_ANALOG_ID_INDEX_COUNT 4
-#define RETRO_ANALOG_ID_INDEX(id, index) ((index << 1) | id)
+#define RETRO_ID_INDEX(id_count, id, index) (index * id_count + id)
#define RETRO_CONTROLLER_TYPE_COUNT (RETRO_CONTROLLER_TYPE_POINTER + 1)
#define RETRO_RUMBLE_EFFECT_COUNT (RETRO_RUMBLE_EFFECT_WEAK + 1)
@@ -72,10 +71,13 @@ retro_test_controller_get_input_state (RetroController *base,
case RETRO_CONTROLLER_TYPE_ANALOG: {
RetroAnalogId id;
RetroAnalogIndex index;
+ gint id_count;
if (!retro_input_get_analog (input, &id, &index))
return 0;
- return self->state[RETRO_CONTROLLER_TYPE_ANALOG][RETRO_ANALOG_ID_INDEX(id, index)];
+ id_count = retro_controller_type_get_id_count (RETRO_CONTROLLER_TYPE_ANALOG);
+
+ return self->state[RETRO_CONTROLLER_TYPE_ANALOG][RETRO_ID_INDEX (id_count, id, index)];
}
case RETRO_CONTROLLER_TYPE_POINTER: {
RetroPointerId id;
@@ -86,7 +88,6 @@ retro_test_controller_get_input_state (RetroController *base,
}
case RETRO_CONTROLLER_TYPE_NONE:
case RETRO_CONTROLLER_TYPE_KEYBOARD:
- case RETRO_CONTROLLER_TYPE_COUNT:
default:
return 0;
}
@@ -127,11 +128,16 @@ static void
retro_test_controller_finalize (GObject *object)
{
RetroTestController *self = RETRO_TEST_CONTROLLER (object);
- gsize i;
- for (i = 0; i < RETRO_CONTROLLER_TYPE_COUNT; i++)
- if (self->state[i] != NULL)
- g_free (self->state[i]);
+ for (RetroControllerType type = 0; type < RETRO_CONTROLLER_TYPE_COUNT; type++) {
+ if (type == RETRO_CONTROLLER_TYPE_NONE ||
+ type == RETRO_CONTROLLER_TYPE_KEYBOARD )
+ continue;
+
+ if (self->state[type] != NULL)
+ g_free (self->state[type]);
+ }
+
g_free (self->state);
G_OBJECT_CLASS (retro_test_controller_parent_class)->finalize (object);
@@ -149,11 +155,14 @@ static void
retro_test_controller_init (RetroTestController *self)
{
self->state = g_new0 (gint16 *, RETRO_CONTROLLER_TYPE_COUNT);
- self->state[RETRO_CONTROLLER_TYPE_JOYPAD] = g_new0 (gint16, RETRO_JOYPAD_ID_COUNT);
- self->state[RETRO_CONTROLLER_TYPE_MOUSE] = g_new0 (gint16, RETRO_MOUSE_ID_COUNT);
- self->state[RETRO_CONTROLLER_TYPE_LIGHTGUN] = g_new0 (gint16, RETRO_LIGHTGUN_ID_COUNT);
- self->state[RETRO_CONTROLLER_TYPE_ANALOG] = g_new0 (gint16, RETRO_ANALOG_ID_INDEX_COUNT);
- self->state[RETRO_CONTROLLER_TYPE_POINTER] = g_new0 (gint16, RETRO_POINTER_ID_COUNT);
+ for (RetroControllerType type = 0; type < RETRO_CONTROLLER_TYPE_COUNT; type++) {
+ if (type == RETRO_CONTROLLER_TYPE_NONE ||
+ type == RETRO_CONTROLLER_TYPE_KEYBOARD)
+ continue;
+
+ gint i = retro_controller_type_get_id_count (type) * retro_controller_type_get_index_count (type);
+ self->state[type] = g_new0 (gint16, i);
+ }
}
static void
@@ -182,61 +191,40 @@ retro_test_controller_new (RetroControllerType controller_type)
void
retro_test_controller_reset (RetroTestController *self)
{
- memset (self->state[RETRO_CONTROLLER_TYPE_JOYPAD], 0, RETRO_JOYPAD_ID_COUNT * sizeof (gint16));
- memset (self->state[RETRO_CONTROLLER_TYPE_MOUSE], 0, RETRO_MOUSE_ID_COUNT * sizeof (gint16));
- memset (self->state[RETRO_CONTROLLER_TYPE_LIGHTGUN], 0, RETRO_LIGHTGUN_ID_COUNT * sizeof (gint16));
- memset (self->state[RETRO_CONTROLLER_TYPE_ANALOG], 0, RETRO_ANALOG_ID_INDEX_COUNT * sizeof (gint16));
- memset (self->state[RETRO_CONTROLLER_TYPE_POINTER], 0, RETRO_POINTER_ID_COUNT * sizeof (gint16));
+ for (RetroControllerType type = 0; type < RETRO_CONTROLLER_TYPE_COUNT; type++) {
+ if (type == RETRO_CONTROLLER_TYPE_NONE ||
+ type == RETRO_CONTROLLER_TYPE_KEYBOARD)
+ continue;
+
+ gint i = retro_controller_type_get_id_count (type) * retro_controller_type_get_index_count (type);
+ memset (self->state[type], 0, i * sizeof (gint16));
+ }
}
void
retro_test_controller_set_input_state (RetroTestController *self,
RetroControllerState *state)
{
+ RetroControllerType type;
+ gint id_count, index_count;
+
g_return_if_fail (self != NULL);
- switch (state->type & RETRO_CONTROLLER_TYPE_TYPE_MASK) {
- case RETRO_CONTROLLER_TYPE_JOYPAD:
- if (state->id < RETRO_JOYPAD_ID_COUNT) {
- self->state[RETRO_CONTROLLER_TYPE_JOYPAD][state->id] = state->value;
- retro_controller_emit_state_changed (RETRO_CONTROLLER (self));
- }
-
- break;
- case RETRO_CONTROLLER_TYPE_MOUSE:
- if (state->id < RETRO_MOUSE_ID_COUNT) {
- self->state[RETRO_CONTROLLER_TYPE_MOUSE][state->id] = state->value;
- retro_controller_emit_state_changed (RETRO_CONTROLLER (self));
- }
-
- break;
- case RETRO_CONTROLLER_TYPE_LIGHTGUN:
- if (state->id < RETRO_LIGHTGUN_ID_COUNT) {
- self->state[RETRO_CONTROLLER_TYPE_LIGHTGUN][state->id] = state->value;
- retro_controller_emit_state_changed (RETRO_CONTROLLER (self));
- }
-
- break;
- case RETRO_CONTROLLER_TYPE_ANALOG:
- if (state->id < RETRO_ANALOG_ID_COUNT && state->index < RETRO_ANALOG_INDEX_COUNT) {
- self->state[RETRO_CONTROLLER_TYPE_ANALOG][RETRO_ANALOG_ID_INDEX (state->id, state->index)] =
state->value;
- retro_controller_emit_state_changed (RETRO_CONTROLLER (self));
- }
-
- break;
- case RETRO_CONTROLLER_TYPE_POINTER:
- if (state->id < RETRO_POINTER_ID_COUNT) {
- self->state[RETRO_CONTROLLER_TYPE_POINTER][state->id] = state->value;
- retro_controller_emit_state_changed (RETRO_CONTROLLER (self));
- }
-
- break;
- case RETRO_CONTROLLER_TYPE_NONE:
- case RETRO_CONTROLLER_TYPE_KEYBOARD:
- case RETRO_CONTROLLER_TYPE_COUNT:
- default:
- break;
- }
+ type = state->type & RETRO_CONTROLLER_TYPE_TYPE_MASK;
+
+ if (type == RETRO_CONTROLLER_TYPE_NONE ||
+ type == RETRO_CONTROLLER_TYPE_KEYBOARD ||
+ type >= RETRO_CONTROLLER_TYPE_COUNT)
+ return;
+
+ id_count = retro_controller_type_get_id_count (type);
+ index_count = retro_controller_type_get_index_count (type);
+
+ if (state->id >= id_count || state->index >= index_count)
+ return;
+
+ self->state[type][RETRO_ID_INDEX (id_count, state->id, state->index)] = state->value;
+ retro_controller_emit_state_changed (RETRO_CONTROLLER (self));
}
guint16
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]