FullscreenUI: Use InputTextWithIcon() for achievements login

pull/3754/head
Stenzek 3 months ago
parent b3e8543ba5
commit 632aab3a0f
No known key found for this signature in database

@ -220,12 +220,15 @@ struct SettingsLocals
bool cover_downloader_use_serial_names = false;
GPURenderer graphics_adapter_list_cache_renderer = GPURenderer::Count;
InputBindingDialog input_binding_dialog;
std::unique_ptr<std::string> achievements_login_error;
char achievements_login_username[256] = {};
char achievements_login_password[256] = {};
char cover_downloader_template_urls[512] = {};
};
} // namespace
ALIGN_TO_CACHE_LINE static SettingsLocals s_settings_locals;
static char s_cover_downloader_template_urls[512];
} // namespace FullscreenUI
@ -2743,8 +2746,8 @@ void FullscreenUI::DrawCoverDownloaderWindow()
const std::vector<std::string> urls = Core::GetBaseStringListSetting("UI", "CoverDownloaderURL");
if (!urls.empty())
{
StringUtil::Strlcpy(s_cover_downloader_template_urls, StringUtil::JoinString(urls, '\n'),
sizeof(s_cover_downloader_template_urls));
StringUtil::Strlcpy(s_settings_locals.cover_downloader_template_urls, StringUtil::JoinString(urls, '\n'),
sizeof(s_settings_locals.cover_downloader_template_urls));
}
}
@ -2770,7 +2773,8 @@ void FullscreenUI::DrawCoverDownloaderWindow()
ImGui::TextWrapped("%s", FSUI_CSTR("Example: https://www.example-not-a-real-domain.com/covers/${serial}.jpg"));
ImGui::NewLine();
ImGui::InputTextMultiline("##templates", s_cover_downloader_template_urls, sizeof(s_cover_downloader_template_urls),
ImGui::InputTextMultiline("##templates", s_settings_locals.cover_downloader_template_urls,
sizeof(s_settings_locals.cover_downloader_template_urls),
ImVec2(ImGui::GetCurrentWindow()->WorkRect.GetWidth(), LayoutScale(175.0f)));
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + LayoutScale(5.0f));
@ -2781,7 +2785,7 @@ void FullscreenUI::DrawCoverDownloaderWindow()
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + LayoutScale(10.0f));
const bool download_enabled = (std::strlen(s_cover_downloader_template_urls) > 0);
const bool download_enabled = (std::strlen(s_settings_locals.cover_downloader_template_urls) > 0);
BeginHorizontalMenuButtons(2, 200.0f);
ResetFocusHere();
@ -2791,7 +2795,7 @@ void FullscreenUI::DrawCoverDownloaderWindow()
// TODO: Remove release once using move_only_function
std::unique_ptr<ProgressCallback> progress = OpenModalProgressDialog(FSUI_STR("Cover Downloader"), 1000.0f);
Host::QueueAsyncTask([progress = progress.release(),
urls = StringUtil::SplitNewString(s_cover_downloader_template_urls, '\n'),
urls = StringUtil::SplitNewString(s_settings_locals.cover_downloader_template_urls, '\n'),
use_serial_names = s_settings_locals.cover_downloader_use_serial_names]() {
Error error;
if (!GameList::DownloadCovers(
@ -2841,7 +2845,8 @@ void FullscreenUI::DrawCoverDownloaderWindow()
void FullscreenUI::SaveCoverDownloaderURLs()
{
const std::vector<std::string> urls = StringUtil::SplitNewString(s_cover_downloader_template_urls, '\n');
const std::vector<std::string> urls =
StringUtil::SplitNewString(s_settings_locals.cover_downloader_template_urls, '\n');
if (urls != Core::GetBaseStringListSetting("UI", "CoverDownloaderURL"))
Core::SetBaseStringListSettingValue("UI", "CoverDownloaderURL", urls);
}
@ -5317,16 +5322,15 @@ void FullscreenUI::DrawAchievementsLoginWindow()
{
static constexpr const char* LOGIN_PROGRESS_NAME = "AchievementsLogin";
static char username[256] = {};
static char password[256] = {};
static std::unique_ptr<std::string> login_error;
if (!BeginFixedPopupDialog(LayoutScale(LAYOUT_LARGE_POPUP_PADDING), LayoutScale(LAYOUT_LARGE_POPUP_ROUNDING),
LayoutScale(600.0f, 0.0f)))
{
std::memset(username, 0, sizeof(username));
std::memset(password, 0, sizeof(password));
login_error.reset();
// NOTE: Deliberately memset()'ed because it's credentials.
std::memset(s_settings_locals.achievements_login_username, 0,
sizeof(s_settings_locals.achievements_login_username));
std::memset(s_settings_locals.achievements_login_password, 0,
sizeof(s_settings_locals.achievements_login_password));
s_settings_locals.achievements_login_error.reset();
return;
}
@ -5349,8 +5353,9 @@ void FullscreenUI::DrawAchievementsLoginWindow()
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + ra_logo_size.y + LayoutScale(15.0f));
ImGui::PushStyleColor(ImGuiCol_Text, DarkerColor(ImGui::GetStyle().Colors[ImGuiCol_Text]));
ImGui::PushFont(UIStyle.Font, UIStyle.MediumLargeFontSize, UIStyle.NormalFontWeight);
if (!login_error)
if (!s_settings_locals.achievements_login_error)
{
ImGui::TextWrapped(
FSUI_CSTR("Please enter your user name and password for retroachievements.org below. Your password will "
@ -5358,46 +5363,49 @@ void FullscreenUI::DrawAchievementsLoginWindow()
}
else
{
ImGui::TextWrapped("%s", login_error->c_str());
ImGui::TextWrapped("%s", s_settings_locals.achievements_login_error->c_str());
}
ImGui::PopFont();
ImGui::PopStyleColor();
ImGui::ItemSize(ImVec2(0.0f, LayoutScale(LAYOUT_MENU_BUTTON_SPACING * 2.0f)));
const bool is_logging_in = IsBackgroundProgressDialogOpen(LOGIN_PROGRESS_NAME);
BeginMenuButtons();
ResetFocusHere();
ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, LayoutScale(LAYOUT_WIDGET_FRAME_ROUNDING));
ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0f);
const float item_width = LayoutScale(550.0f);
const ImGuiInputTextFlags extra_username_flags =
(ResetFocusHere() ? ImGuiInputTextFlags_AlwaysActivate : 0) | (is_logging_in ? ImGuiInputTextFlags_ReadOnly : 0);
ImGui::SetCursorPosX((ImGui::GetWindowWidth() - item_width) * 0.5f);
ImGui::SetNextItemWidth(item_width);
ImGui::InputTextWithHint("##username", FSUI_CSTR("User Name"), username, sizeof(username),
is_logging_in ? ImGuiInputTextFlags_ReadOnly : 0);
InputTextWithIcon("##username", ICON_FA_ID_CARD, FSUI_CSTR("User Name"),
s_settings_locals.achievements_login_username,
sizeof(s_settings_locals.achievements_login_username), item_width, ImGui::GetFontSize(),
UIStyle.NormalFontWeight, extra_username_flags);
ImGui::NextColumn();
ImGui::SetCursorPosX((ImGui::GetWindowWidth() - item_width) * 0.5f);
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + LayoutScale(10.0f));
ImGui::SetNextItemWidth(item_width);
ImGui::InputTextWithHint("##password", FSUI_CSTR("Password"), password, sizeof(password),
is_logging_in ? (ImGuiInputTextFlags_ReadOnly | ImGuiInputTextFlags_Password) :
ImGuiInputTextFlags_Password);
ImGui::PopStyleVar(2);
InputTextWithIcon(
"##password", ICON_FA_KEY, FSUI_CSTR("Password"), s_settings_locals.achievements_login_password,
sizeof(s_settings_locals.achievements_login_password), item_width, ImGui::GetFontSize(), UIStyle.NormalFontWeight,
is_logging_in ? (ImGuiInputTextFlags_ReadOnly | ImGuiInputTextFlags_Password) : ImGuiInputTextFlags_Password);
ImGui::SetCursorPosY(ImGui::GetCursorPosY() + LayoutScale(15.0f));
const bool login_enabled = (std::strlen(username) > 0 && std::strlen(password) > 0 && !is_logging_in);
const bool login_enabled = (std::strlen(s_settings_locals.achievements_login_username) > 0 &&
std::strlen(s_settings_locals.achievements_login_password) > 0 && !is_logging_in);
EndMenuButtons();
BeginHorizontalMenuButtons(2);
if (MenuButtonWithoutSummary(FSUI_ICONVSTR(ICON_FA_KEY, "Login"), login_enabled, LAYOUT_CENTER_ALIGN_TEXT))
if (HorizontalMenuButton(FSUI_ICONVSTR(ICON_FA_KEY, "Login"), login_enabled))
{
OpenBackgroundProgressDialog(LOGIN_PROGRESS_NAME, FSUI_STR("Logging in to RetroAchievements..."), 0, 0, 0);
Host::RunOnCoreThread([username = std::string(username), password = std::string(password)]() {
Host::RunOnCoreThread([username = std::string(s_settings_locals.achievements_login_username),
password = std::string(s_settings_locals.achievements_login_password)]() {
Error error;
const bool result = Achievements::Login(username.c_str(), password.c_str(), &error);
VideoThread::RunOnThread([result, error = std::move(error)]() {
@ -5409,17 +5417,17 @@ void FullscreenUI::DrawAchievementsLoginWindow()
return;
}
login_error = std::make_unique<std::string>(
s_settings_locals.achievements_login_error = std::make_unique<std::string>(
fmt::format(FSUI_FSTR("Login Failed.\nError: {}\nPlease check your username and password, and try again."),
error.GetDescription()));
});
});
}
if (MenuButtonWithoutSummary(FSUI_ICONVSTR(ICON_FA_XMARK, "Cancel"), !is_logging_in, LAYOUT_CENTER_ALIGN_TEXT))
if (HorizontalMenuButton(FSUI_ICONVSTR(ICON_FA_XMARK, "Cancel"), !is_logging_in))
CloseFixedPopupDialog();
EndMenuButtons();
EndHorizontalMenuButtons();
EndFixedPopupDialog();
}

Loading…
Cancel
Save