From fadc8d5a4dbe43289c088dc3433bbc371b9333d1 Mon Sep 17 00:00:00 2001 From: Gliniak Date: Wed, 4 Dec 2024 09:53:26 +0100 Subject: [PATCH] [XAM/UI] Simplified profile menu drawing logic - Removed size precalculation. - Fixed image ratio to 1:1. - Removed scaling code that doesn't work anyway. If scaling is needed then it is in achievement earned notification code. - Removed hardcoded -1 in user_index comparation. --- src/xenia/kernel/xam/xam_ui.cc | 86 +++++++++++++++------------------- 1 file changed, 37 insertions(+), 49 deletions(-) diff --git a/src/xenia/kernel/xam/xam_ui.cc b/src/xenia/kernel/xam/xam_ui.cc index d17e7b86c..33f364d49 100644 --- a/src/xenia/kernel/xam/xam_ui.cc +++ b/src/xenia/kernel/xam/xam_ui.cc @@ -894,33 +894,52 @@ bool xeDrawProfileContent(ui::ImGuiDrawer* imgui_drawer, const uint64_t xuid, auto profile_manager = kernel_state()->xam_state()->profile_manager(); const float default_image_size = 75.0f; - auto position = ImGui::GetCursorPos(); - const float selectable_height = - ImGui::GetTextLineHeight() * - 5; // 3 is for amount of lines of text behind image/object. - const auto font = imgui_drawer->GetIO().Fonts->Fonts[0]; + const ImVec2 drawing_start_position = ImGui::GetCursorPos(); + ImVec2 current_drawing_position = ImGui::GetCursorPos(); - const auto text_size = font->CalcTextSizeA( - font->FontSize, FLT_MAX, -1.0f, - fmt::format("XUID: {:016X}\n", 0xB13EBABEBABEBABE).c_str()); + // In the future it can be replaced with profile icon. + ImGui::Image(user_index < XUserMaxUserCount + ? imgui_drawer->GetNotificationIcon(user_index) + : nullptr, + ImVec2(default_image_size, default_image_size)); - const auto image_scale = selectable_height / default_image_size; - const auto image_size = ImVec2(default_image_size * image_scale, - default_image_size * image_scale); + ImGui::SameLine(); + current_drawing_position = ImGui::GetCursorPos(); + ImGui::TextUnformatted( + fmt::format("User: {}\n", account->GetGamertagString()).c_str()); + + ImGui::SameLine(); + ImGui::SetCursorPos(current_drawing_position); + ImGui::SetCursorPosY(current_drawing_position.y + ImGui::GetTextLineHeight()); + ImGui::TextUnformatted(fmt::format("XUID: {:016X} \n", xuid).c_str()); + + ImGui::SameLine(); + ImGui::SetCursorPos(current_drawing_position); + ImGui::SetCursorPosY(current_drawing_position.y + + 2 * ImGui::GetTextLineHeight()); + + if (user_index != XUserIndexAny) { + ImGui::TextUnformatted( + fmt::format("Assigned to slot: {}\n", user_index + 1).c_str()); + } else { + ImGui::TextUnformatted(fmt::format("Profile is not signed in").c_str()); + } + + const ImVec2 drawing_end_position = ImGui::GetCursorPos(); if (xuid && selected_xuid) { - // This includes 10% to include empty spaces between border and elements. - auto selectable_region_size = - ImVec2((image_size.x + text_size.x) * 1.10f, selectable_height); + ImGui::SetCursorPos(drawing_start_position); - if (ImGui::Selectable("##Selectable", *selected_xuid == xuid, - ImGuiSelectableFlags_SpanAllColumns, - selectable_region_size)) { + if (ImGui::Selectable( + "##Selectable", *selected_xuid == xuid, + ImGuiSelectableFlags_SpanAllColumns, + ImVec2(drawing_end_position.x - drawing_start_position.x, + drawing_end_position.y - drawing_start_position.y))) { *selected_xuid = xuid; } if (ImGui::BeginPopupContextItem("Profile Menu")) { - if (user_index == static_cast(-1)) { + if (user_index == XUserIndexAny) { if (ImGui::MenuItem("Login")) { profile_manager->Login(xuid); } @@ -990,37 +1009,6 @@ bool xeDrawProfileContent(ui::ImGuiDrawer* imgui_drawer, const uint64_t xuid, } } - ImGui::SameLine(); - ImGui::SetCursorPos(position); - - // In the future it can be replaced with profile icon. - ImGui::Image(user_index < XUserMaxUserCount - ? imgui_drawer->GetNotificationIcon(user_index) - : nullptr, - ImVec2(default_image_size * image_scale, - default_image_size * image_scale)); - - ImGui::SameLine(); - position = ImGui::GetCursorPos(); - ImGui::TextUnformatted( - fmt::format("User: {}\n", account->GetGamertagString()).c_str()); - - ImGui::SameLine(); - ImGui::SetCursorPos(position); - ImGui::SetCursorPosY(position.y + ImGui::GetTextLineHeight()); - ImGui::TextUnformatted(fmt::format("XUID: {:016X}\n", xuid).c_str()); - - ImGui::SameLine(); - ImGui::SetCursorPos(position); - ImGui::SetCursorPosY(position.y + 2 * ImGui::GetTextLineHeight()); - - if (user_index != static_cast(-1)) { - ImGui::TextUnformatted( - fmt::format("Assigned to slot: {}\n", user_index + 1).c_str()); - } else { - ImGui::TextUnformatted(fmt::format("Profile is not signed in").c_str()); - } - return true; }