aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--c_src/sdl_window.c28
1 files changed, 26 insertions, 2 deletions
diff --git a/c_src/sdl_window.c b/c_src/sdl_window.c
index 49fa005..0983370 100644
--- a/c_src/sdl_window.c
+++ b/c_src/sdl_window.c
@@ -63,12 +63,36 @@ NIF_CALL_HANDLER(thread_create_window)
NIF_FUNCTION(create_window)
{
char* title = (char*)enif_alloc(255);
+ char buf[MAX_ATOM_LENGTH];
int x, y, w, h;
Uint32 flags = 0;
BADARG_IF(!enif_get_string(env, argv[0], title, 255, ERL_NIF_LATIN1));
- BADARG_IF(!enif_get_int(env, argv[1], &x));
- BADARG_IF(!enif_get_int(env, argv[2], &y));
+
+ if (enif_is_atom(env, argv[1])) {
+ BADARG_IF(!enif_get_atom(env, argv[1], buf, MAX_ATOM_LENGTH, ERL_NIF_LATIN1));
+
+ if (!strcmp(buf, "centered"))
+ x = SDL_WINDOWPOS_CENTERED;
+ else if (!strcmp(buf, "undefined"))
+ x = SDL_WINDOWPOS_UNDEFINED;
+ else
+ return enif_make_badarg(env);
+ } else
+ BADARG_IF(!enif_get_int(env, argv[1], &x));
+
+ if (enif_is_atom(env, argv[2])) {
+ BADARG_IF(!enif_get_atom(env, argv[2], buf, MAX_ATOM_LENGTH, ERL_NIF_LATIN1));
+
+ if (!strcmp(buf, "centered"))
+ y = SDL_WINDOWPOS_CENTERED;
+ else if (!strcmp(buf, "undefined"))
+ y = SDL_WINDOWPOS_UNDEFINED;
+ else
+ return enif_make_badarg(env);
+ } else
+ BADARG_IF(!enif_get_int(env, argv[2], &y));
+
BADARG_IF(!enif_get_int(env, argv[3], &w));
BADARG_IF(!enif_get_int(env, argv[4], &h));
BADARG_IF(!list_to_window_flags(env, argv[5], &flags));