Skip to content

Commit

Permalink
Use ResourceManager class instead of ResourceUtils
Browse files Browse the repository at this point in the history
  • Loading branch information
baderouaich committed Jul 16, 2024
1 parent 0a38ab5 commit cd17a9e
Show file tree
Hide file tree
Showing 7 changed files with 30 additions and 102 deletions.
73 changes: 2 additions & 71 deletions src/Application/Application.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ Application::Application(const WindowSettings& window_settings)
// Initializers
this->InitWindow(window_settings);
this->InitImGuiRenderer();
this->InitImGuiFonts();
Enigma::ResourceManager::initialize(); // must be after imgui context is created so to build ImFont
this->InitHardwareInfo(window_settings);

// Init loading scene
Expand Down Expand Up @@ -97,74 +97,6 @@ void Application::InitHardwareInfo(const WindowSettings& window_settings) {
m_cpu_info = std::make_unique<CPUInfo>();
}


void Application::InitImGuiFonts() {
ENIGMA_TRACE_CURRENT_FUNCTION();

ENIGMA_TRACE("Loading Fonts...");

const auto& io = ImGui::GetIO();

const fs::path font_audiowide_path = Constants::Resources::Fonts::AUDIOWIDE_FONT_PATH;
const fs::path font_montserrat_path = Constants::Resources::Fonts::MONTSERRAT_FONT_PATH;
const fs::path font_ubuntu_path = Constants::Resources::Fonts::UBUNTU_FONT_PATH;
ENIGMA_ASSERT_OR_THROW(fs::exists(font_audiowide_path), "Font " + font_audiowide_path.string() + " not found");
ENIGMA_ASSERT_OR_THROW(fs::exists(font_montserrat_path), "Font " + font_montserrat_path.string() + " not found");
ENIGMA_ASSERT_OR_THROW(fs::exists(font_ubuntu_path), "Font " + font_ubuntu_path.string() + " not found");

#ifdef ENIGMA_DEBUG
ENIGMA_LOG("Font Audiowide-Regular path: {}", font_audiowide_path.string());
ENIGMA_LOG("Font Montserrat-Medium path: {}", font_montserrat_path.string());
ENIGMA_LOG("Font Ubuntu-Regular path: {}", font_ubuntu_path.string());
#endif

//using namespace std::string_literals;
//for(auto font_audiowide_size : std::initializer_list<short>{ 20, 30, 45, 60 })
// m_fonts["Audiowide-Regular-"sv + std::to_string(font_audiowide_size)] = io.Fonts->AddFontFromFileTTF(font_audiowide_path.string().c_str(), static_cast<float>(font_audiowide_size));
//for (auto font_montserrat_size : std::initializer_list<short>{ 12, 14, 16, 18, 20, 45 })
// m_fonts["Montserrat-Medium-"sv + std::to_string(font_montserrat_size)] = io.Fonts->AddFontFromFileTTF(font_montserrat_path.string().c_str(), static_cast<float>(font_montserrat_size));

ImFontConfig fontConfig = ImFontConfig();
//fontConfig.FontDataOwnedByAtlas = true;

m_fonts["Audiowide-Regular-60"] = io.Fonts->AddFontFromFileTTF(font_audiowide_path.string().c_str(), 60.0f, &fontConfig);
m_fonts["Audiowide-Regular-45"] = io.Fonts->AddFontFromFileTTF(font_audiowide_path.string().c_str(), 45.0f, &fontConfig);
m_fonts["Audiowide-Regular-30"] = io.Fonts->AddFontFromFileTTF(font_audiowide_path.string().c_str(), 30.0f, &fontConfig);
m_fonts["Audiowide-Regular-20"] = io.Fonts->AddFontFromFileTTF(font_audiowide_path.string().c_str(), 20.0f, &fontConfig);

m_fonts["Ubuntu-Regular-60"] = io.Fonts->AddFontFromFileTTF(font_ubuntu_path.string().c_str(), 60.0f, &fontConfig);
m_fonts["Ubuntu-Regular-45"] = io.Fonts->AddFontFromFileTTF(font_ubuntu_path.string().c_str(), 45.0f, &fontConfig);
m_fonts["Ubuntu-Regular-30"] = io.Fonts->AddFontFromFileTTF(font_ubuntu_path.string().c_str(), 30.0f, &fontConfig);
m_fonts["Ubuntu-Regular-20"] = io.Fonts->AddFontFromFileTTF(font_ubuntu_path.string().c_str(), 20.0f, &fontConfig);
m_fonts["Ubuntu-Regular-18"] = io.Fonts->AddFontFromFileTTF(font_ubuntu_path.string().c_str(), 18.0f, &fontConfig);

m_fonts["Montserrat-Medium-45"] = io.Fonts->AddFontFromFileTTF(font_montserrat_path.string().c_str(), 45.0f, &fontConfig);
m_fonts["Montserrat-Medium-20"] = io.Fonts->AddFontFromFileTTF(font_montserrat_path.string().c_str(), 20.0f, &fontConfig);
m_fonts["Montserrat-Medium-18"] = io.Fonts->AddFontFromFileTTF(font_montserrat_path.string().c_str(), 18.0f, &fontConfig);
m_fonts["Montserrat-Medium-16"] = io.Fonts->AddFontFromFileTTF(font_montserrat_path.string().c_str(), 16.0f, &fontConfig);
m_fonts["Montserrat-Medium-14"] = io.Fonts->AddFontFromFileTTF(font_montserrat_path.string().c_str(), 14.0f, &fontConfig);
m_fonts["Montserrat-Medium-12"] = io.Fonts->AddFontFromFileTTF(font_montserrat_path.string().c_str(), 12.0f, &fontConfig);

// Build added fonts atlas --> imgui issue #3643
io.Fonts->Build();

// Check if fonts are loaded
for (const auto& [font_name, font]: m_fonts) {
if (font->IsLoaded()) {
ENIGMA_TRACE("Font {} Loaded", font->ConfigData->Name);
} else {
const std::string err_msg = "Failed to load font " + std::string(font_name);
// console alert
ENIGMA_ERROR(err_msg);
// ui alert
(void) DialogUtils::Error("Resource Loading Error", err_msg);
// no further app without dear fonts :c
this->EndApplication();
break;
}
}
}

