#ifndef POC2DMODULAR_WINDOW_HPP #define POC2DMODULAR_WINDOW_HPP #include #include #include #include #include namespace data { class BasicData; } namespace gui { using modulesType = std::unordered_map; class Window; [[nodiscard]] static std::optional create_window( const GLFWerrorfun errorCallback, GLFWframebuffersizefun framebufferCallback, const bool debugOpengl, GLFWwindow *shared, std::initializer_list initializer) noexcept; class Window final { public: 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); static void delete_glfw_window(GLFWwindow *glfWwindow) { glfwDestroyWindow(glfWwindow); glfwTerminate(); } static std::uint_fast8_t count_instance; std::unique_ptr wwindow{ nullptr, delete_glfw_window }; modulesType modules; explicit Window(const bool debugOpengl, const GLFWframebuffersizefun framebufferCallback, GLFWwindow *shared, std::initializer_list initializer); public: [[nodiscard]] static bool init_glfw(GLFWerrorfun errorCallback) noexcept; Window() noexcept = delete; Window(Window &&window) noexcept = default; [[nodiscard]] friend std::optional create_window( const GLFWerrorfun errorCallback, GLFWframebuffersizefun framebufferCallback, const bool debugOpengl, GLFWwindow *shared, std::initializer_list initializer) noexcept; ~Window() noexcept; [[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=(Window &&other) noexcept = default; }; void color_10_bits() noexcept; bool check_color_depth(int color_depth) noexcept; void opengl_debug() noexcept; } #endif //POC2DMODULAR_WINDOW_HPP