mirror of
https://github.com/libretro/RetroArch
synced 2025-03-29 22:20:21 +00:00
Merge pull request #10837 from parport0/master
Add options for moving the on-screen overlay
This commit is contained in:
commit
dc10dc4702
@ -1705,6 +1705,8 @@ static struct config_float_setting *populate_settings_float(
|
||||
#ifdef HAVE_OVERLAY
|
||||
SETTING_FLOAT("input_overlay_opacity", &settings->floats.input_overlay_opacity, true, DEFAULT_INPUT_OVERLAY_OPACITY, false);
|
||||
SETTING_FLOAT("input_overlay_scale", &settings->floats.input_overlay_scale, true, 1.0f, false);
|
||||
SETTING_FLOAT("input_overlay_center_x", &settings->floats.input_overlay_center_x, true, 0.5f, false);
|
||||
SETTING_FLOAT("input_overlay_center_y", &settings->floats.input_overlay_center_y, true, 0.5f, false);
|
||||
#endif
|
||||
#ifdef HAVE_MENU
|
||||
SETTING_FLOAT("menu_scale_factor", &settings->floats.menu_scale_factor, true, DEFAULT_MENU_SCALE_FACTOR, false);
|
||||
|
@ -437,6 +437,8 @@ typedef struct settings
|
||||
|
||||
float input_overlay_opacity;
|
||||
float input_overlay_scale;
|
||||
float input_overlay_center_x;
|
||||
float input_overlay_center_y;
|
||||
|
||||
float slowmotion_ratio;
|
||||
float fastforward_ratio;
|
||||
|
@ -203,6 +203,8 @@ typedef struct
|
||||
size_t size;
|
||||
float overlay_opacity;
|
||||
float overlay_scale;
|
||||
float overlay_center_x;
|
||||
float overlay_center_y;
|
||||
struct overlay *overlays;
|
||||
struct overlay *active;
|
||||
} overlay_task_data_t;
|
||||
|
@ -1930,6 +1930,14 @@ MSG_HASH(
|
||||
MENU_ENUM_LABEL_OVERLAY_SCALE,
|
||||
"input_overlay_scale"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_OVERLAY_CENTER_X,
|
||||
"input_overlay_center_x"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_OVERLAY_CENTER_Y,
|
||||
"input_overlay_center_y"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_PAL60_ENABLE,
|
||||
"pal60_enable"
|
||||
|
@ -659,6 +659,14 @@ int menu_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len)
|
||||
snprintf(s, len,
|
||||
"Overlay scale.");
|
||||
break;
|
||||
case MENU_ENUM_LABEL_OVERLAY_CENTER_X:
|
||||
snprintf(s, len,
|
||||
"Overlay X offset.");
|
||||
break;
|
||||
case MENU_ENUM_LABEL_OVERLAY_CENTER_Y:
|
||||
snprintf(s, len,
|
||||
"Overlay Y offset.");
|
||||
break;
|
||||
case MENU_ENUM_LABEL_AUDIO_OUTPUT_RATE:
|
||||
snprintf(s, len,
|
||||
"Audio output samplerate.");
|
||||
|
@ -3223,6 +3223,24 @@ MSG_HASH(
|
||||
"Scale of all UI elements of the overlay."
|
||||
)
|
||||
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_OVERLAY_CENTER_X,
|
||||
"Overlay Offset X"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_OVERLAY_CENTER_X,
|
||||
"X offset of all UI elements of the overlay."
|
||||
)
|
||||
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_OVERLAY_CENTER_Y,
|
||||
"Overlay Offset Y"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_OVERLAY_CENTER_Y,
|
||||
"Y offset of all UI elements of the overlay."
|
||||
)
|
||||
|
||||
/* Settings > On-Screen Display > Video Layout */
|
||||
|
||||
MSG_HASH(
|
||||
|
@ -463,6 +463,8 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_audio_wasapi_float_format, MENU_
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_audio_wasapi_sh_buffer_length, MENU_ENUM_SUBLABEL_AUDIO_WASAPI_SH_BUFFER_LENGTH)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_overlay_opacity, MENU_ENUM_SUBLABEL_OVERLAY_OPACITY)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_overlay_scale, MENU_ENUM_SUBLABEL_OVERLAY_SCALE)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_overlay_center_x, MENU_ENUM_SUBLABEL_OVERLAY_CENTER_X)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_overlay_center_y, MENU_ENUM_SUBLABEL_OVERLAY_CENTER_Y)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_overlay_enable, MENU_ENUM_SUBLABEL_INPUT_OVERLAY_ENABLE)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_overlay_preset, MENU_ENUM_SUBLABEL_OVERLAY_PRESET)
|
||||
#ifdef HAVE_VIDEO_LAYOUT
|
||||
@ -2528,6 +2530,12 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
|
||||
case MENU_ENUM_LABEL_OVERLAY_SCALE:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_overlay_scale);
|
||||
break;
|
||||
case MENU_ENUM_LABEL_OVERLAY_CENTER_X:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_overlay_center_x);
|
||||
break;
|
||||
case MENU_ENUM_LABEL_OVERLAY_CENTER_Y:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_overlay_center_y);
|
||||
break;
|
||||
#ifdef HAVE_VIDEO_LAYOUT
|
||||
case MENU_ENUM_LABEL_VIDEO_LAYOUT_ENABLE:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_video_layout_enable);
|
||||
|
@ -6821,6 +6821,8 @@ unsigned menu_displaylist_build_list(
|
||||
{MENU_ENUM_LABEL_OVERLAY_PRESET, PARSE_ONLY_PATH, false },
|
||||
{MENU_ENUM_LABEL_OVERLAY_OPACITY, PARSE_ONLY_FLOAT, false },
|
||||
{MENU_ENUM_LABEL_OVERLAY_SCALE, PARSE_ONLY_FLOAT, false },
|
||||
{MENU_ENUM_LABEL_OVERLAY_CENTER_X, PARSE_ONLY_FLOAT, false },
|
||||
{MENU_ENUM_LABEL_OVERLAY_CENTER_Y, PARSE_ONLY_FLOAT, false },
|
||||
};
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(build_list); i++)
|
||||
@ -6835,6 +6837,8 @@ unsigned menu_displaylist_build_list(
|
||||
case MENU_ENUM_LABEL_OVERLAY_PRESET:
|
||||
case MENU_ENUM_LABEL_OVERLAY_OPACITY:
|
||||
case MENU_ENUM_LABEL_OVERLAY_SCALE:
|
||||
case MENU_ENUM_LABEL_OVERLAY_CENTER_X:
|
||||
case MENU_ENUM_LABEL_OVERLAY_CENTER_Y:
|
||||
if (input_overlay_enable)
|
||||
build_list[i].checked = true;
|
||||
break;
|
||||
|
@ -12621,6 +12621,40 @@ static bool setting_append_list(
|
||||
menu_settings_list_current_add_range(list, list_info, 0, 2, 0.01, true, true);
|
||||
SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_CMD_APPLY_AUTO);
|
||||
|
||||
CONFIG_FLOAT(
|
||||
list, list_info,
|
||||
&settings->floats.input_overlay_center_x,
|
||||
MENU_ENUM_LABEL_OVERLAY_CENTER_X,
|
||||
MENU_ENUM_LABEL_VALUE_OVERLAY_CENTER_X,
|
||||
0.5f,
|
||||
"%.2f",
|
||||
&group_info,
|
||||
&subgroup_info,
|
||||
parent_group,
|
||||
general_write_handler,
|
||||
general_read_handler);
|
||||
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
|
||||
MENU_SETTINGS_LIST_CURRENT_ADD_CMD(list, list_info, CMD_EVENT_OVERLAY_SET_SCALE_FACTOR);
|
||||
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);
|
||||
|
||||
CONFIG_FLOAT(
|
||||
list, list_info,
|
||||
&settings->floats.input_overlay_center_y,
|
||||
MENU_ENUM_LABEL_OVERLAY_CENTER_Y,
|
||||
MENU_ENUM_LABEL_VALUE_OVERLAY_CENTER_Y,
|
||||
0.5f,
|
||||
"%.2f",
|
||||
&group_info,
|
||||
&subgroup_info,
|
||||
parent_group,
|
||||
general_write_handler,
|
||||
general_read_handler);
|
||||
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
|
||||
MENU_SETTINGS_LIST_CURRENT_ADD_CMD(list, list_info, CMD_EVENT_OVERLAY_SET_SCALE_FACTOR);
|
||||
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);
|
||||
|
||||
END_SUB_GROUP(list, list_info, parent_group);
|
||||
|
||||
START_SUB_GROUP(list, list_info, "Onscreen Keyboard Overlay", &group_info, &subgroup_info, parent_group);
|
||||
|
@ -1741,6 +1741,8 @@ enum msg_hash_enums
|
||||
MENU_LABEL(NETPLAY_MODE),
|
||||
MENU_LABEL(PERFCNT_ENABLE),
|
||||
MENU_LABEL(OVERLAY_SCALE),
|
||||
MENU_LABEL(OVERLAY_CENTER_X),
|
||||
MENU_LABEL(OVERLAY_CENTER_Y),
|
||||
MENU_LABEL(OVERLAY_PRESET),
|
||||
MENU_LABEL(OVERLAY_OPACITY),
|
||||
|
||||
|
26
retroarch.c
26
retroarch.c
@ -2656,7 +2656,8 @@ static void retroarch_overlay_init(struct rarch_state *p_rarch);
|
||||
static void retroarch_overlay_deinit(struct rarch_state *p_rarch);
|
||||
static void input_overlay_set_alpha_mod(struct rarch_state *p_rarch,
|
||||
input_overlay_t *ol, float mod);
|
||||
static void input_overlay_set_scale_factor(input_overlay_t *ol, float scale);
|
||||
static void input_overlay_set_scale_factor(input_overlay_t *ol, float scale,
|
||||
float center_x, float center_y);
|
||||
static void input_overlay_load_active(
|
||||
struct rarch_state *p_rarch,
|
||||
input_overlay_t *ol, float opacity);
|
||||
@ -14844,7 +14845,10 @@ bool command_event(enum event_command cmd, void *data)
|
||||
#ifdef HAVE_OVERLAY
|
||||
{
|
||||
float input_overlay_scale = settings->floats.input_overlay_scale;
|
||||
input_overlay_set_scale_factor(p_rarch->overlay_ptr, input_overlay_scale);
|
||||
float input_overlay_c_x = settings->floats.input_overlay_center_x;
|
||||
float input_overlay_c_y = settings->floats.input_overlay_center_y;
|
||||
input_overlay_set_scale_factor(p_rarch->overlay_ptr,
|
||||
input_overlay_scale, input_overlay_c_x, input_overlay_c_y);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
@ -20717,13 +20721,17 @@ static bool input_overlay_add_inputs(input_overlay_t *ol,
|
||||
* Scales overlay and all its associated descriptors
|
||||
* by a given scaling factor (@scale).
|
||||
**/
|
||||
static void input_overlay_scale(struct overlay *ol, float scale)
|
||||
static void input_overlay_scale(struct overlay *ol, float scale, float center_x,
|
||||
float center_y)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
if (ol->block_scale)
|
||||
scale = 1.0f;
|
||||
|
||||
ol->center_x = ol->x + center_x * ol->w;
|
||||
ol->center_y = ol->y + center_y * ol->h;
|
||||
|
||||
ol->scale = scale;
|
||||
ol->mod_w = ol->w * scale;
|
||||
ol->mod_h = ol->h * scale;
|
||||
@ -20776,7 +20784,8 @@ static void input_overlay_set_vertex_geom(input_overlay_t *ol)
|
||||
*
|
||||
* Scales the overlay by a factor of scale.
|
||||
**/
|
||||
static void input_overlay_set_scale_factor(input_overlay_t *ol, float scale)
|
||||
static void input_overlay_set_scale_factor(input_overlay_t *ol, float scale,
|
||||
float center_x, float center_y)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
@ -20784,7 +20793,7 @@ static void input_overlay_set_scale_factor(input_overlay_t *ol, float scale)
|
||||
return;
|
||||
|
||||
for (i = 0; i < ol->size; i++)
|
||||
input_overlay_scale(&ol->overlays[i], scale);
|
||||
input_overlay_scale(&ol->overlays[i], scale, center_x, center_y);
|
||||
|
||||
input_overlay_set_vertex_geom(ol);
|
||||
}
|
||||
@ -21258,7 +21267,8 @@ static void input_overlay_loaded(retro_task_t *task,
|
||||
if (ol->iface->enable)
|
||||
ol->iface->enable(ol->iface_data, data->overlay_enable);
|
||||
|
||||
input_overlay_set_scale_factor(ol, data->overlay_scale);
|
||||
input_overlay_set_scale_factor(ol, data->overlay_scale,
|
||||
data->overlay_center_x, data->overlay_center_y);
|
||||
|
||||
ol->next_index = (unsigned)((ol->index + 1) % ol->size);
|
||||
ol->state = OVERLAY_STATUS_NONE;
|
||||
@ -21502,6 +21512,8 @@ static void retroarch_overlay_init(struct rarch_state *p_rarch)
|
||||
const char *path_overlay = settings->paths.path_overlay;
|
||||
float overlay_opacity = settings->floats.input_overlay_opacity;
|
||||
float overlay_scale = settings->floats.input_overlay_scale;
|
||||
float overlay_center_x = settings->floats.input_overlay_center_x;
|
||||
float overlay_center_y = settings->floats.input_overlay_center_y;
|
||||
bool load_enabled = input_overlay_enable;
|
||||
#ifdef HAVE_MENU
|
||||
bool overlay_hide_in_menu = settings->bools.input_overlay_hide_in_menu;
|
||||
@ -21531,6 +21543,8 @@ static void retroarch_overlay_init(struct rarch_state *p_rarch)
|
||||
input_overlay_enable,
|
||||
overlay_opacity,
|
||||
overlay_scale,
|
||||
overlay_center_x,
|
||||
overlay_center_y,
|
||||
NULL);
|
||||
}
|
||||
#endif
|
||||
|
@ -353,6 +353,10 @@
|
||||
# Scale of all UI elements of the overlay.
|
||||
# input_overlay_scale = 1.0
|
||||
|
||||
# Center of all UI elements of the overlay.
|
||||
# input_overlay_center_x = 0.5
|
||||
# input_overlay_center_y = 0.5
|
||||
|
||||
#### Input
|
||||
|
||||
# Path to input remapping file.
|
||||
|
@ -48,6 +48,8 @@ struct overlay_loader
|
||||
unsigned pos_increment;
|
||||
float overlay_opacity;
|
||||
float overlay_scale;
|
||||
float overlay_center_x;
|
||||
float overlay_center_y;
|
||||
|
||||
config_file_t *conf;
|
||||
char *overlay_path;
|
||||
@ -699,13 +701,15 @@ static void task_overlay_handler(retro_task_t *task)
|
||||
overlay_task_data_t *data = (overlay_task_data_t*)
|
||||
calloc(1, sizeof(*data));
|
||||
|
||||
data->overlays = loader->overlays;
|
||||
data->size = loader->size;
|
||||
data->active = loader->active;
|
||||
data->hide_in_menu = loader->overlay_hide_in_menu;
|
||||
data->overlay_enable = loader->overlay_enable;
|
||||
data->overlay_opacity = loader->overlay_opacity;
|
||||
data->overlay_scale = loader->overlay_scale;
|
||||
data->overlays = loader->overlays;
|
||||
data->size = loader->size;
|
||||
data->active = loader->active;
|
||||
data->hide_in_menu = loader->overlay_hide_in_menu;
|
||||
data->overlay_enable = loader->overlay_enable;
|
||||
data->overlay_opacity = loader->overlay_opacity;
|
||||
data->overlay_scale = loader->overlay_scale;
|
||||
data->overlay_center_x = loader->overlay_center_x;
|
||||
data->overlay_center_y = loader->overlay_center_y;
|
||||
|
||||
task_set_data(task, data);
|
||||
}
|
||||
@ -735,6 +739,8 @@ bool task_push_overlay_load_default(
|
||||
bool input_overlay_enable,
|
||||
float input_overlay_opacity,
|
||||
float input_overlay_scale,
|
||||
float input_overlay_center_x,
|
||||
float input_overlay_center_y,
|
||||
void *user_data)
|
||||
{
|
||||
task_finder_data_t find_data;
|
||||
@ -785,6 +791,8 @@ bool task_push_overlay_load_default(
|
||||
loader->overlay_enable = input_overlay_enable;
|
||||
loader->overlay_opacity = input_overlay_opacity;
|
||||
loader->overlay_scale = input_overlay_scale;
|
||||
loader->overlay_center_x = input_overlay_center_x;
|
||||
loader->overlay_center_y = input_overlay_center_y;
|
||||
loader->conf = conf;
|
||||
loader->state = OVERLAY_STATUS_DEFERRED_LOAD;
|
||||
loader->pos_increment = (loader->size / 4) ? (loader->size / 4) : 4;
|
||||
|
@ -159,6 +159,8 @@ bool task_push_overlay_load_default(
|
||||
bool input_overlay_enable,
|
||||
float input_overlay_opacity,
|
||||
float input_overlay_scale,
|
||||
float input_overlay_center_x,
|
||||
float input_overlay_center_y,
|
||||
void *user_data);
|
||||
#endif
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user