void Application::PushScene(std::unique_ptr<Scene> scene) {
ENIGMA_ASSERT(scene, "Scene is nullptr");

Expand Down Expand Up @@ -444,8 +376,7 @@ Application::~Application() {
m_loading_scene->OnDestroy(); // Don't forget the loading scene

m_scenes.clear();
m_fonts.clear();

ImGui::GetIO().Fonts->Clear();
Enigma::ResourceManager::shutdown();
}
NS_ENIGMA_END
6 changes: 0 additions & 6 deletions src/Application/Application.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -91,9 +91,6 @@ class Application final : public SingleProcessInstance {
/** Returns Realtime CPU usage informations (if enabled in WindowSettings.ini, otherwise nullptr) */
constexpr const std::unique_ptr<CPUInfo>& GetCPUInfo() const noexcept { return m_cpu_info; }

/** Returns Loaded Fonts map */
constexpr const std::unordered_map<std::string_view, ImFont *>& GetFonts() const noexcept { return m_fonts; }

private: // Updates
/** Updates delta time */
void UpdateDeltaTime() noexcept;
Expand Down Expand Up @@ -135,9 +132,6 @@ class Application final : public SingleProcessInstance {
private:
std::unique_ptr<ImGuiRenderer> m_imgui_renderer; /**< ImGui renderer wrapper */

private:
std::unordered_map<std::string_view, ImFont *> m_fonts; /**< Loaded fonts */

private:
inline static Application *m_instance{nullptr}; /**< Application singleton */

Expand Down
16 changes: 8 additions & 8 deletions src/Core/Constants.hpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#pragma once
#include "Types.hpp"
#include <Utility/ResourceUtils.hpp>
#include <ResourceManager/ResourceManager.hpp>
#include <array>

namespace Enigma {
Expand Down Expand Up @@ -41,7 +41,7 @@ namespace Enigma {
}

namespace Config {
static const fs::path WINDOW_CONFIG_FILE_PATH = ::Enigma::ResourceUtils::GetResourcesDir() / "config" / "WindowSettings.ini";
static const fs::path WINDOW_CONFIG_FILE_PATH = ::Enigma::ResourceManager::getResourcesDir() / "config" / "WindowSettings.ini";
}

namespace ENV // Environment Variable
Expand All @@ -50,11 +50,11 @@ namespace Enigma {
}

namespace Logger {
static const fs::path LOG_FILE_PATH = ::Enigma::ResourceUtils::GetResourcesDir() / "logs" / "Enigma.log";
static const fs::path LOG_FILE_PATH = ::Enigma::ResourceManager::getResourcesDir() / "logs" / "Enigma.log";
}

namespace Database {
static const fs::path DATABASE_FILE_PATH = ::Enigma::ResourceUtils::GetResourcesDir() / "database" / "Enigma.db";
static const fs::path DATABASE_FILE_PATH = ::Enigma::ResourceManager::getResourcesDir() / "database" / "Enigma.db";
// Unfortunately, u cant create multiple tables at once..
static constexpr const std::array<std::string_view, 2> CREATE_TABLES_SQL = {
R"(
Expand Down Expand Up @@ -112,13 +112,13 @@ namespace Enigma {
namespace Resources {
namespace Textures {
// window runtime icon
static const fs::path ENIGMA_LOGO_PNG_PATH = ::Enigma::ResourceUtils::GetResourcesDir() / "branding" / "Logo.png";
static const fs::path ENIGMA_LOGO_PNG_PATH = ::Enigma::ResourceManager::getResourcesDir() / "branding" / "Logo.png";
}

namespace Fonts {
static const fs::path AUDIOWIDE_FONT_PATH = ::Enigma::ResourceUtils::GetResourcesDir() / "fonts" / "Audiowide-Regular.ttf";
static const fs::path MONTSERRAT_FONT_PATH = ::Enigma::ResourceUtils::GetResourcesDir() / "fonts" / "Montserrat-Medium.ttf";
static const fs::path UBUNTU_FONT_PATH = ::Enigma::ResourceUtils::GetResourcesDir() / "fonts" / "Ubuntu-Regular.ttf";
static const fs::path AUDIOWIDE_FONT_PATH = ::Enigma::ResourceManager::getResourcesDir() / "fonts" / "Audiowide-Regular.ttf";
static const fs::path MONTSERRAT_FONT_PATH = ::Enigma::ResourceManager::getResourcesDir() / "fonts" / "Montserrat-Medium.ttf";
static const fs::path UBUNTU_FONT_PATH = ::Enigma::ResourceManager::getResourcesDir() / "fonts" / "Ubuntu-Regular.ttf";
}
}

Expand Down
6 changes: 3 additions & 3 deletions src/Database/Database.cpp
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
#include <pch.hpp>
#include "Database.hpp"
#include <Utility/FileUtils.hpp>
#include <Utility/ResourceUtils.hpp>
#include <ResourceManager/ResourceManager.hpp>

NS_ENIGMA_BEGIN

void Database::initialize() {
ENIGMA_TRACE_CURRENT_FUNCTION();
{
const fs::path resDir = ::Enigma::ResourceUtils::GetResourcesDir();
const fs::path resDir = ::Enigma::ResourceManager::getResourcesDir();
if (!fs::is_directory(resDir)) {
ENIGMA_CRITICAL("Couldn't find resources directory at {}", resDir.string());
std::exit(EXIT_FAILURE);
Expand All @@ -24,7 +24,7 @@ void Database::initialize() {

try {
//Create db dir if not exists
const fs::path dbDir = ::Enigma::ResourceUtils::GetResourcesDir() / "database";
const fs::path dbDir = ::Enigma::ResourceManager::getResourcesDir() / "database";
if (!fs::is_directory(dbDir)) {
ENIGMA_INFO("Creating Database Directory {} ...", dbDir.string());
if (!fs::create_directory(dbDir)) {
Expand Down
5 changes: 5 additions & 0 deletions src/Enigma.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -89,4 +89,9 @@
#include <Meta/Meta.hpp>
//

// ResourceManager
#include <ResourceManager/ResourceManager.hpp>
//


#endif // !ENIGMA_H
6 changes: 3 additions & 3 deletions src/GUI/ImGuiWidgets.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#define ENIGMA_IMGUI_WIDGETS_H

#include <Application/Application.hpp>
#include <ResourceManager/ResourceManager.hpp>
#include <Core/Core.hpp>
#include <Utility/OpenGLUtils.hpp>
#include <Utility/SizeUtils.hpp>
Expand Down Expand Up @@ -259,8 +260,7 @@ class ImGuiWidgets final {
static constexpr auto popup_id = "loadingDialog";

const auto& [win_w, win_h] = Application::getInstance()->GetWindow()->GetSize();
static const auto& fonts = Application::getInstance()->GetFonts();
static ImFont *const& font_audiowide_regular_20 = fonts.at("Audiowide-Regular-20");
static ImFont* const& font_ubuntu_regular_20 = ResourceManager::getFont("Ubuntu-Regular-20");

ImGui::OpenPopup(popup_id, ImGuiPopupFlags_AnyPopup);
static constexpr const auto popup_window_flags = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoBackground;
Expand All @@ -271,7 +271,7 @@ class ImGuiWidgets final {
static const std::uint32_t COLOR = ImGui::GetColorU32(spinner_color); // 0xrrggbbaa
ImGui::SetCursorPos(spinner_position);
ImGuiWidgets::LoadingSpinner("##spinner", spinner_radius, spinner_thickness, COLOR);
ImGui::PushFont(font_audiowide_regular_20); // text font
ImGui::PushFont(font_ubuntu_regular_20); // text font
const auto text_size = ImGui::CalcTextSize(text);
ImGui::SetCursorPosX((win_w - text_size.x) / 2.0f);
ImGui::TextWrapped("%s",text);
Expand Down
20 changes: 9 additions & 11 deletions src/Main.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#include <pch.hpp>
#include <Enigma.hpp>

static void SignalHandler(const int sig);
static void SignalHandler(int sig);

int main(int argc, char *argv[]) {
if (argc > 1 && (!std::strcmp(argv[1], "--version") || !std::strcmp(argv[1], "-v"))) {
Expand All @@ -20,33 +20,31 @@ int main(int argc, char *argv[]) {
std::signal(SIGBREAK, SignalHandler); // On Windows, a click on console window close button will raise SIGBREAK
#endif

using namespace Enigma;

Logger::initialize();
Database::initialize();
Enigma::Logger::initialize();
Enigma::Database::initialize();

std::int32_t exit_code = -1;
try {
const Config windowConfig(Enigma::Constants::Config::WINDOW_CONFIG_FILE_PATH);
const WindowSettings windowSettings(windowConfig);
Application app(windowSettings);
const Enigma::Config windowConfig(Enigma::Constants::Config::WINDOW_CONFIG_FILE_PATH);
const Enigma::WindowSettings windowSettings(windowConfig);
Enigma::Application app(windowSettings);
app.Run();
exit_code = EXIT_SUCCESS;
} catch (const std::exception& e) {
ENIGMA_CRITICAL(e.what());
exit_code = EXIT_FAILURE;
}

Database::shutdown();
Logger::shutdown();
Enigma::Database::shutdown();
Enigma::Logger::shutdown();

return exit_code;
}

/**
* Handles exit signals to release program resources gracefully
*/
static void SignalHandler(const int sig) {
static void SignalHandler(int sig) {
const auto stringify_signal = [sig]() noexcept -> const char * {

#define RET_STR(s, desc) \
Expand Down

0 comments on commit cd17a9e

Please sign in to comment.