summaryrefslogtreecommitdiff
path: root/ui/window.h
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2021-12-13 23:47:30 +0000
committerDan Goodliffe <dan@randomdan.homeip.net>2021-12-13 23:47:30 +0000
commit1686a01b6ae7467e71eac247078248de4a3b3423 (patch)
tree53716ce767b1b775dc06f658a41a647bddbbeac1 /ui/window.h
parentMove TickDuration to its own files (diff)
downloadilt-1686a01b6ae7467e71eac247078248de4a3b3423.tar.bz2
ilt-1686a01b6ae7467e71eac247078248de4a3b3423.tar.xz
ilt-1686a01b6ae7467e71eac247078248de4a3b3423.zip
Refactor to start splitting out UI components
Diffstat (limited to 'ui/window.h')
-rw-r--r--ui/window.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/ui/window.h b/ui/window.h
new file mode 100644
index 0000000..f6279e2
--- /dev/null
+++ b/ui/window.h
@@ -0,0 +1,38 @@
+#ifndef DISPLAY_INCLUDED_H
+#define DISPLAY_INCLUDED_H
+
+#include "chronology.hpp"
+#include "collection.hpp"
+#include "inputHandler.h" // IWYU pragma: keep
+#include "ptr.hpp"
+#include <SDL2/SDL.h>
+#include <special_members.hpp>
+#include <string>
+#include <type_traits>
+
+class GameState;
+
+class Window {
+public:
+ Window(int width, int height, const std::string & title);
+ virtual ~Window() = default;
+
+ NO_COPY(Window);
+ NO_MOVE(Window);
+
+ void Clear(float r, float g, float b, float a) const;
+ void SwapBuffers() const;
+ virtual void tick(TickDuration elapsed) = 0;
+ virtual void Refresh(const GameState *) const = 0;
+ bool handleInput(const SDL_Event & e);
+
+protected:
+ using GL_Context = std::remove_pointer_t<SDL_GLContext>;
+ using SDL_WindowPtr = wrapped_ptrt<SDL_Window, SDL_CreateWindow, SDL_DestroyWindow>;
+ using SDL_GLContextPtr = wrapped_ptrt<GL_Context, SDL_GL_CreateContext, SDL_GL_DeleteContext>;
+ SDL_WindowPtr m_window;
+ SDL_GLContextPtr m_glContext;
+ Collection<InputHandler> inputStack;
+};
+
+#endif