@@ -133,6 +133,8 @@ struct ALIGN_TO_CACHE_LINE UIState
133133
134134 SmallString fullscreen_footer_text;
135135 SmallString last_fullscreen_footer_text;
136+ SmallString left_fullscreen_footer_text;
137+ SmallString last_left_fullscreen_footer_text;
136138 std::vector<std::pair<std::string_view, std::string_view>> fullscreen_footer_icon_mapping;
137139 float fullscreen_text_change_time;
138140 float fullscreen_text_alpha;
@@ -242,6 +244,8 @@ void ImGuiFullscreen::Shutdown(bool clear_state)
242244 s_state.background_progress_dialogs .clear ();
243245 s_state.fullscreen_footer_text .clear ();
244246 s_state.last_fullscreen_footer_text .clear ();
247+ s_state.left_fullscreen_footer_text .clear ();
248+ s_state.last_left_fullscreen_footer_text .clear ();
245249 s_state.fullscreen_text_change_time = 0 .0f ;
246250 CloseInputDialog ();
247251 CloseMessageDialog ();
@@ -646,6 +650,7 @@ void ImGuiFullscreen::EndLayout()
646650
647651 PopResetLayout ();
648652
653+ s_state.left_fullscreen_footer_text .clear ();
649654 s_state.fullscreen_footer_text .clear ();
650655
651656 s_state.rendered_menu_item_border = false ;
@@ -1018,6 +1023,16 @@ void ImGuiFullscreen::SetFullscreenFooterText(std::span<const std::pair<const ch
10181023 s_state.fullscreen_text_alpha = background_alpha;
10191024}
10201025
1026+ void ImGuiFullscreen::SetFullscreenStatusText (std::string_view text)
1027+ {
1028+ s_state.left_fullscreen_footer_text = text;
1029+ }
1030+
1031+ void ImGuiFullscreen::SetFullscreenStatusText (std::span<const std::pair<const char *, std::string_view>> items)
1032+ {
1033+ CreateFooterTextString (s_state.left_fullscreen_footer_text , items);
1034+ }
1035+
10211036void ImGuiFullscreen::SetFullscreenFooterTextIconMapping (std::span<const std::pair<const char *, const char *>> mapping)
10221037{
10231038 if (mapping.empty ())
@@ -1036,9 +1051,10 @@ void ImGuiFullscreen::SetFullscreenFooterTextIconMapping(std::span<const std::pa
10361051void ImGuiFullscreen::DrawFullscreenFooter ()
10371052{
10381053 const ImGuiIO& io = ImGui::GetIO ();
1039- if (s_state.fullscreen_footer_text .empty ())
1054+ if (s_state.fullscreen_footer_text .empty () && s_state. left_fullscreen_footer_text . empty () )
10401055 {
10411056 s_state.last_fullscreen_footer_text .clear ();
1057+ s_state.last_left_fullscreen_footer_text .clear ();
10421058 return ;
10431059 }
10441060
@@ -1071,15 +1087,29 @@ void ImGuiFullscreen::DrawFullscreenFooter()
10711087 prev_opacity = s_state.fullscreen_text_change_time * (1 .0f / TRANSITION_TIME);
10721088 if (prev_opacity > 0 .0f )
10731089 {
1074- const ImVec2 text_size =
1075- font->CalcTextSizeA (font->FontSize , max_width, 0 .0f , s_state.last_fullscreen_footer_text .c_str (),
1076- s_state.last_fullscreen_footer_text .end_ptr ());
1077- const ImVec2 text_pos =
1078- ImVec2 (io.DisplaySize .x - padding * 2 .0f - text_size.x , io.DisplaySize .y - font->FontSize - padding);
1079- dl->AddText (font, font->FontSize , text_pos + shadow_offset, MulAlpha (UIStyle.ShadowColor , prev_opacity),
1080- s_state.last_fullscreen_footer_text .c_str (), s_state.last_fullscreen_footer_text .end_ptr ());
1081- dl->AddText (font, font->FontSize , text_pos, ModAlpha (text_color, prev_opacity),
1082- s_state.last_fullscreen_footer_text .c_str (), s_state.last_fullscreen_footer_text .end_ptr ());
1090+ if (!s_state.last_fullscreen_footer_text .empty ())
1091+ {
1092+ const ImVec2 text_size =
1093+ font->CalcTextSizeA (font->FontSize , max_width, 0 .0f , s_state.last_fullscreen_footer_text .c_str (),
1094+ s_state.last_fullscreen_footer_text .end_ptr ());
1095+ const ImVec2 text_pos =
1096+ ImVec2 (io.DisplaySize .x - padding * 2 .0f - text_size.x , io.DisplaySize .y - font->FontSize - padding);
1097+ dl->AddText (font, font->FontSize , text_pos + shadow_offset, MulAlpha (UIStyle.ShadowColor , prev_opacity),
1098+ s_state.last_fullscreen_footer_text .c_str (), s_state.last_fullscreen_footer_text .end_ptr ());
1099+ dl->AddText (font, font->FontSize , text_pos, ModAlpha (text_color, prev_opacity),
1100+ s_state.last_fullscreen_footer_text .c_str (), s_state.last_fullscreen_footer_text .end_ptr ());
1101+ }
1102+
1103+ if (!s_state.last_left_fullscreen_footer_text .empty ())
1104+ {
1105+ const ImVec2 text_pos = ImVec2 (padding, io.DisplaySize .y - font->FontSize - padding);
1106+ dl->AddText (font, font->FontSize , text_pos + shadow_offset, MulAlpha (UIStyle.ShadowColor , prev_opacity),
1107+ s_state.last_left_fullscreen_footer_text .c_str (),
1108+ s_state.last_left_fullscreen_footer_text .end_ptr ());
1109+ dl->AddText (font, font->FontSize , text_pos, ModAlpha (text_color, prev_opacity),
1110+ s_state.last_left_fullscreen_footer_text .c_str (),
1111+ s_state.last_left_fullscreen_footer_text .end_ptr ());
1112+ }
10831113 }
10841114 }
10851115 else if (s_state.last_fullscreen_footer_text .empty ())
@@ -1089,16 +1119,29 @@ void ImGuiFullscreen::DrawFullscreenFooter()
10891119
10901120 if (prev_opacity < 1 .0f )
10911121 {
1092- const ImVec2 text_size =
1093- font->CalcTextSizeA (font->FontSize , max_width, 0 .0f , s_state.fullscreen_footer_text .c_str (),
1094- s_state.fullscreen_footer_text .end_ptr ());
1095- const ImVec2 text_pos =
1096- ImVec2 (io.DisplaySize .x - padding * 2 .0f - text_size.x , io.DisplaySize .y - font->FontSize - padding);
1097- const float opacity = 1 .0f - prev_opacity;
1098- dl->AddText (font, font->FontSize , text_pos + shadow_offset, MulAlpha (UIStyle.ShadowColor , opacity),
1099- s_state.fullscreen_footer_text .c_str (), s_state.fullscreen_footer_text .end_ptr ());
1100- dl->AddText (font, font->FontSize , text_pos, ModAlpha (text_color, opacity), s_state.fullscreen_footer_text .c_str (),
1101- s_state.fullscreen_footer_text .end_ptr ());
1122+ if (!s_state.fullscreen_footer_text .empty ())
1123+ {
1124+ const ImVec2 text_size =
1125+ font->CalcTextSizeA (font->FontSize , max_width, 0 .0f , s_state.fullscreen_footer_text .c_str (),
1126+ s_state.fullscreen_footer_text .end_ptr ());
1127+ const ImVec2 text_pos =
1128+ ImVec2 (io.DisplaySize .x - padding * 2 .0f - text_size.x , io.DisplaySize .y - font->FontSize - padding);
1129+ const float opacity = 1 .0f - prev_opacity;
1130+ dl->AddText (font, font->FontSize , text_pos + shadow_offset, MulAlpha (UIStyle.ShadowColor , opacity),
1131+ s_state.fullscreen_footer_text .c_str (), s_state.fullscreen_footer_text .end_ptr ());
1132+ dl->AddText (font, font->FontSize , text_pos, ModAlpha (text_color, opacity), s_state.fullscreen_footer_text .c_str (),
1133+ s_state.fullscreen_footer_text .end_ptr ());
1134+ }
1135+
1136+ if (!s_state.left_fullscreen_footer_text .empty ())
1137+ {
1138+ const ImVec2 text_pos = ImVec2 (padding, io.DisplaySize .y - font->FontSize - padding);
1139+ const float opacity = 1 .0f - prev_opacity;
1140+ dl->AddText (font, font->FontSize , text_pos + shadow_offset, MulAlpha (UIStyle.ShadowColor , opacity),
1141+ s_state.left_fullscreen_footer_text .c_str (), s_state.left_fullscreen_footer_text .end_ptr ());
1142+ dl->AddText (font, font->FontSize , text_pos, ModAlpha (text_color, opacity),
1143+ s_state.left_fullscreen_footer_text .c_str (), s_state.left_fullscreen_footer_text .end_ptr ());
1144+ }
11021145 }
11031146
11041147 // for next frame
0 commit comments