summaryrefslogtreecommitdiff
path: root/ui/window.cpp
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2024-06-15 15:28:53 +0100
committerDan Goodliffe <dan@randomdan.homeip.net>2024-06-15 15:28:53 +0100
commit02c3f1fd622bb5b4da1462c5bb507a4a541447d5 (patch)
tree8db9ad8cc755cdab17d11a97309b3b147c576964 /ui/window.cpp
parentAdd imgui init and shutdown to appbase and gamemainwindow (diff)
downloadilt-02c3f1fd622bb5b4da1462c5bb507a4a541447d5.tar.bz2
ilt-02c3f1fd622bb5b4da1462c5bb507a4a541447d5.tar.xz
ilt-02c3f1fd622bb5b4da1462c5bb507a4a541447d5.zip
First cut reshuffling app/window/gl/render bits
Diffstat (limited to 'ui/window.cpp')
-rw-r--r--ui/window.cpp53
1 files changed, 14 insertions, 39 deletions
diff --git a/ui/window.cpp b/ui/window.cpp
index dd488d7..8ceaf49 100644
--- a/ui/window.cpp
+++ b/ui/window.cpp
@@ -1,28 +1,12 @@
#include "window.h"
-#include "uiComponent.h"
-#include <format>
#include <glad/gl.h>
#include <glm/glm.hpp>
-#include <stdexcept>
-
-Window::GLInitHelper::GLInitHelper()
-{
- [[maybe_unused]] static auto init = []() {
- // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
- if (const auto version = gladLoadGL(reinterpret_cast<GLADloadfunc>(SDL_GL_GetProcAddress)); version < 30003) {
- throw std::runtime_error {std::format("Insufficient OpenGL version: {}", version)};
- }
- else {
- return version;
- }
- }();
-}
Window::Window(size_t width, size_t height, const std::string & title, Uint32 flags) :
size {static_cast<int>(width), static_cast<int>(height)},
m_window {title.c_str(), static_cast<int>(SDL_WINDOWPOS_CENTERED), static_cast<int>(SDL_WINDOWPOS_CENTERED), size.x,
size.y, flags},
- glContext {m_window}, uiShader {width, height}
+ glContext {m_window}
{
}
@@ -39,23 +23,21 @@ Window::swapBuffers() const
SDL_GL_SwapWindow(m_window);
}
+void
+Window::tick(TickDuration elapsed)
+{
+ if (content) {
+ content->tick(elapsed);
+ }
+}
+
bool
Window::handleInput(const SDL_Event & e)
{
if (SDL_GetWindowID(m_window) == e.window.windowID) {
- SDL_Event eAdjusted {e};
- switch (e.type) {
- // SDL and OpenGL have coordinates that are vertically opposed.
- case SDL_MOUSEBUTTONDOWN:
- case SDL_MOUSEBUTTONUP:
- eAdjusted.button.y = size.y - e.button.y;
- break;
- case SDL_MOUSEMOTION:
- eAdjusted.motion.y = size.y - e.motion.y;
- break;
+ if (content) {
+ return content->handleInput(e);
}
- uiComponents.rapplyOne(&UIComponent::handleInput, eAdjusted, UIComponent::Position {{}, size});
- return true;
}
return false;
}
@@ -66,16 +48,9 @@ Window::refresh() const
SDL_GL_MakeCurrent(m_window, glContext);
clear(0.0F, 0.0F, 0.0F, 1.0F);
- render();
+ if (content) {
+ content->render();
+ }
swapBuffers();
}
-
-void
-Window::render() const
-{
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glDisable(GL_DEPTH_TEST);
- uiComponents.apply(&UIComponent::render, uiShader, UIComponent::Position {});
-}