window-glfw-wrapper/include/window.hpp
Pcornat bc12874c80
Change library to make it less buggy when destroying objects
# Conflicts:
#	include/window.hpp
#	src/window.cpp
2025-06-06 17:12:45 +02:00

85 lines
2.4 KiB
C++

#ifndef POC2DMODULAR_WINDOW_HPP
#define POC2DMODULAR_WINDOW_HPP
#include <memory>
#include <optional>
#include <string>
#include <unordered_map>
#include <GLFW/glfw3.h>
namespace data {
class BasicData;
}
namespace gui {
class Window final {
public:
using modulesType = std::unordered_map<std::string, data::BasicData *>;
using windowPtr = GLFWwindow *;
private:
static void key_callback(GLFWwindow *window, int key, int scancode, int action, int mods);
static void cursor_position_callback(GLFWwindow *window, double xpos, double ypos);
static void scroll_callback(GLFWwindow *window, double xoffset, double yoffset);
static void window_size_callback(GLFWwindow *window, int width, int height);
static void window_pos_callback(GLFWwindow *window, int xpos, int ypos);
std::unique_ptr<GLFWwindow, decltype(&glfwDestroyWindow)> wwindow{ nullptr, glfwDestroyWindow };
modulesType modules;
bool valid{ false };
explicit Window(const bool debugOpengl,
const GLFWframebuffersizefun framebufferCallback,
GLFWwindow *shared,
std::initializer_list<modulesType::value_type> initializer);
public:
Window() noexcept = delete;
Window(const Window &) = delete;
Window(Window &&window) noexcept;
[[nodiscard]] static std::optional<Window> create_window(
GLFWframebuffersizefun framebufferCallback,
const bool debugOpengl,
GLFWwindow *shared,
std::initializer_list<modulesType::value_type> initializer) noexcept;
~Window() noexcept = default;
[[nodiscard]] const std::unique_ptr<GLFWwindow, decltype(&glfwDestroyWindow)> &get_window() const noexcept;
[[nodiscard]] bool should_close() const noexcept;
void swap_buffers() const noexcept;
void add_module(data::BasicData &module);
void delete_module(const std::string &module);
/**
* \brief Make window's OpenGL context current
*/
void get_context() const noexcept;
Window &operator=(const Window &) = delete;
Window &operator=(Window &&other) noexcept;
};
void color_10_bits() noexcept;
bool check_color_depth(int color_depth) noexcept;
void opengl_debug() noexcept;
}
#endif //POC2DMODULAR_WINDOW_HPP