#pragma once #include #include #define GLFW_INCLUDE_NONE #include "GLFW/glfw3.h" namespace cbt { class window { public: explicit window(std::string title, int width, int height); ~window(); auto should_close() const -> bool; auto valid() const -> bool; auto swap_buffers() -> void; auto poll_events() -> void; auto raw() const -> GLFWwindow*; auto stop() -> void; auto screenshot(std::string filepath = "screenshot.png") const -> bool; auto width() const -> int; auto height() const -> int; using resize_callback = std::function; auto on_resize(resize_callback cb) -> void; private: GLFWwindow* m_window = nullptr; int m_width = 0; int m_height = 0; resize_callback m_resize_cb; bool m_glfw_initialized = false; static auto init_glfw() -> bool; static auto terminate_glfw() -> void; static auto resize_callback_impl(GLFWwindow* glfw_window, int width, int height) -> void; }; }