Add ability to toggle through presets

pull/1113/head
Alex Maese 10 months ago committed by flightlessmango
parent f66700296b
commit cd05d1771f

@ -98,12 +98,12 @@ static void ctrl_thread(){
case 0:
break;
case 1:
parse_overlay_config(&params, getenv("MANGOHUD_CONFIG"));
parse_overlay_config(&params, getenv("MANGOHUD_CONFIG"), false);
break;
case 2:
break;
case 3:
parse_overlay_config(&params, getenv("MANGOHUD_CONFIG"));
parse_overlay_config(&params, getenv("MANGOHUD_CONFIG"), false);
break;
}
{
@ -286,7 +286,7 @@ int main(int, char**)
// Setup Platform/Renderer backends
int control_client = -1;
parse_overlay_config(&params, getenv("MANGOHUD_CONFIG"));
parse_overlay_config(&params, getenv("MANGOHUD_CONFIG"), false);
create_fonts(nullptr, params, sw_stats.font1, sw_stats.font_text);
HUDElements.convert_colors(params);
init_cpu_stats(params);

@ -75,7 +75,7 @@ void imgui_init()
if (is_blacklisted())
return;
parse_overlay_config(&params, getenv("MANGOHUD_CONFIG"));
parse_overlay_config(&params, getenv("MANGOHUD_CONFIG"), false);
_params = &params;
//check for blacklist item in the config file

@ -9,6 +9,7 @@ void check_keybinds(struct overlay_params& params, uint32_t vendorID){
auto now = Clock::now(); /* us */
auto elapsedF2 = now - last_f2_press;
auto elapsedFpsLimitToggle = now - toggle_fps_limit_press;
auto elapsedPresetToggle = now - toggle_preset_press;
auto elapsedF12 = now - last_f12_press;
auto elapsedReloadCfg = now - reload_cfg_press;
auto elapsedUpload = now - last_upload_press;
@ -50,6 +51,19 @@ void check_keybinds(struct overlay_params& params, uint32_t vendorID){
}
}
if (elapsedPresetToggle >= keyPressDelay &&
keys_are_pressed(params.toggle_preset)) {
toggle_preset_press = now;
size_t size = params.preset.size();
for (size_t i = 0; i < size; i++){
if(params.preset[i] == current_preset) {
current_preset = params.preset[++i%size];
parse_overlay_config(&params, getenv("MANGOHUD_CONFIG"), true);
break;
}
}
}
if (elapsedF12 >= keyPressDelay &&
keys_are_pressed(params.toggle_hud)) {
last_f12_press = now;
@ -58,7 +72,7 @@ void check_keybinds(struct overlay_params& params, uint32_t vendorID){
if (elapsedReloadCfg >= keyPressDelay &&
keys_are_pressed(params.reload_cfg)) {
parse_overlay_config(&params, getenv("MANGOHUD_CONFIG"));
parse_overlay_config(&params, getenv("MANGOHUD_CONFIG"), false);
_params = &params;
reload_cfg_press = now;
}

@ -11,7 +11,7 @@
typedef unsigned long KeySym;
#endif
Clock::time_point last_f2_press, toggle_fps_limit_press , last_f12_press, reload_cfg_press, last_upload_press;
Clock::time_point last_f2_press, toggle_fps_limit_press, toggle_preset_press, last_f12_press, reload_cfg_press, last_upload_press;
#if defined(HAVE_X11)
static inline bool keys_are_pressed(const std::vector<KeySym>& keys) {

@ -25,7 +25,7 @@ static void fileChanged(notify_thread *nt) {
// In the case of IN_DELETE_SELF, some editors may do a save-to-temp-file/delete-original/move-temp-file
// so sleep a little to let file to be replaced
std::this_thread::sleep_for(std::chrono::milliseconds(100));
parse_overlay_config(&local_params, getenv("MANGOHUD_CONFIG"));
parse_overlay_config(&local_params, getenv("MANGOHUD_CONFIG"), false);
if ((event->mask & IN_DELETE_SELF) || (nt->params->config_file_path != local_params.config_file_path)) {
SPDLOG_DEBUG("Watching config file: {}", local_params.config_file_path.c_str());
inotify_rm_watch(nt->fd, nt->wd);

@ -51,6 +51,7 @@ vector<float> frametime_data(200,0.f);
int fan_speed;
fcatoverlay fcatstatus;
std::string drm_dev;
int current_preset;
void init_spdlog()
{

@ -90,6 +90,7 @@ extern overlay_params *_params;
extern double min_frametime, max_frametime;
extern bool steam_focused;
extern int fan_speed;
extern int current_preset;
void init_spdlog();
void overlay_new_frame(const struct overlay_params& params);

@ -151,6 +151,7 @@ parse_string_to_keysym_vec(const char *str)
#define parse_upload_log parse_string_to_keysym_vec
#define parse_upload_logs parse_string_to_keysym_vec
#define parse_toggle_fps_limit parse_string_to_keysym_vec
#define parse_toggle_preset parse_string_to_keysym_vec
#else
#define parse_toggle_hud(x) {}
@ -160,8 +161,33 @@ parse_string_to_keysym_vec(const char *str)
#define parse_upload_log(x) {}
#define parse_upload_logs(x) {}
#define parse_toggle_fps_limit(x) {}
#define parse_toggle_preset(x) {}
#endif
// NOTE: This is NOT defined as an OVERLAY_PARAM and will be called manually
static std::vector<int>
parse_preset(const char *str)
{
std::vector<int> presets;
auto preset_strings = str_tokenize(str);
for (auto& value : preset_strings) {
trim(value);
uint32_t as_int;
try {
as_int = static_cast<int>(std::stoi(value));
} catch (const std::invalid_argument&) {
SPDLOG_ERROR("invalid preset value: '{}'", value);
continue;
}
presets.push_back(as_int);
}
return presets;
}
static uint32_t
parse_fps_sampling_period(const char *str)
{
@ -425,7 +451,6 @@ parse_gl_size_query(const char *str)
#define parse_fcat_screen_edge(s) parse_unsigned(s)
#define parse_picmip(s) parse_signed(s)
#define parse_af(s) parse_signed(s)
#define parse_preset(s) parse_signed(s)
#define parse_cpu_color(s) parse_color(s)
#define parse_gpu_color(s) parse_color(s)
@ -667,7 +692,6 @@ static void set_param_defaults(struct overlay_params *params){
params->fsr_steam_sharpness = -1;
params->picmip = -17;
params->af = -1;
params->preset = -1;
params->font_size = 24;
params->table_columns = 3;
params->text_outline_color = 0x000000;
@ -676,14 +700,18 @@ static void set_param_defaults(struct overlay_params *params){
void
parse_overlay_config(struct overlay_params *params,
const char *env)
const char *env, bool use_existing_preset)
{
*params = {};
std::vector<int> default_preset = {-1, 0, 1, 2, 3, 4};
*params = {
.preset = use_existing_preset ? params->preset : default_preset
};
set_param_defaults(params);
#ifdef HAVE_X11
params->toggle_hud = { XK_Shift_R, XK_F12 };
params->toggle_hud_position = { XK_Shift_R, XK_F11 };
params->toggle_preset = { XK_Shift_R, XK_F10 };
params->toggle_fps_limit = { XK_Shift_L, XK_F1 };
params->toggle_logging = { XK_Shift_L, XK_F2 };
params->reload_cfg = { XK_Shift_L, XK_F4 };
@ -693,16 +721,19 @@ parse_overlay_config(struct overlay_params *params,
#ifdef _WIN32
params->toggle_hud = { VK_F12 };
params->toggle_preset = { VK_F10 };
params->toggle_fps_limit = { VK_F3 };
params->toggle_logging = { VK_F2 };
params->reload_cfg = { VK_F4 };
#undef parse_toggle_hud
#undef parse_toggle_fps_limit
#undef parse_toggle_preset
#undef parse_toggle_logging
#undef parse_reload_cfg
#define parse_toggle_hud(x) params->toggle_hud
#define parse_toggle_preset(x) params->toggle_preset
#define parse_toggle_fps_limit(x) params->toggle_fps_limit
#define parse_toggle_logging(x) params->toggle_logging
#define parse_reload_cfg(x) params->reload_cfg
@ -720,8 +751,14 @@ parse_overlay_config(struct overlay_params *params,
// Get config options
parseConfigFile(*params);
if (params->options.find("preset") != params->options.end())
presets(stoi(params->options.find("preset")->second), params);
if (!use_existing_preset && params->options.find("preset") != params->options.end()) {
auto presets = parse_preset(params->options.find("preset")->second.c_str());
if (!presets.empty())
params->preset = presets;
current_preset = params->preset[0];
}
presets(current_preset, params);
if (params->options.find("full") != params->options.end() && params->options.find("full")->second != "0") {
#define OVERLAY_PARAM_BOOL(name) \
@ -767,9 +804,11 @@ parse_overlay_config(struct overlay_params *params,
OVERLAY_PARAMS
#undef OVERLAY_PARAM_BOOL
#undef OVERLAY_PARAM_CUSTOM
if (it.first == "preset") {
continue;
}
SPDLOG_ERROR("Unknown option '{}'", it.first.c_str());
}
}
// TODO decide what to do for legacy_layout=0

@ -129,6 +129,7 @@ typedef unsigned long KeySym;
OVERLAY_PARAM_CUSTOM(gl_dont_flip) \
OVERLAY_PARAM_CUSTOM(toggle_hud) \
OVERLAY_PARAM_CUSTOM(toggle_hud_position) \
OVERLAY_PARAM_CUSTOM(toggle_preset) \
OVERLAY_PARAM_CUSTOM(toggle_fps_limit) \
OVERLAY_PARAM_CUSTOM(toggle_logging) \
OVERLAY_PARAM_CUSTOM(reload_cfg) \
@ -179,7 +180,6 @@ typedef unsigned long KeySym;
OVERLAY_PARAM_CUSTOM(fcat_overlay_width) \
OVERLAY_PARAM_CUSTOM(picmip) \
OVERLAY_PARAM_CUSTOM(af) \
OVERLAY_PARAM_CUSTOM(preset) \
OVERLAY_PARAM_CUSTOM(text_outline_color) \
OVERLAY_PARAM_CUSTOM(text_outline_thickness) \
OVERLAY_PARAM_CUSTOM(fps_text) \
@ -271,6 +271,7 @@ struct overlay_params {
float background_alpha, alpha;
float cellpadding_y;
std::vector<KeySym> toggle_hud;
std::vector<KeySym> toggle_preset;
std::vector<KeySym> toggle_fps_limit;
std::vector<KeySym> toggle_logging;
std::vector<KeySym> reload_cfg;
@ -297,7 +298,7 @@ struct overlay_params {
unsigned short fcat_overlay_width;
int picmip;
int af;
int preset;
std::vector<int> preset;
size_t font_params_hash;
unsigned text_outline_color;
float text_outline_thickness;
@ -306,7 +307,7 @@ struct overlay_params {
const extern char *overlay_param_names[];
void parse_overlay_config(struct overlay_params *params,
const char *env);
const char *env, bool ignore_preset);
void presets(int preset, struct overlay_params *params);
bool parse_preset_config(int preset, struct overlay_params *params);
void add_to_options(struct overlay_params *params, std::string option, std::string value);

@ -1896,7 +1896,7 @@ static VkResult overlay_CreateInstance(
if (is_blacklisted())
return result;
parse_overlay_config(&instance_data->params, getenv("MANGOHUD_CONFIG"));
parse_overlay_config(&instance_data->params, getenv("MANGOHUD_CONFIG"), false);
_params = &instance_data->params;
//check for blacklist item in the config file

@ -13,7 +13,7 @@ void init_d3d_shared(){
vendorID = get_device_id_dxgi();
if (cfg_inited)
return;
parse_overlay_config(&params, getenv("MANGOHUD_CONFIG"));
parse_overlay_config(&params, getenv("MANGOHUD_CONFIG"), false);
_params = &params;
cfg_inited = true;
// init_cpu_stats(params);
@ -22,4 +22,4 @@ void init_d3d_shared(){
void d3d_run(){
check_keybinds(params, vendorID);
update_hud_info(sw_stats, params, vendorID);
}
}

Loading…
Cancel
Save