diff --git a/input/input_overlay.c b/input/input_overlay.c index 94611c110c..131db8feb6 100644 --- a/input/input_overlay.c +++ b/input/input_overlay.c @@ -705,7 +705,9 @@ void input_poll_overlay(input_overlay_t *ol, float opacity, unsigned analog_dpad default: break; } - if(settings->bools.input_overlay_show_physical_inputs){ + + if(settings->bools.input_overlay_show_physical_inputs) + { button_pressed = input_overlay_add_inputs(ol, settings->uints.input_overlay_show_physical_inputs_port, analog_dpad_mode); } if (button_pressed || polled) @@ -760,81 +762,88 @@ void input_state_overlay(input_overlay_t *ol, int16_t *ret, */ static bool input_overlay_add_inputs(input_overlay_t *ol, unsigned port, unsigned analog_dpad_mode) -{ - unsigned i; - uint64_t mask; - int id; - bool button_pressed = false; - bool current_button_pressed = false; - input_overlay_state_t *ol_state = &ol->overlay_state; +{ + unsigned i; + uint64_t mask; + int id; + bool button_pressed = false; + bool current_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++) + 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: + mask = desc->key_mask; + 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) { - case OVERLAY_TYPE_BUTTONS: - mask = desc->key_mask; - 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; + /* 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: - { - 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; - /*Maybe use some option here instead of 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; + 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: + { + 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; - return button_pressed; + 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; + /*Maybe use some option here instead of 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; + } + } + + return button_pressed; }