summary refs log tree commit diff stats
path: root/sdl.h
diff options
context:
space:
mode:
Diffstat (limited to 'sdl.h')
-rw-r--r--sdl.h102
1 files changed, 102 insertions, 0 deletions
diff --git a/sdl.h b/sdl.h new file mode 100644 index 0000000..46d1fa4 --- /dev/null +++ b/sdl.h
@@ -0,0 +1,102 @@
1#ifndef SDL_H_A2226476
2#define SDL_H_A2226476
3
4#include <SDL.h>
5#include <SDL_net.h>
6#include <SDL_ttf.h>
7
8#include <memory>
9
10class sdl_error : public std::logic_error {
11 public:
12 sdl_error() : std::logic_error(SDL_GetError()) {}
13};
14
15class ttf_error : public std::logic_error {
16 public:
17 ttf_error() : std::logic_error(TTF_GetError()) {}
18};
19
20class net_error : public std::logic_error {
21 public:
22 net_error() : std::logic_error(SDLNet_GetError()) {}
23};
24
25class sdl_wrapper {
26 public:
27 sdl_wrapper() {
28 if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) != 0) {
29 sdl_error ex;
30 SDL_Quit();
31
32 throw ex;
33 }
34 }
35
36 ~sdl_wrapper() { SDL_Quit(); }
37};
38
39class ttf_wrapper {
40 public:
41 ttf_wrapper() {
42 if (TTF_Init() == -1) {
43 ttf_error ex;
44 TTF_Quit();
45
46 throw ex;
47 }
48 }
49
50 ~ttf_wrapper() { TTF_Quit(); }
51};
52
53class net_wrapper {
54 public:
55 net_wrapper() {
56 if (SDLNet_Init() == -1) {
57 net_error ex;
58 SDLNet_Quit();
59
60 throw ex;
61 }
62 }
63
64 ~net_wrapper() { SDLNet_Quit(); }
65};
66
67class window_deleter {
68 public:
69 void operator()(SDL_Window* ptr) { SDL_DestroyWindow(ptr); }
70};
71
72using window_ptr = std::unique_ptr<SDL_Window, window_deleter>;
73
74class renderer_deleter {
75 public:
76 void operator()(SDL_Renderer* ptr) { SDL_DestroyRenderer(ptr); }
77};
78
79using renderer_ptr = std::unique_ptr<SDL_Renderer, renderer_deleter>;
80
81class surface_deleter {
82 public:
83 void operator()(SDL_Surface* ptr) { SDL_FreeSurface(ptr); }
84};
85
86using surface_ptr = std::unique_ptr<SDL_Surface, surface_deleter>;
87
88class texture_deleter {
89 public:
90 void operator()(SDL_Texture* ptr) { SDL_DestroyTexture(ptr); }
91};
92
93using texture_ptr = std::unique_ptr<SDL_Texture, texture_deleter>;
94
95class font_deleter {
96 public:
97 void operator()(TTF_Font* ptr) { TTF_CloseFont(ptr); }
98};
99
100using font_ptr = std::unique_ptr<TTF_Font, font_deleter>;
101
102#endif /* end of include guard: SDL_H_A2226476 */