diff options
-rw-r--r-- | c_src/sdl_window.c | 28 |
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)); |