FullscreenUI: Add translucency/shadow to achievement notifications

This commit is contained in:
Stenzek 2025-03-15 16:06:50 +10:00
parent a1e5bb7bc0
commit 27fc7de07a
No known key found for this signature in database

View File

@ -3400,7 +3400,7 @@ void ImGuiFullscreen::DrawNotifications(ImVec2& position, float spacing)
const ImVec2 box_min(position.x, actual_y); const ImVec2 box_min(position.x, actual_y);
const ImVec2 box_max(box_min.x + box_width, box_min.y + box_height); const ImVec2 box_max(box_min.x + box_width, box_min.y + box_height);
const u32 background_color = ImGui::GetColorU32(ModAlpha(UIStyle.ToastBackgroundColor, opacity)); const u32 background_color = ImGui::GetColorU32(ModAlpha(UIStyle.ToastBackgroundColor, opacity * 0.95f));
ImDrawList* dl = ImGui::GetForegroundDrawList(); ImDrawList* dl = ImGui::GetForegroundDrawList();
dl->AddRectFilled(box_min, box_max, background_color, rounding, ImDrawFlags_RoundCornersAll); dl->AddRectFilled(box_min, box_max, background_color, rounding, ImDrawFlags_RoundCornersAll);
@ -3421,17 +3421,20 @@ void ImGuiFullscreen::DrawNotifications(ImVec2& position, float spacing)
} }
} }
const u32 text_col = ImGui::GetColorU32(ModAlpha(UIStyle.ToastTextColor, opacity)); const u32 title_col = ImGui::GetColorU32(ModAlpha(UIStyle.ToastTextColor, opacity));
const u32 text_col = ImGui::GetColorU32(ModAlpha(DarkerColor(UIStyle.ToastTextColor), opacity));
const ImVec2 title_min(badge_max.x + horizontal_spacing, box_min.y + vertical_padding); const ImVec2 title_pos = ImVec2(badge_max.x + horizontal_spacing, box_min.y + vertical_padding);
const ImVec2 title_max(title_min.x + title_size.x, title_min.y + title_size.y); const ImRect title_bb = ImRect(title_pos, title_pos + title_size);
dl->AddText(title_font, title_font->FontSize, title_min, text_col, notif.title.c_str(), RenderShadowedTextClipped(dl, title_font, title_bb.Min, title_bb.Max, title_col, notif.title.c_str(),
notif.title.c_str() + notif.title.size(), max_text_width); notif.title.c_str() + notif.title.size(), &title_size, ImVec2(0.0f, 0.0f), max_text_width,
&title_bb);
const ImVec2 text_min(badge_max.x + horizontal_spacing, title_max.y + vertical_spacing); const ImVec2 text_pos = ImVec2(badge_max.x + horizontal_spacing, title_bb.Max.y + vertical_spacing);
const ImVec2 text_max(text_min.x + text_size.x, text_min.y + text_size.y); const ImRect text_bb = ImRect(text_pos, text_pos + text_size);
dl->AddText(text_font, text_font->FontSize, text_min, text_col, notif.text.c_str(), RenderShadowedTextClipped(dl, text_font, text_bb.Min, text_bb.Max, text_col, notif.text.c_str(),
notif.text.c_str() + notif.text.size(), max_text_width); notif.text.c_str() + notif.text.size(), &text_size, ImVec2(0.0f, 0.0f), max_text_width,
&text_bb);
if (clip_box) if (clip_box)
dl->PopClipRect(); dl->PopClipRect();
@ -3498,24 +3501,28 @@ void ImGuiFullscreen::DrawToast()
const ImVec2 box_pos((display_size.x - box_size.x) * 0.5f, (display_size.y - margin - box_size.y)); const ImVec2 box_pos((display_size.x - box_size.x) * 0.5f, (display_size.y - margin - box_size.y));
ImDrawList* dl = ImGui::GetForegroundDrawList(); ImDrawList* dl = ImGui::GetForegroundDrawList();
dl->AddRectFilled(box_pos, box_pos + box_size, ImGui::GetColorU32(ModAlpha(UIStyle.ToastBackgroundColor, alpha)), dl->AddRectFilled(box_pos, box_pos + box_size,
padding); ImGui::GetColorU32(ModAlpha(UIStyle.ToastBackgroundColor, alpha * 0.95f)), padding);
const u32 text_col = ImGui::GetColorU32(ModAlpha(UIStyle.ToastTextColor, alpha)); const u32 text_col = ImGui::GetColorU32(ModAlpha(UIStyle.ToastTextColor, alpha));
if (!s_state.toast_title.empty()) if (!s_state.toast_title.empty())
{ {
const float offset = (comb_size.x - title_size.x) * 0.5f; const float offset = (comb_size.x - title_size.x) * 0.5f;
dl->AddText(title_font, title_font->FontSize, box_pos + ImVec2(offset + padding, padding), text_col, const ImVec2 title_pos = box_pos + ImVec2(offset + padding, padding);
s_state.toast_title.c_str(), s_state.toast_title.c_str() + s_state.toast_title.length(), max_width); const ImRect title_bb = ImRect(title_pos, title_pos + title_size);
RenderShadowedTextClipped(dl, title_font, title_bb.Min, title_bb.Max, text_col, s_state.toast_title.c_str(),
s_state.toast_title.c_str() + s_state.toast_title.length(), &title_size,
ImVec2(0.0f, 0.0f), max_width, &title_bb);
} }
if (!s_state.toast_message.empty()) if (!s_state.toast_message.empty())
{ {
const float offset = (comb_size.x - message_size.x) * 0.5f; const float offset = (comb_size.x - message_size.x) * 0.5f;
dl->AddText(message_font, message_font->FontSize, const ImVec2 message_pos = box_pos + ImVec2(offset + padding, padding + spacing + title_size.y);
box_pos + ImVec2(offset + padding, padding + spacing + title_size.y), text_col, const ImRect message_bb = ImRect(message_pos, message_pos + message_size);
s_state.toast_message.c_str(), s_state.toast_message.c_str() + s_state.toast_message.length(), RenderShadowedTextClipped(dl, message_font, message_bb.Min, message_bb.Max, text_col, s_state.toast_message.c_str(),
max_width); s_state.toast_message.c_str() + s_state.toast_message.length(), &message_size,
ImVec2(0.0f, 0.0f), max_width, &message_bb);
} }
} }