From 5647efab062ac32328602d886fca609602a87810 Mon Sep 17 00:00:00 2001 From: Tobias Frisch <tfrisch@uni-koblenz.de> Date: Fri, 8 Jul 2022 11:38:57 +0200 Subject: [PATCH] Updated last manager for windows Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de> --- src/vkcv/WindowManager.cpp | 62 ++++++++++++++++++++------------------ src/vkcv/WindowManager.hpp | 43 +++++++++++--------------- 2 files changed, 50 insertions(+), 55 deletions(-) diff --git a/src/vkcv/WindowManager.cpp b/src/vkcv/WindowManager.cpp index 3179b219..4a367bd7 100644 --- a/src/vkcv/WindowManager.cpp +++ b/src/vkcv/WindowManager.cpp @@ -2,26 +2,40 @@ namespace vkcv { - WindowManager::WindowManager() noexcept { + uint64_t WindowManager::getIdFrom(const WindowHandle &handle) const { + return handle.getId(); } + + WindowHandle WindowManager::createById(uint64_t id, const HandleDestroyFunction &destroy) { + return WindowHandle(id, destroy); + } + + void WindowManager::destroyById(uint64_t id) { + auto& window = getById(id); - WindowManager::~WindowManager() noexcept { - for (uint64_t id = 0; id < m_windows.size(); id++) { - destroyWindowById(id); + if (window) { + delete window; + window = nullptr; } - - m_windows.clear(); } + + WindowManager::WindowManager() noexcept : HandleManager<Window *, WindowHandle>() {} - WindowHandle WindowManager::createWindow( - SwapchainManager &swapchainManager, - const char *applicationName, - uint32_t windowWidth, - uint32_t windowHeight, - bool resizeable) { - const uint64_t id = m_windows.size(); + WindowManager::~WindowManager() noexcept { + clear(); + } - auto window = new Window(applicationName, windowWidth, windowHeight, resizeable); + WindowHandle WindowManager::createWindow(SwapchainManager &swapchainManager, + const char *applicationName, + uint32_t windowWidth, + uint32_t windowHeight, + bool resizeable) { + auto window = new Window( + applicationName, + static_cast<int>(windowWidth), + static_cast<int>(windowHeight), + resizeable + ); SwapchainHandle swapchainHandle = swapchainManager.createSwapchain(*window); @@ -30,27 +44,15 @@ namespace vkcv { // copy handle because it would run out of scope and be invalid swapchainManager.signalRecreation(handle); }); + window->m_resizeHandle = resizeHandle; } - m_windows.push_back(window); - return WindowHandle(id, [&](uint64_t id) { destroyWindowById(id); }); + return add(window); } - Window &WindowManager::getWindow(const WindowHandle handle) const { - return *m_windows[handle.getId()]; + Window &WindowManager::getWindow(const WindowHandle& handle) const { + return *(*this)[handle]; } - void WindowManager::destroyWindowById(uint64_t id) { - - if (id >= m_windows.size()) { - vkcv_log(LogLevel::ERROR, "Invalid id"); - return; - } - - if (m_windows[id] != nullptr) { - delete m_windows[id]; - m_windows[id] = nullptr; - } - } } \ No newline at end of file diff --git a/src/vkcv/WindowManager.hpp b/src/vkcv/WindowManager.hpp index 81658c24..4ffa4cc5 100644 --- a/src/vkcv/WindowManager.hpp +++ b/src/vkcv/WindowManager.hpp @@ -5,32 +5,31 @@ #include <GLFW/glfw3.h> #include "vkcv/Window.hpp" -#include "vkcv/Handles.hpp" + +#include "HandleManager.hpp" #include "SwapchainManager.hpp" namespace vkcv { - - class Context; - - class SwapchainManager; /** * @brief Class to manage the windows of applications. */ - class WindowManager { + class WindowManager : public HandleManager<Window*, WindowHandle> { friend class Core; private: + [[nodiscard]] + uint64_t getIdFrom(const WindowHandle& handle) const override; + + [[nodiscard]] + WindowHandle createById(uint64_t id, const HandleDestroyFunction& destroy) override; + /** - * vector of all managed windows - */ - std::vector<Window*> m_windows; - - /** - * destroys a specific window by a given id - * @param id of the window to be destroyed + * Destroys a specific window by a given id. + * + * @param[in] id ID of the window to be destroyed */ - void destroyWindowById(uint64_t id); + void destroyById(uint64_t id) override; public: WindowManager() noexcept; @@ -38,15 +37,7 @@ namespace vkcv { /** * destroys every window */ - ~WindowManager() noexcept; - - WindowManager(WindowManager &&other) = delete; - - WindowManager(const WindowManager &other) = delete; - - WindowManager &operator=(WindowManager &&other) = delete; - - WindowManager &operator=(const WindowManager &other) = delete; + ~WindowManager() noexcept override; /** * creates a window and returns it's handle @@ -57,7 +48,9 @@ namespace vkcv { * @param resizeable if the window is resizable * @return window handle */ - WindowHandle createWindow(SwapchainManager &swapchainManager, const char *applicationName, uint32_t windowWidth, + WindowHandle createWindow(SwapchainManager &swapchainManager, + const char *applicationName, + uint32_t windowWidth, uint32_t windowHeight, bool resizeable); @@ -66,7 +59,7 @@ namespace vkcv { * @return the reference of the window */ [[nodiscard]] - Window &getWindow(const WindowHandle handle) const; + Window &getWindow(const WindowHandle& handle) const; }; -- GitLab