diff --git a/src/ui.cpp b/src/ui.cpp index 15359a8..a341fd6 100644 --- a/src/ui.cpp +++ b/src/ui.cpp @@ -706,13 +706,14 @@ void Ui::text_draw(Play& play, ImVec2 screen) ImGui::PopFont(); } +// Fading messages stacked down from the top right, newest first. void Ui::toasts_draw(Play& play) { ImGuiStyle& style = ImGui::GetStyle(); ImGuiViewport* viewport = ImGui::GetMainViewport(); ImDrawList* drawList = ImGui::GetForegroundDrawList(); float height = ImGui::GetTextLineHeightWithSpacing() + style.WindowPadding.y * 2; - float bottom = viewport->WorkPos.y + viewport->WorkSize.y - play.inset - TOGGLE_HEIGHT - style.WindowPadding.y; + float right = viewport->WorkPos.x + viewport->WorkSize.x - style.WindowPadding.x; for (int i = 0; i < (int)play.toasts.size(); i++) { Toast& toast = play.toasts[i]; @@ -721,9 +722,10 @@ void Ui::toasts_draw(Play& play) color.w = (float)toast.life / TOAST_LIFE; return ImGui::GetColorU32(color); }; - ImVec2 position = {viewport->WorkPos.x + style.WindowPadding.x, bottom - height * (play.toasts.size() - i)}; - ImVec2 end = {position.x + ImGui::CalcTextSize(toast.message.c_str()).x + style.WindowPadding.x * 2, - position.y + height}; + float width = ImGui::CalcTextSize(toast.message.c_str()).x + style.WindowPadding.x * 2; + float age = play.toasts.size() - 1 - i; + ImVec2 position = {right - width, viewport->WorkPos.y + style.WindowPadding.y + height * age}; + ImVec2 end = {right, position.y + height}; drawList->AddRectFilled(position, end, color_get(ImGuiCol_WindowBg), style.WindowRounding); drawList->AddRect(position, end, color_get(ImGuiCol_Border), style.WindowRounding); drawList->AddText({position.x + style.WindowPadding.x, position.y + style.WindowPadding.y},