aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2014-04-03 13:20:36 +0200
committerLoïc Hoguin <[email protected]>2014-04-03 13:20:36 +0200
commitbfd03ec67be42977ce9210b1f39b59d6141a2545 (patch)
treecb99b93b1c6df40102d93bd355d818c40df62fb2
parent059ada86139b0cd42675180e553dc916323311d7 (diff)
downloadesdl2-bfd03ec67be42977ce9210b1f39b59d6141a2545.tar.gz
esdl2-bfd03ec67be42977ce9210b1f39b59d6141a2545.tar.bz2
esdl2-bfd03ec67be42977ce9210b1f39b59d6141a2545.zip
Add 'centered' and 'undefined' pos options to sdl_window:create/6
-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));