Added more methods to the renderer.

This commit is contained in:
Relintai 2021-03-29 22:04:42 +02:00
parent b04d22497f
commit 692f0b76da
2 changed files with 66 additions and 13 deletions

View File

@ -31,6 +31,41 @@ void Renderer::draw_rect(const Rect2 &rect) {
SDL_RenderFillRect(_renderer, &r); SDL_RenderFillRect(_renderer, &r);
} }
int Renderer::get_dpi() const {
float ddpi;
float hdpi;
float vdpi;
if (SDL_GetDisplayDPI(_window_display_index, &ddpi, &hdpi, &vdpi)) {
return ddpi;
}
//fallback
return 1;
}
int Renderer::get_size_w() const {
int w;
int h;
SDL_GetWindowSize(_window, &w, &h);
return w;
}
int Renderer::get_size_h() const {
int w;
int h;
SDL_GetWindowSize(_window, &w, &h);
return h;
}
void Renderer::get_size(int *w, int *h) const {
SDL_GetWindowSize(_window, w, h);
}
void Renderer::initialize() { void Renderer::initialize() {
if (SDL_Init(_flags) != 0) { if (SDL_Init(_flags) != 0) {
printf("SDL_Init() hiba!\n"); printf("SDL_Init() hiba!\n");
@ -38,11 +73,13 @@ void Renderer::initialize() {
return; return;
} }
if (SDL_CreateWindowAndRenderer(640, 480, _window_flags, &_window, &_renderer) != 0) { if (SDL_CreateWindowAndRenderer(_initial_window_width, _initial_window_height, _window_flags, &_window, &_renderer) != 0) {
printf("SDL_CreateWindowAndRenderer() hiba!\n"); printf("SDL_CreateWindowAndRenderer() hiba!\n");
return; return;
} }
_window_display_index = SDL_GetWindowDisplayIndex(_window);
} }
void Renderer::destroy() { void Renderer::destroy() {
@ -61,6 +98,9 @@ Renderer::Renderer() {
printf("Renderer::Renderer(): _singleton is not null!\n"); printf("Renderer::Renderer(): _singleton is not null!\n");
} }
_initial_window_width = 640;
_initial_window_height = 480;
_singleton = this; _singleton = this;
_flags = SDL_INIT_VIDEO | SDL_INIT_TIMER; _flags = SDL_INIT_VIDEO | SDL_INIT_TIMER;
@ -69,11 +109,14 @@ Renderer::Renderer() {
initialize(); initialize();
} }
Renderer::Renderer(unsigned int flags, unsigned int window_flags) { Renderer::Renderer(unsigned int flags, unsigned int window_flags, int initial_window_width, int initial_window_height) {
if (_singleton) { if (_singleton) {
printf("Renderer::Renderer(flags): _singleton is not null!\n"); printf("Renderer::Renderer(flags): _singleton is not null!\n");
} }
_initial_window_width = initial_window_width;
_initial_window_height = initial_window_height;
_singleton = this; _singleton = this;
_flags = flags; _flags = flags;

View File

@ -16,22 +16,32 @@ public:
void draw_rect(const SDL_Rect &rect); void draw_rect(const SDL_Rect &rect);
void draw_rect(const Rect2 &rect); void draw_rect(const Rect2 &rect);
int get_dpi() const;
int get_size_w() const;
int get_size_h() const;
void get_size(int *w, int *h) const;
void initialize(); void initialize();
void destroy(); void destroy();
Renderer(); Renderer();
Renderer(unsigned int flags, unsigned int window_flags); Renderer(unsigned int flags, unsigned int window_flags, int window_width = 640, int window_height = 480);
virtual ~Renderer(); virtual ~Renderer();
static Renderer *get_singleton(); static Renderer *get_singleton();
private: private:
int _initial_window_width;
int _initial_window_height;
unsigned int _flags; unsigned int _flags;
unsigned int _window_flags; unsigned int _window_flags;
SDL_Window *_window; SDL_Window *_window;
SDL_Renderer *_renderer; SDL_Renderer *_renderer;
int _window_display_index;
static Renderer *_singleton; static Renderer *_singleton;
}; };