mirror of
https://github.com/libretro/RetroArch
synced 2025-02-02 05:54:16 +00:00
Overlays: Add eightway area types (#14565)
- New descriptors: 'dpad_area' and 'abxy_area' - Each has a diagonal sensitivity setting, 100% being 8-way symmetry - Buttons can be redefined in the cfg file E.g. This would create a d-pad area, then redefine it to use analog directions: overlay0_desc0 = "dpad_area,0.85,0.57,rect,0.166228,0.295516" overlay0_desc0_up = "r_y_minus" overlay0_desc0_down = "r_y_plus" overlay0_desc0_left = "r_x_minus" overlay0_desc0_right = "r_x_plus"
This commit is contained in:
parent
6a9eea5958
commit
2de52baf74
@ -136,6 +136,8 @@ enum event_command
|
|||||||
CMD_EVENT_OVERLAY_SET_SCALE_FACTOR,
|
CMD_EVENT_OVERLAY_SET_SCALE_FACTOR,
|
||||||
/* Sets current alpha modulation for overlay. */
|
/* Sets current alpha modulation for overlay. */
|
||||||
CMD_EVENT_OVERLAY_SET_ALPHA_MOD,
|
CMD_EVENT_OVERLAY_SET_ALPHA_MOD,
|
||||||
|
/* Sets diagonal sensitivities of overlay eightway areas. */
|
||||||
|
CMD_EVENT_OVERLAY_SET_EIGHTWAY_DIAGONAL_SENSITIVITY,
|
||||||
/* Cycle to next overlay. */
|
/* Cycle to next overlay. */
|
||||||
CMD_EVENT_OVERLAY_NEXT,
|
CMD_EVENT_OVERLAY_NEXT,
|
||||||
/* Deinitializes overlay. */
|
/* Deinitializes overlay. */
|
||||||
|
@ -889,6 +889,9 @@ static const unsigned input_backtouch_toggle = false;
|
|||||||
|
|
||||||
#define DEFAULT_OVERLAY_SHOW_INPUTS_PORT 0
|
#define DEFAULT_OVERLAY_SHOW_INPUTS_PORT 0
|
||||||
|
|
||||||
|
#define DEFAULT_OVERLAY_DPAD_DIAGONAL_SENSITIVITY 80
|
||||||
|
#define DEFAULT_OVERLAY_ABXY_DIAGONAL_SENSITIVITY 50
|
||||||
|
|
||||||
#if defined(ANDROID) || defined(_WIN32) || defined(HAVE_STEAM)
|
#if defined(ANDROID) || defined(_WIN32) || defined(HAVE_STEAM)
|
||||||
#define DEFAULT_MENU_SWAP_OK_CANCEL_BUTTONS true
|
#define DEFAULT_MENU_SWAP_OK_CANCEL_BUTTONS true
|
||||||
#else
|
#else
|
||||||
|
@ -2305,6 +2305,8 @@ static struct config_uint_setting *populate_settings_uint(
|
|||||||
#if defined(HAVE_OVERLAY)
|
#if defined(HAVE_OVERLAY)
|
||||||
SETTING_UINT("input_overlay_show_inputs", &settings->uints.input_overlay_show_inputs, true, DEFAULT_OVERLAY_SHOW_INPUTS, false);
|
SETTING_UINT("input_overlay_show_inputs", &settings->uints.input_overlay_show_inputs, true, DEFAULT_OVERLAY_SHOW_INPUTS, false);
|
||||||
SETTING_UINT("input_overlay_show_inputs_port", &settings->uints.input_overlay_show_inputs_port, true, DEFAULT_OVERLAY_SHOW_INPUTS_PORT, false);
|
SETTING_UINT("input_overlay_show_inputs_port", &settings->uints.input_overlay_show_inputs_port, true, DEFAULT_OVERLAY_SHOW_INPUTS_PORT, false);
|
||||||
|
SETTING_UINT("input_overlay_dpad_diagonal_sensitivity", &settings->uints.input_overlay_dpad_diagonal_sensitivity, true, DEFAULT_OVERLAY_DPAD_DIAGONAL_SENSITIVITY, false);
|
||||||
|
SETTING_UINT("input_overlay_abxy_diagonal_sensitivity", &settings->uints.input_overlay_abxy_diagonal_sensitivity, true, DEFAULT_OVERLAY_ABXY_DIAGONAL_SENSITIVITY, false);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SETTING_UINT("video_msg_bgcolor_red", &settings->uints.video_msg_bgcolor_red, true, DEFAULT_MESSAGE_BGCOLOR_RED, false);
|
SETTING_UINT("video_msg_bgcolor_red", &settings->uints.video_msg_bgcolor_red, true, DEFAULT_MESSAGE_BGCOLOR_RED, false);
|
||||||
|
@ -299,8 +299,12 @@ typedef struct settings
|
|||||||
unsigned camera_width;
|
unsigned camera_width;
|
||||||
unsigned camera_height;
|
unsigned camera_height;
|
||||||
|
|
||||||
|
#ifdef HAVE_OVERLAY
|
||||||
unsigned input_overlay_show_inputs;
|
unsigned input_overlay_show_inputs;
|
||||||
unsigned input_overlay_show_inputs_port;
|
unsigned input_overlay_show_inputs_port;
|
||||||
|
unsigned input_overlay_dpad_diagonal_sensitivity;
|
||||||
|
unsigned input_overlay_abxy_diagonal_sensitivity;
|
||||||
|
#endif
|
||||||
|
|
||||||
unsigned run_ahead_frames;
|
unsigned run_ahead_frames;
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
* with RetroArch. If not, see <http://www.gnu.org/licenses/>.
|
* with RetroArch. If not, see <http://www.gnu.org/licenses/>.
|
||||||
**/
|
**/
|
||||||
|
|
||||||
|
#define _USE_MATH_DEFINES
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <string/stdstring.h>
|
#include <string/stdstring.h>
|
||||||
#include <encodings/utf.h>
|
#include <encodings/utf.h>
|
||||||
@ -1220,6 +1221,10 @@ static bool input_overlay_add_inputs_inner(overlay_desc_t *desc,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case OVERLAY_TYPE_DPAD_AREA:
|
||||||
|
case OVERLAY_TYPE_ABXY_AREA:
|
||||||
|
return desc->updated;
|
||||||
|
|
||||||
case OVERLAY_TYPE_KEYBOARD:
|
case OVERLAY_TYPE_KEYBOARD:
|
||||||
if (ol_state ?
|
if (ol_state ?
|
||||||
OVERLAY_GET_KEY(ol_state, desc->retro_key_idx) :
|
OVERLAY_GET_KEY(ol_state, desc->retro_key_idx) :
|
||||||
@ -1257,6 +1262,120 @@ static bool input_overlay_add_inputs(input_overlay_t *ol,
|
|||||||
return button_pressed;
|
return button_pressed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void input_overlay_get_eightway_slope_limits(
|
||||||
|
const unsigned diagonal_sensitivity,
|
||||||
|
float* low_slope, float* high_slope)
|
||||||
|
{
|
||||||
|
/* Sensitivity setting is the relative size of diagonal zones to
|
||||||
|
* cardinal zones. Convert to fraction of 45 deg span (max diagonal).
|
||||||
|
*/
|
||||||
|
float f = 2.0f * diagonal_sensitivity
|
||||||
|
/ (100.0f + diagonal_sensitivity);
|
||||||
|
|
||||||
|
float high_angle /* 67.5 deg max */
|
||||||
|
= (f * (0.375*M_PI) + (1.0f - f) * (0.25*M_PI));
|
||||||
|
float low_angle /* 22.5 deg min */
|
||||||
|
= (f * (0.125*M_PI) + (1.0f - f) * (0.25*M_PI));
|
||||||
|
|
||||||
|
*high_slope = tan(high_angle);
|
||||||
|
*low_slope = tan(low_angle);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* input_overlay_set_eightway_diagonal_sensitivity:
|
||||||
|
*
|
||||||
|
* Gets the slope limits defining each eightway type's diagonal zones.
|
||||||
|
*/
|
||||||
|
void input_overlay_set_eightway_diagonal_sensitivity()
|
||||||
|
{
|
||||||
|
settings_t *settings = config_get_ptr();
|
||||||
|
input_driver_state_t *input_st = input_state_get_ptr();
|
||||||
|
|
||||||
|
input_overlay_get_eightway_slope_limits(
|
||||||
|
settings->uints.input_overlay_dpad_diagonal_sensitivity,
|
||||||
|
&input_st->overlay_eightway_dpad_slopes[0],
|
||||||
|
&input_st->overlay_eightway_dpad_slopes[1]);
|
||||||
|
|
||||||
|
input_overlay_get_eightway_slope_limits(
|
||||||
|
settings->uints.input_overlay_abxy_diagonal_sensitivity,
|
||||||
|
&input_st->overlay_eightway_abxy_slopes[0],
|
||||||
|
&input_st->overlay_eightway_abxy_slopes[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* input_overlay_get_eightway_state:
|
||||||
|
* @desc : overlay descriptor handle for an eightway area
|
||||||
|
* @out : current input state to be OR'd with eightway state
|
||||||
|
* @x_dist : X offset from eightway area center
|
||||||
|
* @y_dist : Y offset from eightway area center
|
||||||
|
*
|
||||||
|
* Gets the eightway area's current input state based on (@x_dist, @y_dist).
|
||||||
|
**/
|
||||||
|
static INLINE void input_overlay_get_eightway_state(
|
||||||
|
const struct overlay_desc *desc, input_bits_t *out,
|
||||||
|
float x_dist, float y_dist)
|
||||||
|
{
|
||||||
|
overlay_eightway_config_t *eightway = desc->eightway_config;
|
||||||
|
uint32_t *data;
|
||||||
|
float abs_slope;
|
||||||
|
|
||||||
|
x_dist /= desc->range_x;
|
||||||
|
y_dist /= desc->range_y;
|
||||||
|
|
||||||
|
if (x_dist == 0.0f)
|
||||||
|
x_dist = 0.0001f;
|
||||||
|
abs_slope = fabs(y_dist / x_dist);
|
||||||
|
|
||||||
|
if (x_dist > 0.0f)
|
||||||
|
{
|
||||||
|
if (y_dist < 0.0f)
|
||||||
|
{
|
||||||
|
/* Q1 */
|
||||||
|
if (abs_slope > *eightway->slope_high)
|
||||||
|
data = eightway->up.data;
|
||||||
|
else if (abs_slope < *eightway->slope_low)
|
||||||
|
data = eightway->right.data;
|
||||||
|
else
|
||||||
|
data = eightway->up_right.data;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Q4 */
|
||||||
|
if (abs_slope > *eightway->slope_high)
|
||||||
|
data = eightway->down.data;
|
||||||
|
else if (abs_slope < *eightway->slope_low)
|
||||||
|
data = eightway->right.data;
|
||||||
|
else
|
||||||
|
data = eightway->down_right.data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (y_dist < 0.0f)
|
||||||
|
{
|
||||||
|
/* Q2 */
|
||||||
|
if (abs_slope > *eightway->slope_high)
|
||||||
|
data = eightway->up.data;
|
||||||
|
else if (abs_slope < *eightway->slope_low)
|
||||||
|
data = eightway->left.data;
|
||||||
|
else
|
||||||
|
data = eightway->up_left.data;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Q3 */
|
||||||
|
if (abs_slope > *eightway->slope_high)
|
||||||
|
data = eightway->down.data;
|
||||||
|
else if (abs_slope < *eightway->slope_low)
|
||||||
|
data = eightway->left.data;
|
||||||
|
else
|
||||||
|
data = eightway->down_left.data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bits_or_bits(out->data, data, CUSTOM_BINDS_U32_COUNT);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* inside_hitbox:
|
* inside_hitbox:
|
||||||
* @desc : Overlay descriptor handle.
|
* @desc : Overlay descriptor handle.
|
||||||
@ -1347,6 +1466,11 @@ void input_overlay_poll(
|
|||||||
if (desc->retro_key_idx < RETROK_LAST)
|
if (desc->retro_key_idx < RETROK_LAST)
|
||||||
OVERLAY_SET_KEY(out, desc->retro_key_idx);
|
OVERLAY_SET_KEY(out, desc->retro_key_idx);
|
||||||
break;
|
break;
|
||||||
|
case OVERLAY_TYPE_DPAD_AREA:
|
||||||
|
case OVERLAY_TYPE_ABXY_AREA:
|
||||||
|
input_overlay_get_eightway_state(
|
||||||
|
desc, &out->buttons, x_dist, y_dist);
|
||||||
|
break;
|
||||||
case OVERLAY_TYPE_ANALOG_RIGHT:
|
case OVERLAY_TYPE_ANALOG_RIGHT:
|
||||||
base = 2;
|
base = 2;
|
||||||
/* fall-through */
|
/* fall-through */
|
||||||
@ -1761,7 +1885,12 @@ void input_overlay_free_overlay(struct overlay *overlay)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
for (i = 0; i < overlay->size; i++)
|
for (i = 0; i < overlay->size; i++)
|
||||||
|
{
|
||||||
image_texture_free(&overlay->descs[i].image);
|
image_texture_free(&overlay->descs[i].image);
|
||||||
|
if (overlay->descs[i].eightway_config)
|
||||||
|
free(overlay->descs[i].eightway_config);
|
||||||
|
overlay->descs[i].eightway_config = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (overlay->load_images)
|
if (overlay->load_images)
|
||||||
free(overlay->load_images);
|
free(overlay->load_images);
|
||||||
@ -3365,9 +3494,16 @@ static void input_overlay_loaded(retro_task_t *task,
|
|||||||
if (data->overlay_enable)
|
if (data->overlay_enable)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_MENU
|
#ifdef HAVE_MENU
|
||||||
|
struct menu_state *menu_st = menu_state_get_ptr();
|
||||||
|
bool refresh = false;
|
||||||
|
|
||||||
|
/* Update menu entries */
|
||||||
|
menu_st->overlay_types = data->overlay_types;
|
||||||
|
menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh);
|
||||||
|
|
||||||
/* We can't display when the menu is up */
|
/* We can't display when the menu is up */
|
||||||
if ( data->hide_in_menu
|
if ( data->hide_in_menu
|
||||||
&& (menu_state_get_ptr()->flags & MENU_ST_FLAG_ALIVE))
|
&& (menu_st->flags & MENU_ST_FLAG_ALIVE))
|
||||||
goto abort_load;
|
goto abort_load;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -3433,6 +3569,8 @@ static void input_overlay_loaded(retro_task_t *task,
|
|||||||
input_overlay_enable,
|
input_overlay_enable,
|
||||||
input_st->overlay_ptr);
|
input_st->overlay_ptr);
|
||||||
|
|
||||||
|
input_overlay_set_eightway_diagonal_sensitivity();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
abort_load:
|
abort_load:
|
||||||
@ -3479,14 +3617,6 @@ void input_overlay_init(void)
|
|||||||
|
|
||||||
input_overlay_deinit();
|
input_overlay_deinit();
|
||||||
|
|
||||||
#ifdef HAVE_MENU
|
|
||||||
/* Cancel load if 'hide_in_menu' is enabled and
|
|
||||||
* menu is currently active */
|
|
||||||
if (overlay_hide_in_menu)
|
|
||||||
load_enabled = load_enabled && !(menu_state_get_ptr()->flags &
|
|
||||||
MENU_ST_FLAG_ALIVE);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Cancel load if 'hide_when_gamepad_connected' is
|
/* Cancel load if 'hide_when_gamepad_connected' is
|
||||||
* enabled and a gamepad is currently connected */
|
* enabled and a gamepad is currently connected */
|
||||||
if (overlay_hide_when_gamepad_connected)
|
if (overlay_hide_when_gamepad_connected)
|
||||||
|
@ -427,6 +427,8 @@ typedef struct
|
|||||||
#ifdef HAVE_OVERLAY
|
#ifdef HAVE_OVERLAY
|
||||||
input_overlay_t *overlay_ptr;
|
input_overlay_t *overlay_ptr;
|
||||||
enum overlay_visibility *overlay_visibility;
|
enum overlay_visibility *overlay_visibility;
|
||||||
|
float overlay_eightway_dpad_slopes[2];
|
||||||
|
float overlay_eightway_abxy_slopes[2];
|
||||||
#endif
|
#endif
|
||||||
uint16_t flags;
|
uint16_t flags;
|
||||||
#ifdef HAVE_NETWORKGAMEPAD
|
#ifdef HAVE_NETWORKGAMEPAD
|
||||||
|
@ -32,6 +32,8 @@
|
|||||||
|
|
||||||
#define MAX_VISIBILITY 32
|
#define MAX_VISIBILITY 32
|
||||||
|
|
||||||
|
#define CUSTOM_BINDS_U32_COUNT ((RARCH_CUSTOM_BIND_LIST_END - 1) / 32 + 1)
|
||||||
|
|
||||||
RETRO_BEGIN_DECLS
|
RETRO_BEGIN_DECLS
|
||||||
|
|
||||||
/* Overlay driver acts as a medium between input drivers
|
/* Overlay driver acts as a medium between input drivers
|
||||||
@ -68,6 +70,8 @@ enum overlay_type
|
|||||||
OVERLAY_TYPE_BUTTONS = 0,
|
OVERLAY_TYPE_BUTTONS = 0,
|
||||||
OVERLAY_TYPE_ANALOG_LEFT,
|
OVERLAY_TYPE_ANALOG_LEFT,
|
||||||
OVERLAY_TYPE_ANALOG_RIGHT,
|
OVERLAY_TYPE_ANALOG_RIGHT,
|
||||||
|
OVERLAY_TYPE_DPAD_AREA,
|
||||||
|
OVERLAY_TYPE_ABXY_AREA,
|
||||||
OVERLAY_TYPE_KEYBOARD
|
OVERLAY_TYPE_KEYBOARD
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -116,6 +120,23 @@ enum overlay_show_input_type
|
|||||||
OVERLAY_SHOW_INPUT_LAST
|
OVERLAY_SHOW_INPUT_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef struct overlay_eightway_config
|
||||||
|
{
|
||||||
|
input_bits_t up;
|
||||||
|
input_bits_t right;
|
||||||
|
input_bits_t down;
|
||||||
|
input_bits_t left;
|
||||||
|
|
||||||
|
input_bits_t up_right;
|
||||||
|
input_bits_t up_left;
|
||||||
|
input_bits_t down_right;
|
||||||
|
input_bits_t down_left;
|
||||||
|
|
||||||
|
/* diagonal sensitivity */
|
||||||
|
float* slope_high;
|
||||||
|
float* slope_low;
|
||||||
|
} overlay_eightway_config_t;
|
||||||
|
|
||||||
struct overlay_desc
|
struct overlay_desc
|
||||||
{
|
{
|
||||||
struct texture_image image;
|
struct texture_image image;
|
||||||
@ -152,6 +173,8 @@ struct overlay_desc
|
|||||||
/* This is a bit mask of all input binds to set with this overlay control */
|
/* This is a bit mask of all input binds to set with this overlay control */
|
||||||
input_bits_t button_mask;
|
input_bits_t button_mask;
|
||||||
|
|
||||||
|
overlay_eightway_config_t *eightway_config;
|
||||||
|
|
||||||
char next_index_name[64];
|
char next_index_name[64];
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -290,6 +313,7 @@ typedef struct
|
|||||||
bool overlay_enable;
|
bool overlay_enable;
|
||||||
bool hide_in_menu;
|
bool hide_in_menu;
|
||||||
bool hide_when_gamepad_connected;
|
bool hide_when_gamepad_connected;
|
||||||
|
uint16_t overlay_types;
|
||||||
} overlay_task_data_t;
|
} overlay_task_data_t;
|
||||||
|
|
||||||
void input_overlay_free_overlay(struct overlay *overlay);
|
void input_overlay_free_overlay(struct overlay *overlay);
|
||||||
@ -387,6 +411,13 @@ enum overlay_visibility input_overlay_get_visibility(
|
|||||||
enum overlay_visibility *visibility,
|
enum overlay_visibility *visibility,
|
||||||
int overlay_idx);
|
int overlay_idx);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* input_overlay_set_eightway_diagonal_sensitivity:
|
||||||
|
*
|
||||||
|
* Gets the slope limits defining each eightway type's diagonal zones.
|
||||||
|
*/
|
||||||
|
void input_overlay_set_eightway_diagonal_sensitivity();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* input_overlay_free:
|
* input_overlay_free:
|
||||||
* @ol : Overlay handle.
|
* @ol : Overlay handle.
|
||||||
|
@ -1702,6 +1702,14 @@ MSG_HASH(
|
|||||||
MENU_ENUM_LABEL_INPUT_OVERLAY_AUTO_SCALE,
|
MENU_ENUM_LABEL_INPUT_OVERLAY_AUTO_SCALE,
|
||||||
"input_overlay_auto_scale"
|
"input_overlay_auto_scale"
|
||||||
)
|
)
|
||||||
|
MSG_HASH(
|
||||||
|
MENU_ENUM_LABEL_INPUT_OVERLAY_DPAD_DIAGONAL_SENSITIVITY,
|
||||||
|
"input_overlay_dpad_diagonal_sensitivity"
|
||||||
|
)
|
||||||
|
MSG_HASH(
|
||||||
|
MENU_ENUM_LABEL_INPUT_OVERLAY_ABXY_DIAGONAL_SENSITIVITY,
|
||||||
|
"input_overlay_abxy_diagonal_sensitivity"
|
||||||
|
)
|
||||||
MSG_HASH(
|
MSG_HASH(
|
||||||
MENU_ENUM_LABEL_INPUT_POLL_TYPE_BEHAVIOR,
|
MENU_ENUM_LABEL_INPUT_POLL_TYPE_BEHAVIOR,
|
||||||
"input_poll_type_behavior"
|
"input_poll_type_behavior"
|
||||||
|
@ -4046,6 +4046,22 @@ MSG_HASH(
|
|||||||
MENU_ENUM_SUBLABEL_INPUT_OVERLAY_AUTO_SCALE,
|
MENU_ENUM_SUBLABEL_INPUT_OVERLAY_AUTO_SCALE,
|
||||||
"Automatically adjust overlay scale and UI element spacing to match screen aspect ratio. Produces best results with controller overlays."
|
"Automatically adjust overlay scale and UI element spacing to match screen aspect ratio. Produces best results with controller overlays."
|
||||||
)
|
)
|
||||||
|
MSG_HASH(
|
||||||
|
MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_DPAD_DIAGONAL_SENSITIVITY,
|
||||||
|
"D-Pad Diagonal Sensitivity"
|
||||||
|
)
|
||||||
|
MSG_HASH(
|
||||||
|
MENU_ENUM_SUBLABEL_INPUT_OVERLAY_DPAD_DIAGONAL_SENSITIVITY,
|
||||||
|
"Adjust the size of diagonal zones. Set to 100% for 8-way symmetry."
|
||||||
|
)
|
||||||
|
MSG_HASH(
|
||||||
|
MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_ABXY_DIAGONAL_SENSITIVITY,
|
||||||
|
"ABXY Overlap Sensitivity"
|
||||||
|
)
|
||||||
|
MSG_HASH(
|
||||||
|
MENU_ENUM_SUBLABEL_INPUT_OVERLAY_ABXY_DIAGONAL_SENSITIVITY,
|
||||||
|
"Adjust the size of overlap zones in the face button diamond. Set to 100% for 8-way symmetry."
|
||||||
|
)
|
||||||
MSG_HASH(
|
MSG_HASH(
|
||||||
MENU_ENUM_LABEL_VALUE_OVERLAY,
|
MENU_ENUM_LABEL_VALUE_OVERLAY,
|
||||||
"Overlay"
|
"Overlay"
|
||||||
|
@ -607,6 +607,8 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_input_overlay_hide_when_gamepad_conn
|
|||||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_input_overlay_show_mouse_cursor, MENU_ENUM_SUBLABEL_INPUT_OVERLAY_SHOW_MOUSE_CURSOR)
|
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_input_overlay_show_mouse_cursor, MENU_ENUM_SUBLABEL_INPUT_OVERLAY_SHOW_MOUSE_CURSOR)
|
||||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_input_overlay_auto_rotate, MENU_ENUM_SUBLABEL_INPUT_OVERLAY_AUTO_ROTATE)
|
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_input_overlay_auto_rotate, MENU_ENUM_SUBLABEL_INPUT_OVERLAY_AUTO_ROTATE)
|
||||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_input_overlay_auto_scale, MENU_ENUM_SUBLABEL_INPUT_OVERLAY_AUTO_SCALE)
|
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_input_overlay_auto_scale, MENU_ENUM_SUBLABEL_INPUT_OVERLAY_AUTO_SCALE)
|
||||||
|
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_input_overlay_dpad_diag_sens, MENU_ENUM_SUBLABEL_INPUT_OVERLAY_DPAD_DIAGONAL_SENSITIVITY)
|
||||||
|
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_input_overlay_abxy_diag_sens, MENU_ENUM_SUBLABEL_INPUT_OVERLAY_ABXY_DIAGONAL_SENSITIVITY)
|
||||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_content_collection_list, MENU_ENUM_SUBLABEL_PLAYLISTS_TAB)
|
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_content_collection_list, MENU_ENUM_SUBLABEL_PLAYLISTS_TAB)
|
||||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_video_scale_integer, MENU_ENUM_SUBLABEL_VIDEO_SCALE_INTEGER)
|
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_video_scale_integer, MENU_ENUM_SUBLABEL_VIDEO_SCALE_INTEGER)
|
||||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_video_scale_integer_overscale, MENU_ENUM_SUBLABEL_VIDEO_SCALE_INTEGER_OVERSCALE)
|
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_video_scale_integer_overscale, MENU_ENUM_SUBLABEL_VIDEO_SCALE_INTEGER_OVERSCALE)
|
||||||
@ -3795,6 +3797,12 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
|
|||||||
case MENU_ENUM_LABEL_INPUT_OVERLAY_AUTO_SCALE:
|
case MENU_ENUM_LABEL_INPUT_OVERLAY_AUTO_SCALE:
|
||||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_input_overlay_auto_scale);
|
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_input_overlay_auto_scale);
|
||||||
break;
|
break;
|
||||||
|
case MENU_ENUM_LABEL_INPUT_OVERLAY_DPAD_DIAGONAL_SENSITIVITY:
|
||||||
|
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_input_overlay_dpad_diag_sens);
|
||||||
|
break;
|
||||||
|
case MENU_ENUM_LABEL_INPUT_OVERLAY_ABXY_DIAGONAL_SENSITIVITY:
|
||||||
|
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_input_overlay_abxy_diag_sens);
|
||||||
|
break;
|
||||||
case MENU_ENUM_LABEL_VIDEO_FONT_SIZE:
|
case MENU_ENUM_LABEL_VIDEO_FONT_SIZE:
|
||||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_video_font_size);
|
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_video_font_size);
|
||||||
break;
|
break;
|
||||||
|
@ -9017,6 +9017,7 @@ unsigned menu_displaylist_build_list(
|
|||||||
#if defined(HAVE_OVERLAY)
|
#if defined(HAVE_OVERLAY)
|
||||||
case DISPLAYLIST_ONSCREEN_OVERLAY_SETTINGS_LIST:
|
case DISPLAYLIST_ONSCREEN_OVERLAY_SETTINGS_LIST:
|
||||||
{
|
{
|
||||||
|
struct menu_state *menu_st = menu_state_get_ptr();
|
||||||
bool input_overlay_enable = settings->bools.input_overlay_enable;
|
bool input_overlay_enable = settings->bools.input_overlay_enable;
|
||||||
bool input_overlay_auto_scale = settings->bools.input_overlay_auto_scale;
|
bool input_overlay_auto_scale = settings->bools.input_overlay_auto_scale;
|
||||||
enum overlay_show_input_type
|
enum overlay_show_input_type
|
||||||
@ -9035,6 +9036,8 @@ unsigned menu_displaylist_build_list(
|
|||||||
{MENU_ENUM_LABEL_INPUT_OVERLAY_AUTO_SCALE, PARSE_ONLY_BOOL, false },
|
{MENU_ENUM_LABEL_INPUT_OVERLAY_AUTO_SCALE, PARSE_ONLY_BOOL, false },
|
||||||
{MENU_ENUM_LABEL_OVERLAY_PRESET, PARSE_ONLY_PATH, false },
|
{MENU_ENUM_LABEL_OVERLAY_PRESET, PARSE_ONLY_PATH, false },
|
||||||
{MENU_ENUM_LABEL_OVERLAY_OPACITY, PARSE_ONLY_FLOAT, false },
|
{MENU_ENUM_LABEL_OVERLAY_OPACITY, PARSE_ONLY_FLOAT, false },
|
||||||
|
{MENU_ENUM_LABEL_INPUT_OVERLAY_DPAD_DIAGONAL_SENSITIVITY, PARSE_ONLY_UINT, false },
|
||||||
|
{MENU_ENUM_LABEL_INPUT_OVERLAY_ABXY_DIAGONAL_SENSITIVITY, PARSE_ONLY_UINT, false },
|
||||||
{MENU_ENUM_LABEL_OVERLAY_SCALE_LANDSCAPE, PARSE_ONLY_FLOAT, false },
|
{MENU_ENUM_LABEL_OVERLAY_SCALE_LANDSCAPE, PARSE_ONLY_FLOAT, false },
|
||||||
{MENU_ENUM_LABEL_OVERLAY_ASPECT_ADJUST_LANDSCAPE, PARSE_ONLY_FLOAT, false },
|
{MENU_ENUM_LABEL_OVERLAY_ASPECT_ADJUST_LANDSCAPE, PARSE_ONLY_FLOAT, false },
|
||||||
{MENU_ENUM_LABEL_OVERLAY_X_SEPARATION_LANDSCAPE, PARSE_ONLY_FLOAT, false },
|
{MENU_ENUM_LABEL_OVERLAY_X_SEPARATION_LANDSCAPE, PARSE_ONLY_FLOAT, false },
|
||||||
@ -9086,6 +9089,16 @@ unsigned menu_displaylist_build_list(
|
|||||||
!input_overlay_auto_scale)
|
!input_overlay_auto_scale)
|
||||||
build_list[i].checked = true;
|
build_list[i].checked = true;
|
||||||
break;
|
break;
|
||||||
|
case MENU_ENUM_LABEL_INPUT_OVERLAY_DPAD_DIAGONAL_SENSITIVITY:
|
||||||
|
if (input_overlay_enable &&
|
||||||
|
BIT16_GET(menu_st->overlay_types, OVERLAY_TYPE_DPAD_AREA))
|
||||||
|
build_list[i].checked = true;
|
||||||
|
break;
|
||||||
|
case MENU_ENUM_LABEL_INPUT_OVERLAY_ABXY_DIAGONAL_SENSITIVITY:
|
||||||
|
if (input_overlay_enable &&
|
||||||
|
BIT16_GET(menu_st->overlay_types, OVERLAY_TYPE_ABXY_AREA))
|
||||||
|
build_list[i].checked = true;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -548,6 +548,10 @@ struct menu_state
|
|||||||
char input_dialog_kb_label[256];
|
char input_dialog_kb_label[256];
|
||||||
#endif
|
#endif
|
||||||
unsigned char kb_key_state[RETROK_LAST];
|
unsigned char kb_key_state[RETROK_LAST];
|
||||||
|
|
||||||
|
#ifdef HAVE_OVERLAY
|
||||||
|
uint16_t overlay_types;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct menu_content_ctx_defer_info
|
typedef struct menu_content_ctx_defer_info
|
||||||
|
@ -15432,6 +15432,44 @@ static bool setting_append_list(
|
|||||||
menu_settings_list_current_add_range(list, list_info, 0, 1, 0.01, true, true);
|
menu_settings_list_current_add_range(list, list_info, 0, 1, 0.01, true, true);
|
||||||
SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_CMD_APPLY_AUTO);
|
SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_CMD_APPLY_AUTO);
|
||||||
|
|
||||||
|
CONFIG_UINT(
|
||||||
|
list, list_info,
|
||||||
|
&settings->uints.input_overlay_dpad_diagonal_sensitivity,
|
||||||
|
MENU_ENUM_LABEL_INPUT_OVERLAY_DPAD_DIAGONAL_SENSITIVITY,
|
||||||
|
MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_DPAD_DIAGONAL_SENSITIVITY,
|
||||||
|
DEFAULT_OVERLAY_DPAD_DIAGONAL_SENSITIVITY,
|
||||||
|
&group_info,
|
||||||
|
&subgroup_info,
|
||||||
|
parent_group,
|
||||||
|
general_write_handler,
|
||||||
|
general_read_handler
|
||||||
|
);
|
||||||
|
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
|
||||||
|
(*list)[list_info->index - 1].get_string_representation =
|
||||||
|
&setting_get_string_representation_percentage;
|
||||||
|
MENU_SETTINGS_LIST_CURRENT_ADD_CMD(list, list_info, CMD_EVENT_OVERLAY_SET_EIGHTWAY_DIAGONAL_SENSITIVITY);
|
||||||
|
menu_settings_list_current_add_range(list, list_info, 0, 100, 1, true, true);
|
||||||
|
SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_CMD_APPLY_AUTO);
|
||||||
|
|
||||||
|
CONFIG_UINT(
|
||||||
|
list, list_info,
|
||||||
|
&settings->uints.input_overlay_abxy_diagonal_sensitivity,
|
||||||
|
MENU_ENUM_LABEL_INPUT_OVERLAY_ABXY_DIAGONAL_SENSITIVITY,
|
||||||
|
MENU_ENUM_LABEL_VALUE_INPUT_OVERLAY_ABXY_DIAGONAL_SENSITIVITY,
|
||||||
|
DEFAULT_OVERLAY_ABXY_DIAGONAL_SENSITIVITY,
|
||||||
|
&group_info,
|
||||||
|
&subgroup_info,
|
||||||
|
parent_group,
|
||||||
|
general_write_handler,
|
||||||
|
general_read_handler
|
||||||
|
);
|
||||||
|
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
|
||||||
|
(*list)[list_info->index - 1].get_string_representation =
|
||||||
|
&setting_get_string_representation_percentage;
|
||||||
|
MENU_SETTINGS_LIST_CURRENT_ADD_CMD(list, list_info, CMD_EVENT_OVERLAY_SET_EIGHTWAY_DIAGONAL_SENSITIVITY);
|
||||||
|
menu_settings_list_current_add_range(list, list_info, 0, 100, 1, true, true);
|
||||||
|
SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_CMD_APPLY_AUTO);
|
||||||
|
|
||||||
CONFIG_FLOAT(
|
CONFIG_FLOAT(
|
||||||
list, list_info,
|
list, list_info,
|
||||||
&settings->floats.input_overlay_scale_landscape,
|
&settings->floats.input_overlay_scale_landscape,
|
||||||
|
@ -1063,6 +1063,8 @@ enum msg_hash_enums
|
|||||||
MENU_LABEL(INPUT_OVERLAY_SHOW_MOUSE_CURSOR),
|
MENU_LABEL(INPUT_OVERLAY_SHOW_MOUSE_CURSOR),
|
||||||
MENU_LABEL(INPUT_OVERLAY_AUTO_ROTATE),
|
MENU_LABEL(INPUT_OVERLAY_AUTO_ROTATE),
|
||||||
MENU_LABEL(INPUT_OVERLAY_AUTO_SCALE),
|
MENU_LABEL(INPUT_OVERLAY_AUTO_SCALE),
|
||||||
|
MENU_LABEL(INPUT_OVERLAY_DPAD_DIAGONAL_SENSITIVITY),
|
||||||
|
MENU_LABEL(INPUT_OVERLAY_ABXY_DIAGONAL_SENSITIVITY),
|
||||||
MENU_LABEL(INPUT_KEYBOARD_GAMEPAD_MAPPING_TYPE),
|
MENU_LABEL(INPUT_KEYBOARD_GAMEPAD_MAPPING_TYPE),
|
||||||
MENU_LABEL(INPUT_SMALL_KEYBOARD_ENABLE),
|
MENU_LABEL(INPUT_SMALL_KEYBOARD_ENABLE),
|
||||||
MENU_LABEL(INPUT_TOUCH_ENABLE),
|
MENU_LABEL(INPUT_TOUCH_ENABLE),
|
||||||
|
@ -2457,6 +2457,11 @@ bool command_event(enum event_command cmd, void *data)
|
|||||||
input_overlay_set_alpha_mod(input_st->overlay_visibility,
|
input_overlay_set_alpha_mod(input_st->overlay_visibility,
|
||||||
input_st->overlay_ptr, input_overlay_opacity);
|
input_st->overlay_ptr, input_overlay_opacity);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
case CMD_EVENT_OVERLAY_SET_EIGHTWAY_DIAGONAL_SENSITIVITY:
|
||||||
|
#ifdef HAVE_OVERLAY
|
||||||
|
input_overlay_set_eightway_diagonal_sensitivity();
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case CMD_EVENT_AUDIO_REINIT:
|
case CMD_EVENT_AUDIO_REINIT:
|
||||||
|
@ -6616,7 +6616,6 @@ MENU_ST_FLAG_IS_BINDING;
|
|||||||
unsigned video_driver_width = video_st->width;
|
unsigned video_driver_width = video_st->width;
|
||||||
unsigned video_driver_height = video_st->height;
|
unsigned video_driver_height = video_st->height;
|
||||||
bool check_next_rotation = true;
|
bool check_next_rotation = true;
|
||||||
bool input_overlay_hide_in_menu = settings->bools.input_overlay_hide_in_menu;
|
|
||||||
bool input_overlay_hide_when_gamepad_connected = settings->bools.input_overlay_hide_when_gamepad_connected;
|
bool input_overlay_hide_when_gamepad_connected = settings->bools.input_overlay_hide_when_gamepad_connected;
|
||||||
bool input_overlay_auto_rotate = settings->bools.input_overlay_auto_rotate;
|
bool input_overlay_auto_rotate = settings->bools.input_overlay_auto_rotate;
|
||||||
|
|
||||||
@ -6646,7 +6645,6 @@ MENU_ST_FLAG_IS_BINDING;
|
|||||||
prev_overlay_restore = true;
|
prev_overlay_restore = true;
|
||||||
else if (prev_overlay_restore)
|
else if (prev_overlay_restore)
|
||||||
{
|
{
|
||||||
if (!input_overlay_hide_in_menu)
|
|
||||||
input_overlay_init();
|
input_overlay_init();
|
||||||
prev_overlay_restore = false;
|
prev_overlay_restore = false;
|
||||||
}
|
}
|
||||||
|
@ -56,6 +56,8 @@ struct overlay_loader
|
|||||||
bool overlay_enable;
|
bool overlay_enable;
|
||||||
bool overlay_hide_in_menu;
|
bool overlay_hide_in_menu;
|
||||||
bool overlay_hide_when_gamepad_connected;
|
bool overlay_hide_when_gamepad_connected;
|
||||||
|
|
||||||
|
uint16_t overlay_types;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void task_overlay_image_done(struct overlay *overlay)
|
static void task_overlay_image_done(struct overlay *overlay)
|
||||||
@ -103,6 +105,124 @@ static void task_overlay_load_desc_image(
|
|||||||
input_overlay->pos ++;
|
input_overlay->pos ++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void task_overlay_redefine_eightway_direction(
|
||||||
|
char *str, input_bits_t *data)
|
||||||
|
{
|
||||||
|
char *tok, *save;
|
||||||
|
unsigned bit;
|
||||||
|
|
||||||
|
BIT256_CLEAR_ALL(*data);
|
||||||
|
|
||||||
|
for (tok = strtok_r(str, "|", &save); tok;
|
||||||
|
tok = strtok_r(NULL, "|", &save))
|
||||||
|
{
|
||||||
|
bit = input_config_translate_str_to_bind_id(tok);
|
||||||
|
if (bit < RARCH_CUSTOM_BIND_LIST_END)
|
||||||
|
BIT256_SET(*data, bit);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void task_overlay_desc_populate_eightway_config(
|
||||||
|
overlay_loader_t *loader,
|
||||||
|
struct overlay_desc *desc,
|
||||||
|
unsigned ol_idx, unsigned desc_idx)
|
||||||
|
{
|
||||||
|
input_driver_state_t *input_st = input_state_get_ptr();
|
||||||
|
overlay_eightway_config_t *eightway;
|
||||||
|
char conf_key[64];
|
||||||
|
char *str;
|
||||||
|
|
||||||
|
desc->eightway_config = (overlay_eightway_config_t *)
|
||||||
|
calloc(1, sizeof(overlay_eightway_config_t));
|
||||||
|
eightway = desc->eightway_config;
|
||||||
|
|
||||||
|
/* Populate default vals for the eightway type.
|
||||||
|
*/
|
||||||
|
switch (desc->type)
|
||||||
|
{
|
||||||
|
case OVERLAY_TYPE_DPAD_AREA:
|
||||||
|
BIT256_SET(eightway->up, RETRO_DEVICE_ID_JOYPAD_UP);
|
||||||
|
BIT256_SET(eightway->down, RETRO_DEVICE_ID_JOYPAD_DOWN);
|
||||||
|
BIT256_SET(eightway->left, RETRO_DEVICE_ID_JOYPAD_LEFT);
|
||||||
|
BIT256_SET(eightway->right, RETRO_DEVICE_ID_JOYPAD_RIGHT);
|
||||||
|
|
||||||
|
eightway->slope_low = &input_st->overlay_eightway_dpad_slopes[0];
|
||||||
|
eightway->slope_high = &input_st->overlay_eightway_dpad_slopes[1];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case OVERLAY_TYPE_ABXY_AREA:
|
||||||
|
BIT256_SET(eightway->up, RETRO_DEVICE_ID_JOYPAD_X);
|
||||||
|
BIT256_SET(eightway->down, RETRO_DEVICE_ID_JOYPAD_B);
|
||||||
|
BIT256_SET(eightway->left, RETRO_DEVICE_ID_JOYPAD_Y);
|
||||||
|
BIT256_SET(eightway->right, RETRO_DEVICE_ID_JOYPAD_A);
|
||||||
|
|
||||||
|
eightway->slope_low = &input_st->overlay_eightway_abxy_slopes[0];
|
||||||
|
eightway->slope_high = &input_st->overlay_eightway_abxy_slopes[1];
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
free(eightway);
|
||||||
|
desc->eightway_config = NULL;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Redefine eightway vals if specified in conf
|
||||||
|
*/
|
||||||
|
snprintf(conf_key, sizeof(conf_key),
|
||||||
|
"overlay%u_desc%u_up", ol_idx, desc_idx);
|
||||||
|
if (config_get_string(loader->conf, conf_key, &str))
|
||||||
|
{
|
||||||
|
task_overlay_redefine_eightway_direction(str, &eightway->up);
|
||||||
|
free(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
snprintf(conf_key, sizeof(conf_key),
|
||||||
|
"overlay%u_desc%u_down", ol_idx, desc_idx);
|
||||||
|
if (config_get_string(loader->conf, conf_key, &str))
|
||||||
|
{
|
||||||
|
task_overlay_redefine_eightway_direction(str, &eightway->down);
|
||||||
|
free(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
snprintf(conf_key, sizeof(conf_key),
|
||||||
|
"overlay%u_desc%u_right", ol_idx, desc_idx);
|
||||||
|
if (config_get_string(loader->conf, conf_key, &str))
|
||||||
|
{
|
||||||
|
task_overlay_redefine_eightway_direction(str, &eightway->right);
|
||||||
|
free(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
snprintf(conf_key, sizeof(conf_key),
|
||||||
|
"overlay%u_desc%u_left", ol_idx, desc_idx);
|
||||||
|
if (config_get_string(loader->conf, conf_key, &str))
|
||||||
|
{
|
||||||
|
task_overlay_redefine_eightway_direction(str, &eightway->left);
|
||||||
|
free(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Prepopulate diagonals.
|
||||||
|
*/
|
||||||
|
bits_or_bits(eightway->up_right.data, eightway->up.data,
|
||||||
|
CUSTOM_BINDS_U32_COUNT);
|
||||||
|
bits_or_bits(eightway->up_right.data, eightway->right.data,
|
||||||
|
CUSTOM_BINDS_U32_COUNT);
|
||||||
|
|
||||||
|
bits_or_bits(eightway->up_left.data, eightway->up.data,
|
||||||
|
CUSTOM_BINDS_U32_COUNT);
|
||||||
|
bits_or_bits(eightway->up_left.data, eightway->left.data,
|
||||||
|
CUSTOM_BINDS_U32_COUNT);
|
||||||
|
|
||||||
|
bits_or_bits(eightway->down_right.data, eightway->down.data,
|
||||||
|
CUSTOM_BINDS_U32_COUNT);
|
||||||
|
bits_or_bits(eightway->down_right.data, eightway->right.data,
|
||||||
|
CUSTOM_BINDS_U32_COUNT);
|
||||||
|
|
||||||
|
bits_or_bits(eightway->down_left.data, eightway->down.data,
|
||||||
|
CUSTOM_BINDS_U32_COUNT);
|
||||||
|
bits_or_bits(eightway->down_left.data, eightway->left.data,
|
||||||
|
CUSTOM_BINDS_U32_COUNT);
|
||||||
|
}
|
||||||
|
|
||||||
static bool task_overlay_load_desc(
|
static bool task_overlay_load_desc(
|
||||||
overlay_loader_t *loader,
|
overlay_loader_t *loader,
|
||||||
struct overlay_desc *desc,
|
struct overlay_desc *desc,
|
||||||
@ -183,6 +303,10 @@ static bool task_overlay_load_desc(
|
|||||||
desc->type = OVERLAY_TYPE_ANALOG_LEFT;
|
desc->type = OVERLAY_TYPE_ANALOG_LEFT;
|
||||||
else if (string_is_equal(key, "analog_right"))
|
else if (string_is_equal(key, "analog_right"))
|
||||||
desc->type = OVERLAY_TYPE_ANALOG_RIGHT;
|
desc->type = OVERLAY_TYPE_ANALOG_RIGHT;
|
||||||
|
else if (string_is_equal(key, "dpad_area"))
|
||||||
|
desc->type = OVERLAY_TYPE_DPAD_AREA;
|
||||||
|
else if (string_is_equal(key, "abxy_area"))
|
||||||
|
desc->type = OVERLAY_TYPE_ABXY_AREA;
|
||||||
else if (strstr(key, "retrok_") == key)
|
else if (strstr(key, "retrok_") == key)
|
||||||
{
|
{
|
||||||
desc->type = OVERLAY_TYPE_KEYBOARD;
|
desc->type = OVERLAY_TYPE_KEYBOARD;
|
||||||
@ -212,6 +336,8 @@ static bool task_overlay_load_desc(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BIT16_SET(loader->overlay_types, desc->type);
|
||||||
|
|
||||||
width_mod = 1.0f;
|
width_mod = 1.0f;
|
||||||
height_mod = 1.0f;
|
height_mod = 1.0f;
|
||||||
|
|
||||||
@ -263,6 +389,11 @@ static bool task_overlay_load_desc(
|
|||||||
desc->analog_saturate_pct = 1.0f;
|
desc->analog_saturate_pct = 1.0f;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case OVERLAY_TYPE_DPAD_AREA:
|
||||||
|
case OVERLAY_TYPE_ABXY_AREA:
|
||||||
|
task_overlay_desc_populate_eightway_config(
|
||||||
|
loader, desc, ol_idx, desc_idx);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
/* OVERLAY_TYPE_BUTTONS - unhandled */
|
/* OVERLAY_TYPE_BUTTONS - unhandled */
|
||||||
/* OVERLAY_TYPE_KEYBOARD - unhandled */
|
/* OVERLAY_TYPE_KEYBOARD - unhandled */
|
||||||
@ -746,6 +877,7 @@ static void task_overlay_handler(retro_task_t *task)
|
|||||||
data->overlay_enable = loader->overlay_enable;
|
data->overlay_enable = loader->overlay_enable;
|
||||||
data->hide_in_menu = loader->overlay_hide_in_menu;
|
data->hide_in_menu = loader->overlay_hide_in_menu;
|
||||||
data->hide_when_gamepad_connected = loader->overlay_hide_when_gamepad_connected;
|
data->hide_when_gamepad_connected = loader->overlay_hide_when_gamepad_connected;
|
||||||
|
data->overlay_types = loader->overlay_types;
|
||||||
|
|
||||||
memcpy(&data->layout_desc, &loader->layout_desc,
|
memcpy(&data->layout_desc, &loader->layout_desc,
|
||||||
sizeof(overlay_layout_desc_t));
|
sizeof(overlay_layout_desc_t));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user