diff options
Diffstat (limited to 'src/window')
| -rw-r--r-- | src/window/irodeo_window.h | 30 | ||||
| -rw-r--r-- | src/window/irodeo_window_t.h | 21 | ||||
| -rw-r--r-- | src/window/rodeo_window.c | 166 |
3 files changed, 217 insertions, 0 deletions
diff --git a/src/window/irodeo_window.h b/src/window/irodeo_window.h new file mode 100644 index 0000000..f0c02e2 --- /dev/null +++ b/src/window/irodeo_window.h @@ -0,0 +1,30 @@ +#pragma once + +// -- internal -- +// private +#include "irodeo_window_t.h" + +// -- external -- +#include "SDL.h" +#include "SDL_syswm.h" + +SDL_Window * +irodeo_window_get(void); + +SDL_Surface * +irodeo_window_surface_get(void); + +void +irodeo_window_screen_width_setVar(uint16_t width); + +void +irodeo_window_screen_height_setVar(uint16_t height); + +SDL_Window * +irodeo_window_get(void); + +SDL_Surface * +irodeo_window_surface_get(void); + +SDL_SysWMinfo +irodeo_window_wmi_get(void); diff --git a/src/window/irodeo_window_t.h b/src/window/irodeo_window_t.h new file mode 100644 index 0000000..e2dd0a4 --- /dev/null +++ b/src/window/irodeo_window_t.h @@ -0,0 +1,21 @@ +#pragma once + +// -- external -- +#include "SDL.h" +#include "SDL_syswm.h" + +// -- system -- +#include "inttypes.h" +#include "stdbool.h" + +typedef +struct +{ + SDL_Window* window; + SDL_Surface* screen_surface; + SDL_SysWMinfo wmi; + uint16_t screen_width; + uint16_t screen_height; + bool quit; +} +irodeo_window_state_t; diff --git a/src/window/rodeo_window.c b/src/window/rodeo_window.c new file mode 100644 index 0000000..5267bfa --- /dev/null +++ b/src/window/rodeo_window.c @@ -0,0 +1,166 @@ + +// -- internal -- +// public +#include "rodeo/window.h" +#include "rodeo/log.h" +// private +#include "window/irodeo_window.h" + +// -- external -- +#include "SDL.h" +#include "stc/cstr.h" + +static irodeo_window_state_t irodeo_window_state = {0}; + +void +rodeo_window_init( + uint16_t screen_height, + uint16_t screen_width, + cstr title +) +{ + irodeo_window_state.window = NULL; + irodeo_window_state.screen_surface = NULL; + irodeo_window_state.screen_height = screen_height; + irodeo_window_state.screen_width = screen_width; + + rodeo_log( + rodeo_logLevel_info, + "Initializing SDL..." + ); + + { + uint32_t init_flags_sdl = 0; + init_flags_sdl = init_flags_sdl | SDL_INIT_VIDEO; + init_flags_sdl = init_flags_sdl | SDL_INIT_AUDIO; + init_flags_sdl = init_flags_sdl | SDL_INIT_GAMECONTROLLER; + + if(SDL_Init(init_flags_sdl) < 0) + { + rodeo_log( + rodeo_logLevel_error, + "Failed to initialize SDL. SDL_Error: %s", + SDL_GetError() + ); + exit(EXIT_FAILURE); + } + rodeo_log( + rodeo_logLevel_info, + "Success initializing SDL" + ); + } + + rodeo_log( + rodeo_logLevel_info, + "Initializing SDL window..." + ); + irodeo_window_state.window = SDL_CreateWindow( + cstr_str(&title), + SDL_WINDOWPOS_UNDEFINED, + SDL_WINDOWPOS_UNDEFINED, + screen_width, + screen_height, + SDL_WINDOW_SHOWN //| SDL_WINDOW_RESIZABLE + ); + if(irodeo_window_state.window == NULL) + { + rodeo_log( + rodeo_logLevel_error, + "Failed creating SDL window. SDL_Error: %s", + SDL_GetError() + ); + exit(EXIT_FAILURE); + } + rodeo_log( + rodeo_logLevel_info, + "Success initializing SDL window" + ); + +#if !__EMSCRIPTEN__ + rodeo_log( + rodeo_logLevel_info, + "SDL setting up driver specific information..." + ); + SDL_VERSION(&irodeo_window_state.wmi.version); + if( + !SDL_GetWindowWMInfo( + irodeo_window_state.window, + &irodeo_window_state.wmi + ) + ) + { + rodeo_log( + rodeo_logLevel_error, + "SDL failed to get driver specific information. SDL Error: %s", SDL_GetError() + ); + exit(EXIT_FAILURE); + } + rodeo_log( + rodeo_logLevel_info, + "Success getting driver specific information" + ); +#endif + +} + +void +rodeo_window_deinit(void) +{ + SDL_DestroyWindow(irodeo_window_state.window); + //Mix_Quit(); + SDL_Quit(); +} + +uint16_t +rodeo_window_screen_width_get(void) +{ + return irodeo_window_state.screen_width; +} + +uint16_t +rodeo_window_screen_height_get(void) +{ + return irodeo_window_state.screen_height; +} + +void +irodeo_window_screen_width_setVar(uint16_t width) +{ + irodeo_window_state.screen_width = width; +} + +void +irodeo_window_screen_height_setVar(uint16_t height) +{ + irodeo_window_state.screen_height = height; +} + +bool +rodeo_window_shouldQuit(void) +{ + return irodeo_window_state.quit; +} + +void +rodeo_window_quit(void) +{ + irodeo_window_state.quit = true; +} + +SDL_Window * +irodeo_window_get(void) +{ + return irodeo_window_state.window; +} + +SDL_Surface * +irodeo_window_surface_get(void) +{ + return irodeo_window_state.screen_surface; +} + +SDL_SysWMinfo +irodeo_window_wmi_get(void) +{ + return irodeo_window_state.wmi; +} |
