summaryrefslogtreecommitdiffstats
path: root/src/game/client/io/video.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/client/io/video.hh')
-rw-r--r--src/game/client/io/video.hh115
1 files changed, 115 insertions, 0 deletions
diff --git a/src/game/client/io/video.hh b/src/game/client/io/video.hh
new file mode 100644
index 0000000..858983f
--- /dev/null
+++ b/src/game/client/io/video.hh
@@ -0,0 +1,115 @@
+// SPDX-License-Identifier: BSD-2-Clause
+// Copyright (c) 2025 Kirill Dmitrievich
+// File: video.hh; Created: Tue Dec 30 2025 12:59:09
+// Description: Video mode handling
+
+#ifndef CLIENT_IO_VIDEO_HH
+#define CLIENT_IO_VIDEO_HH
+#pragma once
+
+class VideoMode final {
+public:
+ constexpr explicit VideoMode(const GLFWvidmode& mode) noexcept;
+ constexpr explicit VideoMode(int wide, int tall, int rate = GLFW_DONT_CARE) noexcept;
+
+ constexpr int wide(void) const noexcept;
+ constexpr int tall(void) const noexcept;
+ constexpr int rate(void) const noexcept;
+
+ constexpr bool operator==(const VideoMode& other) const noexcept;
+
+private:
+ int m_wide;
+ int m_tall;
+ int m_rate;
+};
+
+class FramebufferSizeEvent final {
+public:
+ constexpr explicit FramebufferSizeEvent(int wide, int tall) noexcept;
+ constexpr int wide(void) const noexcept;
+ constexpr int tall(void) const noexcept;
+
+private:
+ int m_wide;
+ int m_tall;
+};
+
+namespace video
+{
+void init(void);
+void init_late(void);
+void shutdown(void);
+void update(void);
+void update_late(void);
+} // namespace video
+
+namespace video
+{
+void query_current_mode(int& wide, int& tall) noexcept;
+void query_current_mode(int& wide, int& tall, bool& fullscreen) noexcept;
+const std::vector<VideoMode>& query_fullscreen_modes(void) noexcept;
+} // namespace video
+
+namespace video
+{
+void request_fullscreen(int wide, int tall, int rate) noexcept;
+void request_windowed(int wide, int tall) noexcept;
+void request_windowed(void) noexcept;
+} // namespace video
+
+namespace video
+{
+void update_window_title(void);
+} // namespace video
+
+constexpr VideoMode::VideoMode(int wide, int tall, int rate) noexcept : m_wide(wide), m_tall(tall), m_rate(rate)
+{
+ // empty
+}
+
+constexpr VideoMode::VideoMode(const GLFWvidmode& mode) noexcept : m_wide(mode.width), m_tall(mode.height), m_rate(mode.refreshRate)
+{
+ // empty
+}
+
+constexpr int VideoMode::wide(void) const noexcept
+{
+ return m_wide;
+}
+
+constexpr int VideoMode::tall(void) const noexcept
+{
+ return m_tall;
+}
+
+constexpr int VideoMode::rate(void) const noexcept
+{
+ return m_rate;
+}
+
+constexpr bool VideoMode::operator==(const VideoMode& other) const noexcept
+{
+ auto result = true;
+ result = result && (m_wide == other.m_wide || m_wide == GLFW_DONT_CARE || other.m_wide == GLFW_DONT_CARE);
+ result = result && (m_tall == other.m_tall || m_tall == GLFW_DONT_CARE || other.m_tall == GLFW_DONT_CARE);
+ result = result && (m_rate == other.m_rate || m_rate == GLFW_DONT_CARE || other.m_rate == GLFW_DONT_CARE);
+ return result;
+}
+
+constexpr FramebufferSizeEvent::FramebufferSizeEvent(int wide, int tall) noexcept : m_wide(wide), m_tall(tall)
+{
+ // empty
+}
+
+constexpr int FramebufferSizeEvent::wide(void) const noexcept
+{
+ return m_wide;
+}
+
+constexpr int FramebufferSizeEvent::tall(void) const noexcept
+{
+ return m_tall;
+}
+
+#endif