input: introduce in_update_pointer
authornotaz <notasas@gmail.com>
Thu, 15 May 2025 22:26:12 +0000 (01:26 +0300)
committernotaz <notasas@gmail.com>
Fri, 16 May 2025 13:12:14 +0000 (16:12 +0300)
update_analog is meant for reading analog axes, so new function is
needed for what's implemented in in_sdl.

in_sdl.c
input.c
input.h

index df94b91..780e3cd 100644 (file)
--- a/in_sdl.c
+++ b/in_sdl.c
@@ -486,14 +486,14 @@ static int in_sdl_update_kbd(void *drv_data, const int *binds, int *result)
        return b;
 }
 
-static int in_sdl_update_analog(void *drv_data, int axis_id, int *result)
+static int in_sdl_update_pointer(void *drv_data, int id, int *result)
 {
        struct in_sdl_state *state = drv_data;
        int max;
 
        *result = 0;
 
-       switch (axis_id) {
+       switch (id) {
        // absolute position, clipped at the window/screen border
        case 0: if ((max = state->revent.resize.w))
                        *result = state->mevent.motion.x * 2*1024/max - 1024;
@@ -608,7 +608,7 @@ static const in_drv_t in_sdl_drv = {
        .get_key_names   = in_sdl_get_key_names,
        .update          = in_sdl_update,
        .update_kbd      = in_sdl_update_kbd,
-       .update_analog   = in_sdl_update_analog,
+       .update_pointer  = in_sdl_update_pointer,
        .update_keycode  = in_sdl_update_keycode,
        .menu_translate  = in_sdl_menu_translate,
        .clean_binds     = in_sdl_clean_binds,
diff --git a/input.c b/input.c
index b170a47..2fb1b10 100644 (file)
--- a/input.c
+++ b/input.c
@@ -350,6 +350,16 @@ int in_update_analog(int dev_id, int axis_id, int *result)
        return DRV(dev->drv_id).update_analog(dev->drv_data, axis_id, result);
 }
 
+int in_update_pointer(int dev_id, int id, int *result)
+{
+       in_dev_t *dev = get_dev(dev_id);
+
+       if (dev == NULL || !dev->probed)
+               return -1;
+
+       return DRV(dev->drv_id).update_pointer(dev->drv_data, id, result);
+}
+
 static int in_update_kc_async(int *dev_id_out, int *is_down_out, int timeout_ms)
 {
        int i, is_down, result;
@@ -1056,6 +1066,7 @@ static int  in_def_clean_binds(void *drv_data, int *b, int *db) { return 1; }
 static int  in_def_get_config(void *drv_data, int what, int *val) { return -1; }
 static int  in_def_set_config(void *drv_data, int what, int val) { return -1; }
 static int  in_def_update_analog(void *drv_data, int axis_id, int *result) { return -1; }
+static int  in_def_update_pointer(void *drv_data, int id, int *result) { return -1; }
 static int  in_def_update_keycode(void *drv_data, int *is_down) { return 0; }
 static int  in_def_menu_translate(void *drv_data, int keycode, char *ccode) { return 0; }
 static int  in_def_get_key_code(const char *key_name) { return -1; }
@@ -1086,6 +1097,7 @@ int in_register_driver(const in_drv_t *drv,
        CHECK_ADD_STUB(new_drivers[in_driver_count], get_config);
        CHECK_ADD_STUB(new_drivers[in_driver_count], set_config);
        CHECK_ADD_STUB(new_drivers[in_driver_count], update_analog);
+       CHECK_ADD_STUB(new_drivers[in_driver_count], update_pointer);
        CHECK_ADD_STUB(new_drivers[in_driver_count], update_keycode);
        CHECK_ADD_STUB(new_drivers[in_driver_count], menu_translate);
        CHECK_ADD_STUB(new_drivers[in_driver_count], get_key_code);
diff --git a/input.h b/input.h
index 6a56bc1..ee1dfd4 100644 (file)
--- a/input.h
+++ b/input.h
@@ -89,6 +89,7 @@ struct InputDriver {
        int  (*update)(void *drv_data, const int *binds, int *result);
        int  (*update_kbd)(void *drv_data, const int *binds, int *result);
        int  (*update_analog)(void *drv_data, int axis_id, int *result);
+       int  (*update_pointer)(void *drv_data, int axis_id, int *result);
        /* return -1 on no event, -2 on error */
        int  (*update_keycode)(void *drv_data, int *is_down);
        int  (*menu_translate)(void *drv_data, int keycode, char *charcode);
@@ -135,6 +136,7 @@ void in_init(void);
 void in_probe(void);
 int  in_update(int *result);
 int  in_update_analog(int dev_id, int axis_id, int *value);
+int  in_update_pointer(int dev_id, int id, int *result);
 int  in_update_keycode(int *dev_id, int *is_down, char *charcode, int timeout_ms);
 int  in_update_kbd(int *result);
 int  in_menu_wait_any(char *charcode, int timeout_ms);