summaryrefslogtreecommitdiff
path: root/ui/window.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ui/window.cpp')
-rw-r--r--ui/window.cpp64
1 files changed, 25 insertions, 39 deletions
diff --git a/ui/window.cpp b/ui/window.cpp
index dd488d7..732e9ef 100644
--- a/ui/window.cpp
+++ b/ui/window.cpp
@@ -1,28 +1,17 @@
#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;
- }
- }();
-}
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wold-style-cast"
+#include "backends/imgui_impl_opengl3.h"
+#include "backends/imgui_impl_sdl2.h"
+#pragma GCC diagnostic pop
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 +28,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 +53,15 @@ Window::refresh() const
SDL_GL_MakeCurrent(m_window, glContext);
clear(0.0F, 0.0F, 0.0F, 1.0F);
- render();
+ ImGui_ImplOpenGL3_NewFrame();
+ ImGui_ImplSDL2_NewFrame();
+ ImGui::NewFrame();
+ if (content) {
+ content->render();
+ // Render UI stuff here
+ }
+ ImGui::Render();
+ ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
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 {});
-}