Skip to content

Commit 61de096

Browse files
committed
FullscreenUI: Add status text (left side of footer)
1 parent 4f00a7c commit 61de096

File tree

2 files changed

+65
-20
lines changed

2 files changed

+65
-20
lines changed

src/util/imgui_fullscreen.cpp

Lines changed: 63 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
10211036
void 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
10361051
void 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

src/util/imgui_fullscreen.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,8 @@ void CreateFooterTextString(SmallStringBase& dest, std::span<const std::pair<con
239239
void SetFullscreenFooterText(std::string_view text, float background_alpha);
240240
void SetFullscreenFooterText(std::span<const std::pair<const char*, std::string_view>> items, float background_alpha);
241241
void SetFullscreenFooterTextIconMapping(std::span<const std::pair<const char*, const char*>> mapping);
242+
void SetFullscreenStatusText(std::string_view text);
243+
void SetFullscreenStatusText(std::span<const std::pair<const char*, std::string_view>> items);
242244
void DrawFullscreenFooter();
243245

244246
void PrerenderMenuButtonBorder();

0 commit comments

Comments
 (0)