sdl2_impl 0.1.0
Vendor SDL2 2.32 : IGraphic2Module / IAudioModule
Loading...
Searching...
No Matches
SdlGraphicModule.hpp
Go to the documentation of this file.
1
13#ifndef SDLGRAPHIC_MODULE_HPP
14#define SDLGRAPHIC_MODULE_HPP
15
16#include "IGraphic2Module.hpp"
17
18#include "window/SdlWindow.hpp"
19
20#include "event/SdlGamepad.hpp"
21#include "event/SdlKeyboard.hpp"
22#include "event/SdlMouse.hpp"
23
24#include "graphic/SdlFont.hpp"
26#include "graphic/SdlSprite.hpp"
27#include "graphic/SdlText.hpp"
29
30#include <SDL_image.h>
31#include <SDL_ttf.h>
32
44class SdlGraphicModule : public IGraphic2Module {
45
46public:
47 SdlGraphicModule() = default;
48 ~SdlGraphicModule() = default;
49
50 const char *type() const override { return IGraphic2Module::contract; }
51 const char *name() const override { return "sdl2"; }
52
53 // window
54 graphic::IWindow2 *createWindow(int32_t screenWidth, int32_t screenHeight, std::string title) override {
55 if (!start())
56 return nullptr;
57
58 SdlWindow *created = new SdlWindow(screenWidth, screenHeight, title);
59
60 if (!created->isOpen()) {
61 delete created;
62 return stop(), nullptr;
63 }
64
65 _opened++;
66 /* On retient la premiere : c'est celle que window() pretera aux
67 * invites qui ne veulent pas de la leur. */
68 if (!_window)
69 _window = created;
70 return created;
71 }
72
73 void deleteWindow(graphic::IWindow2 *window) override {
74 if (!window)
75 return;
76 if (window == _window)
77 _window = nullptr;
78 delete window;
79
80 if (_opened > 0)
81 _opened--;
82 /* La derniere fermee rend SDL au systeme. La borne relache un
83 * vendor avant d'en initialiser un autre : si on gardait le
84 * sous-systeme video ouvert, deux vendors se disputeraient le
85 * meme peripherique d'affichage. */
86 if (_opened == 0)
87 stop();
88 }
89
90 graphic::IWindow2 *window() override { return _window; }
91
92 // input - la fenetre est donnee a la construction, comme une ITexture
93 // l'est a une ISprite : le lien ne peut jamais manquer, et aucune
94 // methode n'a a le reconcilier plus tard
95 graphic::IKeyboard *createKeyboard(graphic::IWindow *window) override {
96 return new SdlKeyboard(*static_cast<SdlWindow *>(window));
97 }
98 void deleteKeyboard(graphic::IKeyboard *keyboard) override { delete keyboard; }
99
100 graphic::IMouse *createMouse(graphic::IWindow *window) override {
101 return new SdlMouse(*static_cast<SdlWindow *>(window));
102 }
103 void deleteMouse(graphic::IMouse *mouse) override { delete mouse; }
104
105 graphic::IGamepad *createGamepad(graphic::IWindow *window) override {
106 return new SdlGamepad(*static_cast<SdlWindow *>(window));
107 }
108 void deleteGamepad(graphic::IGamepad *gamepad) override { delete gamepad; }
109
110 // texture
111 graphic::ITexture *createTexture(std::string path) override { return new SdlTexture(path); }
112 void deleteTexture(graphic::ITexture *texture) override { delete texture; }
113
114 // font
115 graphic::IFont *createFont(std::string path) override { return new SdlFont(path); }
116 void deleteFont(graphic::IFont *font) override { delete font; }
117
118 // polygon
119 graphic::IPolygon *createPolygon(std::vector<Vector2f> points) override { return new SdlPolygon(points); }
120 void deletePolygon(graphic::IPolygon *polygon) override { delete polygon; }
121
122 // sprite
123 graphic::ISprite *createSprite(graphic::ITexture *texture) override {
124 return new SdlSprite(*static_cast<SdlTexture *>(texture));
125 }
126 void deleteSprite(graphic::ISprite *sprite) override { delete sprite; }
127
128 // text
129 graphic::IText *createText(std::string text, graphic::IFont *font) override {
130 return new SdlText(text, *static_cast<SdlFont *>(font));
131 }
132 void deleteText(graphic::IText *text) override { delete text; }
133
134private:
142 bool start() {
143 if (_started)
144 return true;
145 if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_GAMECONTROLLER) != 0)
146 return false;
147 TTF_Init();
148 IMG_Init(IMG_INIT_PNG | IMG_INIT_JPG);
149 _started = true;
150 return true;
151 }
152
153 void stop() {
154 if (!_started)
155 return;
156 IMG_Quit();
157 TTF_Quit();
158 /* QuitSubSystem et pas SDL_Quit : on ne rend QUE ce qu'on a pris.
159 * SDL_Quit arrete la bibliotheque entiere - y compris le sous-systeme
160 * audio ouvert par SdlAudioModule, et, sdl2-compat partageant son
161 * libSDL3 avec sdl3_impl, l'etat de l'autre vendor. */
162 SDL_QuitSubSystem(SDL_INIT_VIDEO | SDL_INIT_GAMECONTROLLER);
163 _started = false;
164 }
165
167 graphic::IWindow2 *_window = nullptr;
168
169 unsigned _opened = 0;
170 bool _started = false;
171};
172
175#endif /* !SDLGRAPHIC_MODULE_HPP */
Une police ouverte a une taille donnee.
Definition SdlFont.hpp:32
La manette numero _index, ouverte a la construction.
Definition SdlGamepad.hpp:31
SDL2 ne remplit que IGraphic2Module.
Definition SdlGraphicModule.hpp:44
void deleteWindow(graphic::IWindow2 *window) override
Definition SdlGraphicModule.hpp:73
const char * name() const override
Definition SdlGraphicModule.hpp:51
graphic::IWindow2 * createWindow(int32_t screenWidth, int32_t screenHeight, std::string title) override
Definition SdlGraphicModule.hpp:54
graphic::IGamepad * createGamepad(graphic::IWindow *window) override
Definition SdlGraphicModule.hpp:105
const char * type() const override
Definition SdlGraphicModule.hpp:50
void deletePolygon(graphic::IPolygon *polygon) override
Definition SdlGraphicModule.hpp:120
graphic::IKeyboard * createKeyboard(graphic::IWindow *window) override
Definition SdlGraphicModule.hpp:95
graphic::ISprite * createSprite(graphic::ITexture *texture) override
Definition SdlGraphicModule.hpp:123
void deleteGamepad(graphic::IGamepad *gamepad) override
Definition SdlGraphicModule.hpp:108
graphic::IMouse * createMouse(graphic::IWindow *window) override
Definition SdlGraphicModule.hpp:100
graphic::IFont * createFont(std::string path) override
Definition SdlGraphicModule.hpp:115
void deleteKeyboard(graphic::IKeyboard *keyboard) override
Definition SdlGraphicModule.hpp:98
void deleteFont(graphic::IFont *font) override
Definition SdlGraphicModule.hpp:116
SdlGraphicModule()=default
void deleteMouse(graphic::IMouse *mouse) override
Definition SdlGraphicModule.hpp:103
graphic::IWindow2 * window() override
Definition SdlGraphicModule.hpp:90
void deleteText(graphic::IText *text) override
Definition SdlGraphicModule.hpp:132
graphic::IText * createText(std::string text, graphic::IFont *font) override
Definition SdlGraphicModule.hpp:129
void deleteSprite(graphic::ISprite *sprite) override
Definition SdlGraphicModule.hpp:126
~SdlGraphicModule()=default
graphic::ITexture * createTexture(std::string path) override
Definition SdlGraphicModule.hpp:111
graphic::IPolygon * createPolygon(std::vector< Vector2f > points) override
Definition SdlGraphicModule.hpp:119
void deleteTexture(graphic::ITexture *texture) override
Definition SdlGraphicModule.hpp:112
Le clavier d'UNE fenetre.
Definition SdlKeyboard.hpp:33
Definition SdlMouse.hpp:24
Un contour quelconque, decoupe en triangles une fois pour toutes.
Definition SdlPolygon.hpp:35
Une vue sur une texture : decoupe, position, taille, rotation.
Definition SdlSprite.hpp:29
Une chaine rendue en texture, refaite quand elle change.
Definition SdlText.hpp:37
Une image en memoire vive, televersee a la demande.
Definition SdlTexture.hpp:38
Une fenetre SDL et son renderer, implemente IWindow2.
Definition SdlWindow.hpp:50
bool isOpen() override
Definition SdlWindow.hpp:93