Skip to content
Snippets Groups Projects
Verified Commit 5647efab authored by Tobias Frisch's avatar Tobias Frisch
Browse files

Updated last manager for windows

parent f9215657
No related branches found
No related tags found
1 merge request!105Resolve "Refactor Core API"
......@@ -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
......@@ -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;
};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment