#ifndef POC2DMODULAR_WINDOW_HPP #define POC2DMODULAR_WINDOW_HPP #include #include #include #include #include namespace data { class BasicData; } namespace gui { class Window final { public: using modulesType = std::unordered_map; 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 wwindow{ nullptr, glfwDestroyWindow }; modulesType modules; bool valid{ false }; explicit Window(const bool debugOpengl, const GLFWframebuffersizefun framebufferCallback, GLFWwindow *shared, std::initializer_list initializer); public: Window() noexcept = delete; Window(const Window &) = delete; Window(Window &&window) noexcept; [[nodiscard]] static std::optional create_window( GLFWframebuffersizefun framebufferCallback, const bool debugOpengl, GLFWwindow *shared, std::initializer_list initializer) noexcept; ~Window() noexcept = default; [[nodiscard]] const std::unique_ptr &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