aboutsummaryrefslogtreecommitdiff
path: root/window.c
diff options
context:
space:
mode:
Diffstat (limited to 'window.c')
-rw-r--r--window.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/window.c b/window.c
new file mode 100644
index 0000000..2128f1c
--- /dev/null
+++ b/window.c
@@ -0,0 +1,44 @@
+#include "window.h"
+
+#include <SDL.h>
+
+int display_init(struct window *wobj)
+{
+ if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER) < 0)
+ {
+ fprintf(stderr,"Couldn't init SDL: %s\n", SDL_GetError());
+ return EXIT_FAILURE;
+ }
+
+ /* Create run-of-the-mill window at specified size */
+ wobj->window = SDL_CreateWindow(
+ wobj->title,
+ SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
+ wobj->width, wobj->height,
+ SDL_WINDOW_SHOWN
+ );
+ if (wobj->window == NULL)
+ {
+ fprintf(stderr, "Couldn't create window: %s\n", SDL_GetError());
+ return EXIT_FAILURE;
+ }
+
+ /* Grab window surface */
+ wobj->surface = SDL_GetWindowSurface(wobj->window);
+ if (wobj->surface == NULL)
+ {
+ fprintf(stderr, "Couldn't grab window surface: %s\n", SDL_GetError());
+ return EXIT_FAILURE;
+ }
+
+ /* Clear/blank surface with grey, and update it */
+ SDL_FillRect(wobj->surface, NULL, SDL_MapRGB(wobj->surface->format, 0x33, 0x33, 0x33));
+ SDL_UpdateWindowSurface(wobj->window);
+ return EXIT_SUCCESS;
+}
+
+void display_stop(struct window *wobj)
+{
+ SDL_DestroyWindow(wobj->window);
+ SDL_Quit();
+}