1
0
mirror of https://github.com/libretro/RetroArch synced 2024-07-08 12:15:49 +00:00

Merge pull request #10837 from parport0/master

Add options for moving the on-screen overlay
This commit is contained in:
Autechre 2020-06-11 18:03:02 +02:00 committed by GitHub
commit dc10dc4702
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 129 additions and 13 deletions

View File

@ -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);

View File

@ -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;

View File

@ -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;

View File

@ -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"

View File

@ -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.");

View File

@ -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(

View File

@ -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);

View File

@ -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;

View File

@ -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);

View File

@ -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),

View File

@ -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

View File

@ -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.

View 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;

View File

@ -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