From 92e3cbea45885f6e15ab1b0bbd824b654884f01e Mon Sep 17 00:00:00 2001 From: Hyper <34012267+hyperbx@users.noreply.github.com> Date: Wed, 29 Jan 2025 12:03:35 +0000 Subject: [PATCH] installer_wizard: add toggle light to language selection --- UnleashedRecomp/ui/imgui_utils.cpp | 9 +++++---- UnleashedRecomp/ui/imgui_utils.h | 2 +- UnleashedRecomp/ui/installer_wizard.cpp | 10 ++++++---- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/UnleashedRecomp/ui/imgui_utils.cpp b/UnleashedRecomp/ui/imgui_utils.cpp index be38d09..683eba7 100644 --- a/UnleashedRecomp/ui/imgui_utils.cpp +++ b/UnleashedRecomp/ui/imgui_utils.cpp @@ -510,10 +510,11 @@ void DrawSelectionContainer(ImVec2 min, ImVec2 max, bool fadeTop) drawList->AddImage(g_texSelectFill.get(), { max.x - commonWidth, max.y - commonHeight }, { max.x, max.y }, GET_UV_COORDS(br), colour); } -void DrawToggleLight(ImVec2 pos, bool isEnabled) +void DrawToggleLight(ImVec2 pos, bool isEnabled, float alpha) { auto drawList = ImGui::GetForegroundDrawList(); auto lightSize = Scale(14); + auto lightCol = IM_COL32(255, 255, 255, 255 * alpha); ImVec2 min = { pos.x, pos.y }; ImVec2 max = { min.x + lightSize, min.y + lightSize }; @@ -527,17 +528,17 @@ void DrawToggleLight(ImVec2 pos, bool isEnabled) ImVec2 lightGlowMax = { min.x + lightGlowSize, min.y + lightGlowSize }; SetAdditive(true); - drawList->AddImage(g_texLight.get(), lightGlowMin, lightGlowMax, GET_UV_COORDS(lightGlowUVs), IM_COL32(255, 255, 0, 127)); + drawList->AddImage(g_texLight.get(), lightGlowMin, lightGlowMax, GET_UV_COORDS(lightGlowUVs), IM_COL32(255, 255, 0, 127 * alpha)); SetAdditive(false); auto lightOnUVs = PIXELS_TO_UV_COORDS(64, 64, 14, 0, 14, 14); - drawList->AddImage(g_texLight.get(), min, max, GET_UV_COORDS(lightOnUVs)); + drawList->AddImage(g_texLight.get(), min, max, GET_UV_COORDS(lightOnUVs), lightCol); } else { auto lightOffUVs = PIXELS_TO_UV_COORDS(64, 64, 0, 0, 14, 14); - drawList->AddImage(g_texLight.get(), min, max, GET_UV_COORDS(lightOffUVs)); + drawList->AddImage(g_texLight.get(), min, max, GET_UV_COORDS(lightOffUVs), lightCol); } } diff --git a/UnleashedRecomp/ui/imgui_utils.h b/UnleashedRecomp/ui/imgui_utils.h index cb84497..244487c 100644 --- a/UnleashedRecomp/ui/imgui_utils.h +++ b/UnleashedRecomp/ui/imgui_utils.h @@ -58,4 +58,4 @@ ImVec2 Lerp(const ImVec2& a, const ImVec2& b, float t); ImU32 ColourLerp(ImU32 c0, ImU32 c1, float t); void DrawVersionString(const ImFont* font, const ImU32 col = IM_COL32(255, 255, 255, 70)); void DrawSelectionContainer(ImVec2 min, ImVec2 max, bool fadeTop = false); -void DrawToggleLight(ImVec2 pos, bool isEnabled); +void DrawToggleLight(ImVec2 pos, bool isEnabled, float alpha = 1.0f); diff --git a/UnleashedRecomp/ui/installer_wizard.cpp b/UnleashedRecomp/ui/installer_wizard.cpp index cfee102..801194b 100644 --- a/UnleashedRecomp/ui/installer_wizard.cpp +++ b/UnleashedRecomp/ui/installer_wizard.cpp @@ -1108,8 +1108,10 @@ static void DrawLanguagePicker() bool buttonPressed = false; if (g_currentPage == WizardPage::SelectLanguage) { - bool buttonPressed; + float alphaMotion = ComputeMotionInstaller(g_appearTime, g_disappearTime, CONTAINER_INNER_TIME, CONTAINER_INNER_DURATION); float minX, maxX; + bool buttonPressed; + for (int i = 0; i < 6; i++) { ComputeButtonColumnCoordinates((i < 3) ? ButtonColumnLeft : ButtonColumnRight, minX, maxX); @@ -1118,13 +1120,13 @@ static void DrawLanguagePicker() ImVec2 min = { minX, g_aspectRatioOffsetY + Scale(CONTAINER_Y + CONTAINER_HEIGHT - CONTAINER_BUTTON_GAP - BUTTON_HEIGHT - minusY) }; ImVec2 max = { maxX, g_aspectRatioOffsetY + Scale(CONTAINER_Y + CONTAINER_HEIGHT - CONTAINER_BUTTON_GAP - minusY) }; - // TODO: The active button should change its style to show an enabled toggle if it matches the current language. + auto lightSize = Scale(14); DrawButton(min, max, LANGUAGE_TEXT[i], false, true, buttonPressed, FLT_MAX, LANGUAGE_ENUM[i] == ELanguage::English); + DrawToggleLight({ min.x + lightSize, min.y + ((max.y - min.y) - lightSize) / 2 + Scale(1) }, Config::Language == LANGUAGE_ENUM[i], alphaMotion); + if (buttonPressed) - { Config::Language = LANGUAGE_ENUM[i]; - } } } }