From c882e64653bf78f45ce607c22c5c9e6700a87534 Mon Sep 17 00:00:00 2001 From: denu8thell Date: Mon, 7 Aug 2017 21:59:05 -0500 Subject: [PATCH 01/11] Added button press lightup on overlay. input_overlay_add_inputs added, still need to implement dpad and analog visuals on overlay. Also still needs to be restructured so input_overlay_post_poll is only called once. --- input/input_driver.c | 12 ++++++++++- input/input_overlay.c | 49 ++++++++++++++++++++++++++++++++++++++++--- input/input_overlay.h | 10 +++++++++ 3 files changed, 67 insertions(+), 4 deletions(-) diff --git a/input/input_driver.c b/input/input_driver.c index 68e2f4a9a1..72e18e7523 100644 --- a/input/input_driver.c +++ b/input/input_driver.c @@ -413,12 +413,22 @@ void input_poll(void) return; #ifdef HAVE_OVERLAY - if (overlay_ptr && input_overlay_is_alive(overlay_ptr)) + if (overlay_ptr && input_overlay_is_alive(overlay_ptr)){ input_poll_overlay( overlay_ptr, settings->floats.input_overlay_opacity, settings->uints.input_analog_dpad_mode[0], input_driver_axis_threshold); + + rarch_joypad_info_t joypad_info; + //TODO: Make this work for an arbitrary joypad, set up in the settings + joypad_info.axis_threshold = input_driver_axis_threshold; + joypad_info.joy_idx = settings->uints.input_joypad_map[0]; + joypad_info.auto_binds = input_autoconf_binds[joypad_info.joy_idx]; + input_overlay_add_inputs(overlay_ptr, &joypad_info, libretro_input_binds, 0, + RETRO_DEVICE_JOYPAD, settings->uints.input_analog_dpad_mode[0]); + + } #endif #ifdef HAVE_COMMAND diff --git a/input/input_overlay.c b/input/input_overlay.c index 5cb48e6c50..b287c27e78 100644 --- a/input/input_overlay.c +++ b/input/input_overlay.c @@ -24,6 +24,7 @@ #ifdef HAVE_CONFIG_H #include "../config.h" #endif +#include "../configuration.h" #ifdef HAVE_MENU #include "../menu/menu_driver.h" @@ -31,8 +32,6 @@ #include "../verbosity.h" #include "../gfx/video_driver.h" - -#include "input_driver.h" #include "input_overlay.h" #define OVERLAY_GET_KEY(state, key) (((state)->keys[(key) / 32] >> ((key) % 32)) & 1) @@ -573,6 +572,7 @@ void input_poll_overlay(input_overlay_t *ol, float opacity, unsigned analog_dpad rarch_joypad_info_t joypad_info; input_overlay_state_t old_key_state; unsigned i, j, device; + settings_t *settings = config_get_ptr(); uint16_t key_mod = 0; bool polled = false; input_overlay_state_t *ol_state = &ol->overlay_state; @@ -702,7 +702,7 @@ void input_poll_overlay(input_overlay_t *ol, float opacity, unsigned analog_dpad default: break; } - + if (polled) input_overlay_post_poll(ol, opacity); else @@ -746,3 +746,46 @@ void input_state_overlay(input_overlay_t *ol, int16_t *ret, } } +void input_overlay_add_inputs(input_overlay_t *ol, rarch_joypad_info_t *joy_info, const struct retro_keybind **keybinds, + unsigned port, unsigned device, unsigned analog_dpad_mode) +{ + int i; + uint64_t mask; + int id; + //Only do joypad stuff for now + if(device == RETRO_DEVICE_JOYPAD){ + input_overlay_state_t *ol_state = &ol->overlay_state; + for(i = 0; i < ol->active->size; i++) + { + overlay_desc_t *desc = &(ol->active->descs[i]); + switch(desc->type) + { + case OVERLAY_TYPE_BUTTONS: + //Get the button ID + mask = desc->key_mask; + id = RETRO_DEVICE_ID_JOYPAD_B-1; + while(mask > 0){ + id+=1; + mask = mask >> 1; + } + if(current_input->input_state(current_input_data, *joy_info, + keybinds, + port, device, joy_info->joy_idx, id)){ + RARCH_LOG_OUTPUT("pressed button %d\n", id); + desc->updated = true; + } + break; + case OVERLAY_TYPE_ANALOG_LEFT: + break; + case OVERLAY_TYPE_ANALOG_RIGHT: + break; + case OVERLAY_TYPE_KEYBOARD: + break; + default: + break; + } + } + } + settings_t *settings = config_get_ptr(); + input_overlay_post_poll(ol, settings->floats.input_overlay_opacity); +} diff --git a/input/input_overlay.h b/input/input_overlay.h index 93f3c83e91..f16ea9a603 100644 --- a/input/input_overlay.h +++ b/input/input_overlay.h @@ -24,6 +24,8 @@ #include #include +#include "input_driver.h" + RETRO_BEGIN_DECLS #define BOX_RADIAL 0x18df06d2U @@ -242,6 +244,14 @@ void input_poll_overlay(input_overlay_t *ol, float opacity, unsigned analog_dpad void input_state_overlay(input_overlay_t *ol, int16_t *ret, unsigned port, unsigned device, unsigned idx, unsigned id); +/** + * input_overlay_add_inputs: + * @ol : pointer to overlay + * + * Adds inputs from current_input to the overlay, so it's displayed + */ +void input_overlay_add_inputs(input_overlay_t *ol, rarch_joypad_info_t *joy_info, const struct retro_keybind **keybinds, + unsigned port, unsigned device, unsigned analog_dpad_mode); bool input_overlay_key_pressed(input_overlay_t *ol, int key); From 3d4e36455d110d467dce7f46fc5e31dcc17a4898 Mon Sep 17 00:00:00 2001 From: denu8thell Date: Mon, 7 Aug 2017 22:22:48 -0500 Subject: [PATCH 02/11] use input_state instead of current_input->input_state. --- input/input_overlay.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/input/input_overlay.c b/input/input_overlay.c index b287c27e78..806c738d44 100644 --- a/input/input_overlay.c +++ b/input/input_overlay.c @@ -768,10 +768,7 @@ void input_overlay_add_inputs(input_overlay_t *ol, rarch_joypad_info_t *joy_info id+=1; mask = mask >> 1; } - if(current_input->input_state(current_input_data, *joy_info, - keybinds, - port, device, joy_info->joy_idx, id)){ - RARCH_LOG_OUTPUT("pressed button %d\n", id); + if(input_state(port, device, 0, id)){ desc->updated = true; } break; From 4c31d419202fdd0f6e355cacdf4c3773f1de8943 Mon Sep 17 00:00:00 2001 From: denu8thell Date: Tue, 8 Aug 2017 02:31:26 -0500 Subject: [PATCH 03/11] Moved input_overlay_add_inputs call out of input_driver.c, shortened arguments. --- input/input_driver.c | 11 ++----- input/input_overlay.c | 71 +++++++++++++++++++++++-------------------- input/input_overlay.h | 6 ++-- 3 files changed, 44 insertions(+), 44 deletions(-) diff --git a/input/input_driver.c b/input/input_driver.c index 72e18e7523..3e2e8b5a61 100644 --- a/input/input_driver.c +++ b/input/input_driver.c @@ -419,15 +419,10 @@ void input_poll(void) settings->floats.input_overlay_opacity, settings->uints.input_analog_dpad_mode[0], input_driver_axis_threshold); - - rarch_joypad_info_t joypad_info; //TODO: Make this work for an arbitrary joypad, set up in the settings - joypad_info.axis_threshold = input_driver_axis_threshold; - joypad_info.joy_idx = settings->uints.input_joypad_map[0]; - joypad_info.auto_binds = input_autoconf_binds[joypad_info.joy_idx]; - input_overlay_add_inputs(overlay_ptr, &joypad_info, libretro_input_binds, 0, - RETRO_DEVICE_JOYPAD, settings->uints.input_analog_dpad_mode[0]); - + /*input_overlay_add_inputs(overlay_ptr, 0, + settings->uints.input_analog_dpad_mode[0]); + */ } #endif diff --git a/input/input_overlay.c b/input/input_overlay.c index 806c738d44..637e30a4f1 100644 --- a/input/input_overlay.c +++ b/input/input_overlay.c @@ -575,6 +575,7 @@ void input_poll_overlay(input_overlay_t *ol, float opacity, unsigned analog_dpad settings_t *settings = config_get_ptr(); uint16_t key_mod = 0; bool polled = false; + bool button_pressed = false; input_overlay_state_t *ol_state = &ol->overlay_state; if (!ol_state) @@ -703,7 +704,8 @@ void input_poll_overlay(input_overlay_t *ol, float opacity, unsigned analog_dpad break; } - if (polled) + button_pressed = input_overlay_add_inputs(ol, 0, analog_dpad_mode); + if (button_pressed || polled) input_overlay_post_poll(ol, opacity); else input_overlay_poll_clear(ol, opacity); @@ -746,43 +748,46 @@ void input_state_overlay(input_overlay_t *ol, int16_t *ret, } } -void input_overlay_add_inputs(input_overlay_t *ol, rarch_joypad_info_t *joy_info, const struct retro_keybind **keybinds, - unsigned port, unsigned device, unsigned analog_dpad_mode) +bool input_overlay_add_inputs(input_overlay_t *ol, + unsigned port, unsigned analog_dpad_mode) { int i; uint64_t mask; int id; - //Only do joypad stuff for now - if(device == RETRO_DEVICE_JOYPAD){ - input_overlay_state_t *ol_state = &ol->overlay_state; - for(i = 0; i < ol->active->size; i++) + bool button_pressed = false; + + input_overlay_state_t *ol_state = &ol->overlay_state; + if(!ol_state) + return false; + + for(i = 0; i < ol->active->size; i++) + { + overlay_desc_t *desc = &(ol->active->descs[i]); + switch(desc->type) { - overlay_desc_t *desc = &(ol->active->descs[i]); - switch(desc->type) - { - case OVERLAY_TYPE_BUTTONS: - //Get the button ID - mask = desc->key_mask; - id = RETRO_DEVICE_ID_JOYPAD_B-1; - while(mask > 0){ - id+=1; - mask = mask >> 1; - } - if(input_state(port, device, 0, id)){ - desc->updated = true; - } - break; - case OVERLAY_TYPE_ANALOG_LEFT: - break; - case OVERLAY_TYPE_ANALOG_RIGHT: - break; - case OVERLAY_TYPE_KEYBOARD: - break; - default: - break; - } + case OVERLAY_TYPE_BUTTONS: + //Get the button ID + mask = desc->key_mask; + id = RETRO_DEVICE_ID_JOYPAD_B-1; + while(mask > 0){ + id+=1; + mask = mask >> 1; + } + //light up the button if pressed + if(input_state(port, RETRO_DEVICE_JOYPAD, 0, id)){ + desc->updated = true; + button_pressed = true; + } + break; + case OVERLAY_TYPE_ANALOG_LEFT: + case OVERLAY_TYPE_ANALOG_RIGHT: + break; + case OVERLAY_TYPE_KEYBOARD: + break; + default: + break; } } - settings_t *settings = config_get_ptr(); - input_overlay_post_poll(ol, settings->floats.input_overlay_opacity); + + return button_pressed; } diff --git a/input/input_overlay.h b/input/input_overlay.h index f16ea9a603..96fe4f9ef4 100644 --- a/input/input_overlay.h +++ b/input/input_overlay.h @@ -248,10 +248,10 @@ void input_state_overlay(input_overlay_t *ol, * input_overlay_add_inputs: * @ol : pointer to overlay * - * Adds inputs from current_input to the overlay, so it's displayed + * Adds inputs from current_input to the overlay, so it's displayed + * returns true if an input that is pressed will change the overlay */ -void input_overlay_add_inputs(input_overlay_t *ol, rarch_joypad_info_t *joy_info, const struct retro_keybind **keybinds, - unsigned port, unsigned device, unsigned analog_dpad_mode); +bool input_overlay_add_inputs(input_overlay_t *ol, unsigned port, unsigned analog_dpad_mode); bool input_overlay_key_pressed(input_overlay_t *ol, int key); From 0df4186191d729f7991fc292483610faa347525e Mon Sep 17 00:00:00 2001 From: denu8thell Date: Tue, 8 Aug 2017 02:48:46 -0500 Subject: [PATCH 04/11] reduce scope of input_overlay_add_inputs to file. --- input/input_overlay.c | 13 +++++++++++-- input/input_overlay.h | 8 -------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/input/input_overlay.c b/input/input_overlay.c index 637e30a4f1..ac3f5d4a0a 100644 --- a/input/input_overlay.c +++ b/input/input_overlay.c @@ -68,6 +68,8 @@ struct input_overlay input_overlay_t *overlay_ptr = NULL; +static bool input_overlay_add_inputs(input_overlay_t *ol, + unsigned port, unsigned analog_dpad_mode); /** * input_overlay_scale: * @ol : Overlay handle. @@ -747,8 +749,15 @@ void input_state_overlay(input_overlay_t *ol, int16_t *ret, break; } } - -bool input_overlay_add_inputs(input_overlay_t *ol, +/** + * input_overlay_add_inputs: + * @ol : pointer to overlay + * @port : the user to show the inputs of + * + * Adds inputs from current_input to the overlay, so it's displayed + * returns true if an input that is pressed will change the overlay + */ +static bool input_overlay_add_inputs(input_overlay_t *ol, unsigned port, unsigned analog_dpad_mode) { int i; diff --git a/input/input_overlay.h b/input/input_overlay.h index 96fe4f9ef4..af4305702a 100644 --- a/input/input_overlay.h +++ b/input/input_overlay.h @@ -244,14 +244,6 @@ void input_poll_overlay(input_overlay_t *ol, float opacity, unsigned analog_dpad void input_state_overlay(input_overlay_t *ol, int16_t *ret, unsigned port, unsigned device, unsigned idx, unsigned id); -/** - * input_overlay_add_inputs: - * @ol : pointer to overlay - * - * Adds inputs from current_input to the overlay, so it's displayed - * returns true if an input that is pressed will change the overlay - */ -bool input_overlay_add_inputs(input_overlay_t *ol, unsigned port, unsigned analog_dpad_mode); bool input_overlay_key_pressed(input_overlay_t *ol, int key); From cc06b8b62e7469b698d23b422bef3a73e576c9e3 Mon Sep 17 00:00:00 2001 From: denu8thell Date: Tue, 8 Aug 2017 05:10:44 -0500 Subject: [PATCH 05/11] Added analog overlay support to input_overlay_add_inputs. --- input/input_overlay.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/input/input_overlay.c b/input/input_overlay.c index ac3f5d4a0a..37b84cc966 100644 --- a/input/input_overlay.c +++ b/input/input_overlay.c @@ -790,6 +790,22 @@ static bool input_overlay_add_inputs(input_overlay_t *ol, break; case OVERLAY_TYPE_ANALOG_LEFT: case OVERLAY_TYPE_ANALOG_RIGHT: + { + float analog_x, analog_y; + float dx, dy; + unsigned int index = (desc->type == OVERLAY_TYPE_ANALOG_RIGHT) ? + RETRO_DEVICE_INDEX_ANALOG_RIGHT : RETRO_DEVICE_INDEX_ANALOG_LEFT; + + analog_x = input_state(port, RETRO_DEVICE_ANALOG, index, RETRO_DEVICE_ID_ANALOG_X); + analog_y = input_state(port, RETRO_DEVICE_ANALOG, index, RETRO_DEVICE_ID_ANALOG_Y); + dx = (analog_x/0x8000)*(desc->range_x/2); + dy = (analog_y/0x8000)*(desc->range_y/2); + + desc->delta_x = dx; + desc->delta_y = dy; + + button_pressed = true; + } break; case OVERLAY_TYPE_KEYBOARD: break; From 23b2e4488ae1f9e4e788eaf5ac33a25e75f78327 Mon Sep 17 00:00:00 2001 From: denu8thell Date: Tue, 8 Aug 2017 05:32:34 -0500 Subject: [PATCH 06/11] Add keyboard overlay support to input_overlay_add_inputs. --- input/input_overlay.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/input/input_overlay.c b/input/input_overlay.c index 37b84cc966..9285cbb9d0 100644 --- a/input/input_overlay.c +++ b/input/input_overlay.c @@ -784,8 +784,8 @@ static bool input_overlay_add_inputs(input_overlay_t *ol, } //light up the button if pressed if(input_state(port, RETRO_DEVICE_JOYPAD, 0, id)){ - desc->updated = true; button_pressed = true; + desc->updated = true; } break; case OVERLAY_TYPE_ANALOG_LEFT: @@ -803,11 +803,19 @@ static bool input_overlay_add_inputs(input_overlay_t *ol, desc->delta_x = dx; desc->delta_y = dy; - - button_pressed = true; + /*Maybe use some option here instead orf 0, only display + changes greater than some magnitude. + */ + if((dx*dx) > 0 || (dy*dy) > 0) + button_pressed = true; } break; case OVERLAY_TYPE_KEYBOARD: + if(input_state(port, RETRO_DEVICE_KEYBOARD, 0, desc->key_mask)){ + desc->updated = true; + button_pressed = true; + } + break; default: break; From 4ed715d0f391fc729ffb40126de3618645ee84a6 Mon Sep 17 00:00:00 2001 From: denu8thell Date: Tue, 8 Aug 2017 05:39:18 -0500 Subject: [PATCH 07/11] Remove commented code in input_driver.c --- input/input_driver.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/input/input_driver.c b/input/input_driver.c index 3e2e8b5a61..68e2f4a9a1 100644 --- a/input/input_driver.c +++ b/input/input_driver.c @@ -413,17 +413,12 @@ void input_poll(void) return; #ifdef HAVE_OVERLAY - if (overlay_ptr && input_overlay_is_alive(overlay_ptr)){ + if (overlay_ptr && input_overlay_is_alive(overlay_ptr)) input_poll_overlay( overlay_ptr, settings->floats.input_overlay_opacity, settings->uints.input_analog_dpad_mode[0], input_driver_axis_threshold); - //TODO: Make this work for an arbitrary joypad, set up in the settings - /*input_overlay_add_inputs(overlay_ptr, 0, - settings->uints.input_analog_dpad_mode[0]); - */ - } #endif #ifdef HAVE_COMMAND From f0606d60d2568211d96caef8a1955d0f32216713 Mon Sep 17 00:00:00 2001 From: denu8thell Date: Tue, 8 Aug 2017 06:50:39 -0500 Subject: [PATCH 08/11] Add option and menu setting for viewing inputs on overlay. --- configuration.c | 1 + configuration.h | 1 + input/input_overlay.c | 8 ++++---- intl/msg_hash_lbl.h | 2 ++ intl/msg_hash_us.c | 5 +++++ intl/msg_hash_us.h | 2 ++ menu/menu_displaylist.c | 3 +++ menu/menu_setting.c | 16 ++++++++++++++++ msg_hash.h | 1 + 9 files changed, 35 insertions(+), 4 deletions(-) diff --git a/configuration.c b/configuration.c index 5bebae629e..4ec67a48c5 100644 --- a/configuration.c +++ b/configuration.c @@ -1226,6 +1226,7 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings, #ifdef HAVE_OVERLAY SETTING_BOOL("input_overlay_enable", &settings->bools.input_overlay_enable, true, config_overlay_enable_default(), false); SETTING_BOOL("input_overlay_enable_autopreferred", &settings->bools.input_overlay_enable_autopreferred, true, true, false); + SETTING_BOOL("input_overlay_show_physical_inputs", &settings->bools.input_overlay_show_physical_inputs, true, false, false); SETTING_BOOL("input_overlay_hide_in_menu", &settings->bools.input_overlay_hide_in_menu, true, overlay_hide_in_menu, false); #endif #ifdef HAVE_COMMAND diff --git a/configuration.h b/configuration.h index f5dddca28a..4942464c76 100644 --- a/configuration.h +++ b/configuration.h @@ -88,6 +88,7 @@ typedef struct settings bool input_overlay_enable; bool input_overlay_enable_autopreferred; bool input_overlay_hide_in_menu; + bool input_overlay_show_physical_inputs; bool input_descriptor_label_show; bool input_descriptor_hide_unbound; bool input_all_users_control_menu; diff --git a/input/input_overlay.c b/input/input_overlay.c index 9285cbb9d0..ae656751dc 100644 --- a/input/input_overlay.c +++ b/input/input_overlay.c @@ -705,8 +705,9 @@ void input_poll_overlay(input_overlay_t *ol, float opacity, unsigned analog_dpad default: break; } - - button_pressed = input_overlay_add_inputs(ol, 0, analog_dpad_mode); + if(settings->bools.input_overlay_show_physical_inputs){ + button_pressed = input_overlay_add_inputs(ol, 0, analog_dpad_mode); + } if (button_pressed || polled) input_overlay_post_poll(ol, opacity); else @@ -803,7 +804,7 @@ static bool input_overlay_add_inputs(input_overlay_t *ol, desc->delta_x = dx; desc->delta_y = dy; - /*Maybe use some option here instead orf 0, only display + /*Maybe use some option here instead of 0, only display changes greater than some magnitude. */ if((dx*dx) > 0 || (dy*dy) > 0) @@ -815,7 +816,6 @@ static bool input_overlay_add_inputs(input_overlay_t *ol, desc->updated = true; button_pressed = true; } - break; default: break; diff --git a/intl/msg_hash_lbl.h b/intl/msg_hash_lbl.h index 8b25495454..9305c1b051 100644 --- a/intl/msg_hash_lbl.h +++ b/intl/msg_hash_lbl.h @@ -479,6 +479,8 @@ MSG_HASH(MENU_ENUM_LABEL_INPUT_OVERLAY_ENABLE, "input_overlay_enable") MSG_HASH(MENU_ENUM_LABEL_INPUT_OVERLAY_HIDE_IN_MENU, "overlay_hide_in_menu") +MSG_HASH(MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS, + "overlay_show_physical_inputs") MSG_HASH(MENU_ENUM_LABEL_INPUT_PLAYER_ANALOG_DPAD_MODE, "input_player%u_analog_dpad_mode") MSG_HASH(MENU_ENUM_LABEL_INPUT_POLL_TYPE_BEHAVIOR, diff --git a/intl/msg_hash_us.c b/intl/msg_hash_us.c index 45f4d19841..52ad99010b 100644 --- a/intl/msg_hash_us.c +++ b/intl/msg_hash_us.c @@ -572,6 +572,11 @@ int menu_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len) { "Hide the current overlay from appearing \n" "inside the menu."); break; + case MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS: + snprintf(s, len, + "Show controller button presses on \n" + "the onscreen overlay."); + break; case MENU_ENUM_LABEL_OVERLAY_PRESET: snprintf(s, len, "Path to input overlay."); diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index 04e4a5ba52..74e7f3f9c0 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -827,6 +827,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_ENABLE, "Display Overlay") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_HIDE_IN_MENU, "Hide Overlay In Menu") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS, + "Show Inputs On Overlay") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR, "Poll Type Behavior") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR_EARLY, diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 5e5538b6c4..ced6c3b1fa 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -5007,6 +5007,9 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_INPUT_OVERLAY_HIDE_IN_MENU, PARSE_ONLY_BOOL, false); + menu_displaylist_parse_settings_enum(menu, info, + MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS, + PARSE_ONLY_BOOL, false); menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_OVERLAY_PRESET, PARSE_ONLY_PATH, false); diff --git a/menu/menu_setting.c b/menu/menu_setting.c index cbeaf4012d..7664b20c6f 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -4891,6 +4891,22 @@ static bool setting_append_list( ); (*list)[list_info->index - 1].change_handler = overlay_enable_toggle_change_handler; + CONFIG_BOOL( + list, list_info, + &settings->bools.input_overlay_show_physical_inputs, + MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS, + MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS, + false, + MENU_ENUM_LABEL_VALUE_OFF, + MENU_ENUM_LABEL_VALUE_ON, + &group_info, + &subgroup_info, + parent_group, + general_write_handler, + general_read_handler, + SD_FLAG_NONE + ); + CONFIG_PATH( list, list_info, settings->paths.path_overlay, diff --git a/msg_hash.h b/msg_hash.h index de83221198..044d5a48e6 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -598,6 +598,7 @@ enum msg_hash_enums MENU_LABEL(INPUT_OSK_OVERLAY_ENABLE), MENU_LABEL(INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO), MENU_LABEL(INPUT_OVERLAY_HIDE_IN_MENU), + MENU_LABEL(INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS), MENU_LABEL(INPUT_KEYBOARD_GAMEPAD_MAPPING_TYPE), MENU_LABEL(INPUT_SMALL_KEYBOARD_ENABLE), MENU_LABEL(INPUT_TOUCH_ENABLE), From 8e69a348e6c7e2d89ec95ebac2182bb4f6616064 Mon Sep 17 00:00:00 2001 From: denu8thell Date: Tue, 8 Aug 2017 07:49:02 -0500 Subject: [PATCH 09/11] Add support for buttons that are multiple inputs. --- input/input_overlay.c | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/input/input_overlay.c b/input/input_overlay.c index ae656751dc..a364c1629a 100644 --- a/input/input_overlay.c +++ b/input/input_overlay.c @@ -765,7 +765,7 @@ static bool input_overlay_add_inputs(input_overlay_t *ol, uint64_t mask; int id; bool button_pressed = false; - + bool current_button_pressed; input_overlay_state_t *ol_state = &ol->overlay_state; if(!ol_state) return false; @@ -776,18 +776,31 @@ static bool input_overlay_add_inputs(input_overlay_t *ol, switch(desc->type) { case OVERLAY_TYPE_BUTTONS: - //Get the button ID mask = desc->key_mask; - id = RETRO_DEVICE_ID_JOYPAD_B-1; - while(mask > 0){ - id+=1; - mask = mask >> 1; - } - //light up the button if pressed - if(input_state(port, RETRO_DEVICE_JOYPAD, 0, id)){ - button_pressed = true; - desc->updated = true; + id = RETRO_DEVICE_ID_JOYPAD_B; + //Need to check all bits in the mask, multiple ones can be pressed + current_button_pressed = false; + while(mask){ + //Get the next button ID + while(mask && (mask & 1) == 0){ + id+=1; + mask = mask >> 1; + } + //light up the button if pressed + if(input_state(port, RETRO_DEVICE_JOYPAD, 0, id)){ + current_button_pressed = true; + desc->updated = true; + + id+=1; + mask = mask >> 1; + }else{ + //One of the buttons not pressed + current_button_pressed = false; + desc->updated = false; + break; + } } + button_pressed = button_pressed || current_button_pressed; break; case OVERLAY_TYPE_ANALOG_LEFT: case OVERLAY_TYPE_ANALOG_RIGHT: From c07380293e99281fe2e15c6ccaa2f9ae676bd881 Mon Sep 17 00:00:00 2001 From: denu8thell Date: Tue, 8 Aug 2017 09:05:03 -0500 Subject: [PATCH 10/11] Added sublabel to Show Inputs On Overlay --- intl/msg_hash_us.c | 2 +- intl/msg_hash_us.h | 2 ++ menu/cbs/menu_cbs_sublabel.c | 4 ++++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/intl/msg_hash_us.c b/intl/msg_hash_us.c index 52ad99010b..369187449f 100644 --- a/intl/msg_hash_us.c +++ b/intl/msg_hash_us.c @@ -574,7 +574,7 @@ int menu_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len) { break; case MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS: snprintf(s, len, - "Show controller button presses on \n" + "Show keyboard/controller button presses on \n" "the onscreen overlay."); break; case MENU_ENUM_LABEL_OVERLAY_PRESET: diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index 74e7f3f9c0..8498fc8db2 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -2514,6 +2514,8 @@ MSG_HASH(MENU_ENUM_SUBLABEL_VIDEO_FONT_SIZE, "Specify the font size in points.") MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_OVERLAY_HIDE_IN_MENU, "Hide the overlay while inside the menu, and show it again when exiting the menu.") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS, + "Show keyboard/controller inputs on the onscreen overlay.") MSG_HASH( MENU_ENUM_SUBLABEL_CONTENT_COLLECTION_LIST, "Scanned content will appear here." diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c index cde6bd4a4c..5e067b8e41 100644 --- a/menu/cbs/menu_cbs_sublabel.c +++ b/menu/cbs/menu_cbs_sublabel.c @@ -225,6 +225,7 @@ default_sublabel_macro(action_bind_sublabel_sort_savefiles_enable, MENU_ default_sublabel_macro(action_bind_sublabel_sort_savestates_enable, MENU_ENUM_SUBLABEL_SORT_SAVESTATES_ENABLE) default_sublabel_macro(action_bind_sublabel_netplay_client_swap_input, MENU_ENUM_SUBLABEL_NETPLAY_CLIENT_SWAP_INPUT) default_sublabel_macro(action_bind_sublabel_core_updater_buildbot_url, MENU_ENUM_SUBLABEL_CORE_UPDATER_BUILDBOT_URL) +default_sublabel_macro(action_bind_sublabel_input_overlay_show_physical_inputs, MENU_ENUM_SUBLABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS) default_sublabel_macro(action_bind_sublabel_core_updater_buildbot_assets_url, MENU_ENUM_SUBLABEL_BUILDBOT_ASSETS_URL) default_sublabel_macro(action_bind_sublabel_core_updater_auto_extract_archive, MENU_ENUM_SUBLABEL_CORE_UPDATER_AUTO_EXTRACT_ARCHIVE) default_sublabel_macro(action_bind_sublabel_netplay_refresh_rooms, MENU_ENUM_SUBLABEL_NETPLAY_REFRESH_ROOMS) @@ -949,6 +950,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_INPUT_OVERLAY_HIDE_IN_MENU: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_input_overlay_hide_in_menu); break; + case MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_input_overlay_show_physical_inputs); + break; case MENU_ENUM_LABEL_VIDEO_FONT_SIZE: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_video_font_size); break; From c5b36320df47e154fcc9e13387391dbaf0a1ee5b Mon Sep 17 00:00:00 2001 From: denu8thell Date: Tue, 8 Aug 2017 09:56:27 -0500 Subject: [PATCH 11/11] Added option to change controller port to listen to for showing overlay input. --- configuration.c | 1 + configuration.h | 2 ++ input/input_overlay.c | 2 +- intl/msg_hash_lbl.h | 2 ++ intl/msg_hash_us.c | 5 +++++ intl/msg_hash_us.h | 4 ++++ menu/cbs/menu_cbs_sublabel.c | 4 ++++ menu/menu_displaylist.c | 3 +++ menu/menu_setting.c | 14 +++++++++++++- msg_hash.h | 1 + 10 files changed, 36 insertions(+), 2 deletions(-) diff --git a/configuration.c b/configuration.c index 4ec67a48c5..62bb385401 100644 --- a/configuration.c +++ b/configuration.c @@ -1374,6 +1374,7 @@ static struct config_uint_setting *populate_settings_uint(settings_t *settings, #endif SETTING_UINT("bundle_assets_extract_version_current", &settings->uints.bundle_assets_extract_version_current, true, 0, false); SETTING_UINT("bundle_assets_extract_last_version", &settings->uints.bundle_assets_extract_last_version, true, 0, false); + SETTING_UINT("input_overlay_show_physical_inputs_port", &settings->uints.input_overlay_show_physical_inputs_port, true, 0, false); *size = count; diff --git a/configuration.h b/configuration.h index 4942464c76..9018d965dd 100644 --- a/configuration.h +++ b/configuration.h @@ -329,6 +329,8 @@ typedef struct settings unsigned camera_width; unsigned camera_height; + + unsigned input_overlay_show_physical_inputs_port; } uints; struct diff --git a/input/input_overlay.c b/input/input_overlay.c index a364c1629a..f67a8432ac 100644 --- a/input/input_overlay.c +++ b/input/input_overlay.c @@ -706,7 +706,7 @@ void input_poll_overlay(input_overlay_t *ol, float opacity, unsigned analog_dpad break; } if(settings->bools.input_overlay_show_physical_inputs){ - button_pressed = input_overlay_add_inputs(ol, 0, analog_dpad_mode); + button_pressed = input_overlay_add_inputs(ol, settings->uints.input_overlay_show_physical_inputs_port, analog_dpad_mode); } if (button_pressed || polled) input_overlay_post_poll(ol, opacity); diff --git a/intl/msg_hash_lbl.h b/intl/msg_hash_lbl.h index 9305c1b051..bb670bbbf1 100644 --- a/intl/msg_hash_lbl.h +++ b/intl/msg_hash_lbl.h @@ -481,6 +481,8 @@ MSG_HASH(MENU_ENUM_LABEL_INPUT_OVERLAY_HIDE_IN_MENU, "overlay_hide_in_menu") MSG_HASH(MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS, "overlay_show_physical_inputs") +MSG_HASH(MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS_PORT, + "overlay_show_physical_inputs_port") MSG_HASH(MENU_ENUM_LABEL_INPUT_PLAYER_ANALOG_DPAD_MODE, "input_player%u_analog_dpad_mode") MSG_HASH(MENU_ENUM_LABEL_INPUT_POLL_TYPE_BEHAVIOR, diff --git a/intl/msg_hash_us.c b/intl/msg_hash_us.c index 369187449f..61b32fe093 100644 --- a/intl/msg_hash_us.c +++ b/intl/msg_hash_us.c @@ -577,6 +577,11 @@ int menu_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len) { "Show keyboard/controller button presses on \n" "the onscreen overlay."); break; + case MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS_PORT: + snprintf(s, len, + "Select the port to listen for controller input \n" + "to display on the onscreen overlay."); + break; case MENU_ENUM_LABEL_OVERLAY_PRESET: snprintf(s, len, "Path to input overlay."); diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index 8498fc8db2..b647b2a679 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -829,6 +829,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_HIDE_IN_MENU, "Hide Overlay In Menu") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS, "Show Inputs On Overlay") +MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS_PORT, + "Show Inputs Listen Port") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR, "Poll Type Behavior") MSG_HASH(MENU_ENUM_LABEL_VALUE_INPUT_POLL_TYPE_BEHAVIOR_EARLY, @@ -2516,6 +2518,8 @@ MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_OVERLAY_HIDE_IN_MENU, "Hide the overlay while inside the menu, and show it again when exiting the menu.") MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS, "Show keyboard/controller inputs on the onscreen overlay.") +MSG_HASH(MENU_ENUM_SUBLABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS_PORT, + "Select the port for the overlay to listen to if Show Inputs On Overlay is enabled.") MSG_HASH( MENU_ENUM_SUBLABEL_CONTENT_COLLECTION_LIST, "Scanned content will appear here." diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c index 5e067b8e41..6cc0bd459a 100644 --- a/menu/cbs/menu_cbs_sublabel.c +++ b/menu/cbs/menu_cbs_sublabel.c @@ -226,6 +226,7 @@ default_sublabel_macro(action_bind_sublabel_sort_savestates_enable, MENU_ default_sublabel_macro(action_bind_sublabel_netplay_client_swap_input, MENU_ENUM_SUBLABEL_NETPLAY_CLIENT_SWAP_INPUT) default_sublabel_macro(action_bind_sublabel_core_updater_buildbot_url, MENU_ENUM_SUBLABEL_CORE_UPDATER_BUILDBOT_URL) default_sublabel_macro(action_bind_sublabel_input_overlay_show_physical_inputs, MENU_ENUM_SUBLABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS) +default_sublabel_macro(action_bind_sublabel_input_overlay_show_physical_inputs_port, MENU_ENUM_SUBLABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS_PORT) default_sublabel_macro(action_bind_sublabel_core_updater_buildbot_assets_url, MENU_ENUM_SUBLABEL_BUILDBOT_ASSETS_URL) default_sublabel_macro(action_bind_sublabel_core_updater_auto_extract_archive, MENU_ENUM_SUBLABEL_CORE_UPDATER_AUTO_EXTRACT_ARCHIVE) default_sublabel_macro(action_bind_sublabel_netplay_refresh_rooms, MENU_ENUM_SUBLABEL_NETPLAY_REFRESH_ROOMS) @@ -953,6 +954,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_input_overlay_show_physical_inputs); break; + case MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS_PORT: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_input_overlay_show_physical_inputs_port); + break; case MENU_ENUM_LABEL_VIDEO_FONT_SIZE: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_video_font_size); break; diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index ced6c3b1fa..f96521cac2 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -5010,6 +5010,9 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS, PARSE_ONLY_BOOL, false); + menu_displaylist_parse_settings_enum(menu, info, + MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS_PORT, + PARSE_ONLY_UINT, false); menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_OVERLAY_PRESET, PARSE_ONLY_PATH, false); diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 7664b20c6f..1f9f377b39 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -4906,7 +4906,19 @@ static bool setting_append_list( general_read_handler, SD_FLAG_NONE ); - + CONFIG_UINT( + list, list_info, + &settings->uints.input_overlay_show_physical_inputs_port, + MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS_PORT, + MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS_PORT, + 0, + &group_info, + &subgroup_info, + parent_group, + general_write_handler, + general_read_handler + ); + menu_settings_list_current_add_range(list, list_info, 0, MAX_USERS - 1, 1, true, true); CONFIG_PATH( list, list_info, settings->paths.path_overlay, diff --git a/msg_hash.h b/msg_hash.h index 044d5a48e6..4b37e9923a 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -599,6 +599,7 @@ enum msg_hash_enums MENU_LABEL(INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO), MENU_LABEL(INPUT_OVERLAY_HIDE_IN_MENU), MENU_LABEL(INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS), + MENU_LABEL(INPUT_OVERLAY_SHOW_PHYSICAL_INPUTS_PORT), MENU_LABEL(INPUT_KEYBOARD_GAMEPAD_MAPPING_TYPE), MENU_LABEL(INPUT_SMALL_KEYBOARD_ENABLE), MENU_LABEL(INPUT_TOUCH_ENABLE),