From c6bd6d4a3b3bb0de2dfda4573c7984521b3bfde9 Mon Sep 17 00:00:00 2001 From: WerWolv Date: Thu, 29 Jul 2021 00:39:58 +0200 Subject: [PATCH] ui: Added banner to welcome screen, improved laggy animations --- include/window.hpp | 3 +++ res/resources/banner_dark.png | Bin 0 -> 17511 bytes res/resources/banner_light.png | Bin 0 -> 15364 bytes source/window.cpp | 44 +++++++++++++++++++++++++++------ 4 files changed, 39 insertions(+), 8 deletions(-) create mode 100644 res/resources/banner_dark.png create mode 100644 res/resources/banner_light.png diff --git a/include/window.hpp b/include/window.hpp index 391552441..722c0956c 100644 --- a/include/window.hpp +++ b/include/window.hpp @@ -51,6 +51,9 @@ namespace hex { bool m_prevKeysDown[512]; std::string m_availableUpdate; + + u32 m_bannerWidth = 0, m_bannerHeight = 0; + void *m_bannerTexture = nullptr; }; } \ No newline at end of file diff --git a/res/resources/banner_dark.png b/res/resources/banner_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..8abd6a84516ecd269297694beba0eef1fa5388c7 GIT binary patch literal 17511 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 gzpU;1E7TOO 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 literal 0 HcmV?d00001 diff --git a/source/window.cpp b/source/window.cpp index 980fdfaac..1eef8a37e 100644 --- a/source/window.cpp +++ b/source/window.cpp @@ -74,26 +74,46 @@ namespace hex { { auto theme = ContentRegistry::Settings::getSetting("hex.builtin.setting.interface", "hex.builtin.setting.interface.color"); + if (this->m_bannerTexture != nullptr) + ImGui::UnloadImage(this->m_bannerTexture); + if (theme.is_number()) { + std::string bannerFile; + switch (static_cast(theme)) { default: case 0: /* Dark theme */ ImGui::StyleColorsDark(); ImGui::StyleCustomColorsDark(); ImPlot::StyleColorsDark(); + bannerFile = "/banner_dark.png"; break; case 1: /* Light theme */ ImGui::StyleColorsLight(); ImGui::StyleCustomColorsLight(); ImPlot::StyleColorsLight(); + bannerFile = "/banner_light.png"; break; case 2: /* Classic theme */ ImGui::StyleColorsClassic(); ImGui::StyleCustomColorsClassic(); ImPlot::StyleColorsClassic(); + bannerFile = "/banner_dark.png"; break; } + ImGui::GetStyle().Colors[ImGuiCol_DockingEmptyBg] = ImGui::GetStyle().Colors[ImGuiCol_WindowBg]; + + for (const auto &path : hex::getPath(hex::ImHexPath::Resources)) { + std::tie(this->m_bannerTexture, this->m_bannerWidth, this->m_bannerHeight) = ImGui::LoadImageFromPath((path + bannerFile).c_str()); + if (this->m_bannerTexture != nullptr) + break; + } + + if (this->m_bannerTexture == nullptr) { + log::fatal("Failed to load banner texture!"); + exit(EXIT_FAILURE); + } } } @@ -180,6 +200,8 @@ namespace hex { EventManager::unsubscribe(this); EventManager::unsubscribe(this); EventManager::unsubscribe(this); + + ImGui::UnloadImage(this->m_bannerTexture); } void Window::loop() { @@ -188,7 +210,7 @@ namespace hex { if (!glfwGetWindowAttrib(this->m_window, GLFW_VISIBLE) || glfwGetWindowAttrib(this->m_window, GLFW_ICONIFIED)) glfwWaitEvents(); else - glfwWaitEventsTimeout(this->m_lastFrameTime - glfwGetTime() + 1 / 5.0); + glfwWaitEventsTimeout(ImGui::IsPopupOpen(ImGuiID(0), ImGuiPopupFlags_AnyPopupId) ? 0 : (this->m_lastFrameTime - glfwGetTime() + 1 / 5.0)); this->frameBegin(); @@ -330,7 +352,7 @@ namespace hex { ImFormatString(title, IM_ARRAYSIZE(title), "%s/DockSpace_%08X", ImGui::GetCurrentWindow()->Name, ImGui::GetID("MainDock")); if (ImGui::Begin(title)) { ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(10 * this->m_globalScale, 10 * this->m_globalScale)); - if (ImGui::BeginChild("Welcome Screen", ImVec2(0, 0), false, ImGuiWindowFlags_AlwaysUseWindowPadding | ImGuiWindowFlags_NoDecoration)) { + if (ImGui::BeginChild("Welcome Screen", ImVec2(0, 0), false, ImGuiWindowFlags_AlwaysUseWindowPadding | ImGuiWindowFlags_NoScrollWithMouse)) { this->drawWelcomeScreen(); } ImGui::EndChild(); @@ -413,16 +435,22 @@ namespace hex { } void Window::drawWelcomeScreen() { - ImGui::UnderlinedText("hex.welcome.header.main"_lang, ImGui::GetStyleColorVec4(ImGuiCol_Text)); - - ImGui::NewLine(); - const auto availableSpace = ImGui::GetContentRegionAvail(); + ImGui::Image(this->m_bannerTexture, ImVec2(this->m_bannerWidth / 2, this->m_bannerHeight / 2)); + ImGui::Indent(); - if (ImGui::BeginTable("Welcome Left", 1, ImGuiTableFlags_NoBordersInBody, ImVec2(availableSpace.x / 2, availableSpace.y))) { + if (ImGui::BeginTable("Welcome Left", 1, ImGuiTableFlags_NoBordersInBody, ImVec2(availableSpace.x / 2, 0))) { + + ImGui::TableNextRow(ImGuiTableRowFlags_None, ImGui::GetTextLineHeightWithSpacing() * 3); + ImGui::TableNextColumn(); + + ImGui::TextWrapped("A Hex Editor for Reverse Engineers, Programmers and people that value their eye sight when working at 3 AM."); + ImGui::TableNextRow(ImGuiTableRowFlags_None, ImGui::GetTextLineHeightWithSpacing() * 5); ImGui::TableNextColumn(); + + ImGui::TextUnformatted("hex.welcome.header.start"_lang); { if (ImGui::BulletHyperlink("hex.welcome.start.create_file"_lang)) @@ -505,7 +533,7 @@ namespace hex { ImGui::EndTable(); } ImGui::SameLine(); - if (ImGui::BeginTable("Welcome Right", 1, ImGuiTableFlags_NoBordersInBody, ImVec2(availableSpace.x / 2, availableSpace.y))) { + if (ImGui::BeginTable("Welcome Right", 1, ImGuiTableFlags_NoBordersInBody, ImVec2(availableSpace.x / 2, 0))) { ImGui::TableNextRow(ImGuiTableRowFlags_None, ImGui::GetTextLineHeightWithSpacing() * 5); ImGui::TableNextColumn(); ImGui::TextUnformatted("hex.welcome.header.customize"_lang);