diff --git a/src/util/imgui_fullscreen.cpp b/src/util/imgui_fullscreen.cpp index b0ade1986..7d7e43cd0 100644 --- a/src/util/imgui_fullscreen.cpp +++ b/src/util/imgui_fullscreen.cpp @@ -133,6 +133,8 @@ struct ALIGN_TO_CACHE_LINE UIState SmallString fullscreen_footer_text; SmallString last_fullscreen_footer_text; + SmallString left_fullscreen_footer_text; + SmallString last_left_fullscreen_footer_text; std::vector> fullscreen_footer_icon_mapping; float fullscreen_text_change_time; float fullscreen_text_alpha; @@ -242,6 +244,8 @@ void ImGuiFullscreen::Shutdown(bool clear_state) s_state.background_progress_dialogs.clear(); s_state.fullscreen_footer_text.clear(); s_state.last_fullscreen_footer_text.clear(); + s_state.left_fullscreen_footer_text.clear(); + s_state.last_left_fullscreen_footer_text.clear(); s_state.fullscreen_text_change_time = 0.0f; CloseInputDialog(); CloseMessageDialog(); @@ -646,6 +650,7 @@ void ImGuiFullscreen::EndLayout() PopResetLayout(); + s_state.left_fullscreen_footer_text.clear(); s_state.fullscreen_footer_text.clear(); s_state.rendered_menu_item_border = false; @@ -1018,6 +1023,16 @@ void ImGuiFullscreen::SetFullscreenFooterText(std::span> items) +{ + CreateFooterTextString(s_state.left_fullscreen_footer_text, items); +} + void ImGuiFullscreen::SetFullscreenFooterTextIconMapping(std::span> mapping) { if (mapping.empty()) @@ -1036,9 +1051,10 @@ void ImGuiFullscreen::SetFullscreenFooterTextIconMapping(std::span 0.0f) { - const ImVec2 text_size = - font->CalcTextSizeA(font->FontSize, max_width, 0.0f, s_state.last_fullscreen_footer_text.c_str(), - s_state.last_fullscreen_footer_text.end_ptr()); - const ImVec2 text_pos = - ImVec2(io.DisplaySize.x - padding * 2.0f - text_size.x, io.DisplaySize.y - font->FontSize - padding); - dl->AddText(font, font->FontSize, text_pos + shadow_offset, MulAlpha(UIStyle.ShadowColor, prev_opacity), - s_state.last_fullscreen_footer_text.c_str(), s_state.last_fullscreen_footer_text.end_ptr()); - dl->AddText(font, font->FontSize, text_pos, ModAlpha(text_color, prev_opacity), - s_state.last_fullscreen_footer_text.c_str(), s_state.last_fullscreen_footer_text.end_ptr()); + if (!s_state.last_fullscreen_footer_text.empty()) + { + const ImVec2 text_size = + font->CalcTextSizeA(font->FontSize, max_width, 0.0f, s_state.last_fullscreen_footer_text.c_str(), + s_state.last_fullscreen_footer_text.end_ptr()); + const ImVec2 text_pos = + ImVec2(io.DisplaySize.x - padding * 2.0f - text_size.x, io.DisplaySize.y - font->FontSize - padding); + dl->AddText(font, font->FontSize, text_pos + shadow_offset, MulAlpha(UIStyle.ShadowColor, prev_opacity), + s_state.last_fullscreen_footer_text.c_str(), s_state.last_fullscreen_footer_text.end_ptr()); + dl->AddText(font, font->FontSize, text_pos, ModAlpha(text_color, prev_opacity), + s_state.last_fullscreen_footer_text.c_str(), s_state.last_fullscreen_footer_text.end_ptr()); + } + + if (!s_state.last_left_fullscreen_footer_text.empty()) + { + const ImVec2 text_pos = ImVec2(padding, io.DisplaySize.y - font->FontSize - padding); + dl->AddText(font, font->FontSize, text_pos + shadow_offset, MulAlpha(UIStyle.ShadowColor, prev_opacity), + s_state.last_left_fullscreen_footer_text.c_str(), + s_state.last_left_fullscreen_footer_text.end_ptr()); + dl->AddText(font, font->FontSize, text_pos, ModAlpha(text_color, prev_opacity), + s_state.last_left_fullscreen_footer_text.c_str(), + s_state.last_left_fullscreen_footer_text.end_ptr()); + } } } else if (s_state.last_fullscreen_footer_text.empty()) @@ -1089,16 +1119,29 @@ void ImGuiFullscreen::DrawFullscreenFooter() if (prev_opacity < 1.0f) { - const ImVec2 text_size = - font->CalcTextSizeA(font->FontSize, max_width, 0.0f, s_state.fullscreen_footer_text.c_str(), - s_state.fullscreen_footer_text.end_ptr()); - const ImVec2 text_pos = - ImVec2(io.DisplaySize.x - padding * 2.0f - text_size.x, io.DisplaySize.y - font->FontSize - padding); - const float opacity = 1.0f - prev_opacity; - dl->AddText(font, font->FontSize, text_pos + shadow_offset, MulAlpha(UIStyle.ShadowColor, opacity), - s_state.fullscreen_footer_text.c_str(), s_state.fullscreen_footer_text.end_ptr()); - dl->AddText(font, font->FontSize, text_pos, ModAlpha(text_color, opacity), s_state.fullscreen_footer_text.c_str(), - s_state.fullscreen_footer_text.end_ptr()); + if (!s_state.fullscreen_footer_text.empty()) + { + const ImVec2 text_size = + font->CalcTextSizeA(font->FontSize, max_width, 0.0f, s_state.fullscreen_footer_text.c_str(), + s_state.fullscreen_footer_text.end_ptr()); + const ImVec2 text_pos = + ImVec2(io.DisplaySize.x - padding * 2.0f - text_size.x, io.DisplaySize.y - font->FontSize - padding); + const float opacity = 1.0f - prev_opacity; + dl->AddText(font, font->FontSize, text_pos + shadow_offset, MulAlpha(UIStyle.ShadowColor, opacity), + s_state.fullscreen_footer_text.c_str(), s_state.fullscreen_footer_text.end_ptr()); + dl->AddText(font, font->FontSize, text_pos, ModAlpha(text_color, opacity), s_state.fullscreen_footer_text.c_str(), + s_state.fullscreen_footer_text.end_ptr()); + } + + if (!s_state.left_fullscreen_footer_text.empty()) + { + const ImVec2 text_pos = ImVec2(padding, io.DisplaySize.y - font->FontSize - padding); + const float opacity = 1.0f - prev_opacity; + dl->AddText(font, font->FontSize, text_pos + shadow_offset, MulAlpha(UIStyle.ShadowColor, opacity), + s_state.left_fullscreen_footer_text.c_str(), s_state.left_fullscreen_footer_text.end_ptr()); + dl->AddText(font, font->FontSize, text_pos, ModAlpha(text_color, opacity), + s_state.left_fullscreen_footer_text.c_str(), s_state.left_fullscreen_footer_text.end_ptr()); + } } // for next frame diff --git a/src/util/imgui_fullscreen.h b/src/util/imgui_fullscreen.h index b7a4ce616..a92986e57 100644 --- a/src/util/imgui_fullscreen.h +++ b/src/util/imgui_fullscreen.h @@ -239,6 +239,8 @@ void CreateFooterTextString(SmallStringBase& dest, std::span> items, float background_alpha); void SetFullscreenFooterTextIconMapping(std::span> mapping); +void SetFullscreenStatusText(std::string_view text); +void SetFullscreenStatusText(std::span> items); void DrawFullscreenFooter(); void PrerenderMenuButtonBorder();