@@ -69,6 +69,7 @@ struct Setting {
6969 float min = 0 .f;
7070 float max = 100 .f;
7171 std::string format = " %.0f" ;
72+ std::function<std::string(float value)> value_format = nullptr ;
7273
7374 std::function<bool ()> is_enabled = [] {
7475 return true ;
@@ -506,37 +507,61 @@ static void OnRegisterOverlay(reshade::api::effect_runtime* runtime) {
506507 slider_flags |= ImGuiSliderFlags_Logarithmic;
507508 }
508509 switch (setting->value_type ) {
509- case SettingValueType::FLOAT:
510+ case SettingValueType::FLOAT: {
511+ std::string fmt;
512+ if (setting->value_format ) {
513+ fmt = setting->value_format (setting->value );
514+ } else {
515+ fmt = setting->format ;
516+ }
517+
510518 changed |= ImGui::SliderFloat (
511519 setting->label .c_str (),
512520 &setting->value ,
513521 setting->min ,
514522 setting->max ,
515- setting-> format .c_str (),
523+ fmt .c_str (),
516524 slider_flags);
517525 break ;
518- case SettingValueType::INTEGER:
526+ }
527+ case SettingValueType::INTEGER: {
528+ std::string int_fmt;
529+ if (setting->value_format ) {
530+ int_fmt = setting->value_format (static_cast <float >(setting->value_as_int ));
531+ } else if (!setting->labels .empty ()) {
532+ int_fmt = setting->labels .at (setting->value_as_int );
533+ } else {
534+ int_fmt = setting->format ;
535+ }
536+
519537 changed |= ImGui::SliderInt (
520538 setting->label .c_str (),
521539 &setting->value_as_int ,
522540 setting->min ,
523541 setting->GetMax (),
524- setting->labels .empty ()
525- ? setting->format .c_str ()
526- : setting->labels .at (setting->value_as_int ).c_str (),
542+ int_fmt.c_str (),
527543 slider_flags | ImGuiSliderFlags_NoInput);
528544 break ;
529- case SettingValueType::BOOLEAN:
545+ }
546+ case SettingValueType::BOOLEAN: {
547+ std::string bool_fmt;
548+ if (setting->value_format ) {
549+ bool_fmt = setting->value_format (static_cast <float >(setting->value_as_int ));
550+ } else if (!setting->labels .empty ()) {
551+ bool_fmt = setting->labels .at (setting->value_as_int );
552+ } else {
553+ bool_fmt = (setting->value_as_int == 0 ) ? " Off" : " On" ;
554+ }
555+
530556 changed |= ImGui::SliderInt (
531557 setting->label .c_str (),
532558 &setting->value_as_int ,
533559 0 ,
534560 1 ,
535- setting->labels .empty ()
536- ? ((setting->value_as_int == 0 ) ? " Off" : " On" ) // NOLINT(readability-avoid-nested-conditional-operator)
537- : setting->labels .at (setting->value_as_int ).c_str (),
561+ bool_fmt.c_str (),
538562 slider_flags | ImGuiSliderFlags_NoInput);
539563 break ;
564+ }
540565 case SettingValueType::BUTTON:
541566 if (ImGui::Button (setting->label .c_str ())) {
542567 changed = setting->on_click ();
0 commit comments