diff options
author | Loïc Hoguin <[email protected]> | 2018-01-07 19:25:42 +0100 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2018-01-07 19:25:42 +0100 |
commit | c7af14020953fd7187af7d93f64cf94ff2e4d6f3 (patch) | |
tree | 60ab3b7084e337c139b51a6efcf4e632b66d031f /c_src/sdl_window.c | |
parent | c3b951f0e15a49d3ac4f6b5c5a5d7ae06e887ec1 (diff) | |
download | esdl2-c7af14020953fd7187af7d93f64cf94ff2e4d6f3.tar.gz esdl2-c7af14020953fd7187af7d93f64cf94ff2e4d6f3.tar.bz2 esdl2-c7af14020953fd7187af7d93f64cf94ff2e4d6f3.zip |
Add more window functions
Diffstat (limited to 'c_src/sdl_window.c')
-rw-r--r-- | c_src/sdl_window.c | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/c_src/sdl_window.c b/c_src/sdl_window.c index 2e0c1bb..28b769e 100644 --- a/c_src/sdl_window.c +++ b/c_src/sdl_window.c @@ -220,6 +220,31 @@ NIF_FUNCTION(get_window_display_index) NIF_RES_GET(Window, window_res)); } +// get_window_display_mode + +NIF_CALL_HANDLER(thread_get_window_display_mode) +{ + SDL_DisplayMode mode; + + if (SDL_GetWindowDisplayMode(args[0], &mode)) + return sdl_error_tuple(env); + + return enif_make_tuple2(env, + atom_ok, + display_mode_to_map(env, &mode) + ); +} + +NIF_FUNCTION(get_window_display_mode) +{ + void* window_res; + + BADARG_IF(!enif_get_resource(env, argv[0], res_Window, &window_res)); + + return nif_thread_call(env, thread_get_window_display_mode, 1, + NIF_RES_GET(Window, window_res)); +} + // get_window_flags NIF_CALL_HANDLER(thread_get_window_flags) @@ -237,6 +262,29 @@ NIF_FUNCTION(get_window_flags) NIF_RES_GET(Window, window_res)); } +// get_window_from_id + +NIF_CALL_HANDLER(thread_get_window_from_id) +{ + SDL_Window* window; + + window = SDL_GetWindowFromID((long)args[0]); + + if (!window) + return atom_undefined; + + return esdl2_windows_find(env, window); +} + +NIF_FUNCTION(get_window_from_id) +{ + Uint32 windowID; + + BADARG_IF(!enif_get_uint(env, argv[0], &windowID)); + + return nif_thread_call(env, thread_get_window_from_id, 1, windowID); +} + // get_window_grab NIF_CALL_HANDLER(thread_get_window_grab) @@ -322,6 +370,27 @@ NIF_FUNCTION(get_window_minimum_size) NIF_RES_GET(Window, window_res)); } +// get_window_pixel_format + +NIF_CALL_HANDLER(thread_get_window_pixel_format) +{ + Uint32 format; + + format = SDL_GetWindowPixelFormat(args[0]); + + return pixel_format_to_atom(format); +} + +NIF_FUNCTION(get_window_pixel_format) +{ + void* window_res; + + BADARG_IF(!enif_get_resource(env, argv[0], res_Window, &window_res)); + + return nif_thread_call(env, thread_get_window_pixel_format, 1, + NIF_RES_GET(Window, window_res)); +} + // get_window_position NIF_CALL_HANDLER(thread_get_window_position) @@ -522,6 +591,44 @@ NIF_FUNCTION(set_window_brightness) NIF_RES_GET(Window, window_res), brightnessPtr); } +// set_window_display_mode + +NIF_CALL_HANDLER(thread_set_window_display_mode) +{ + SDL_DisplayMode mode; + + mode.format = (long)args[1]; + mode.w = (long)args[2]; + mode.h = (long)args[3]; + mode.refresh_rate = (long)args[4]; + + if (SDL_SetWindowDisplayMode(args[0], &mode)) + return sdl_error_tuple(env); + + return atom_ok; +} + +NIF_FUNCTION(set_window_display_mode) +{ + void* window_res; + ERL_NIF_TERM term; + Uint32 format; + int w, h, refresh_rate; + + BADARG_IF(!enif_get_resource(env, argv[0], res_Window, &window_res)); + BADARG_IF(!enif_get_map_value(env, argv[1], atom_format, &term)); + BADARG_IF(!atom_to_pixel_format(env, term, &format)); + BADARG_IF(!enif_get_map_value(env, argv[1], atom_w, &term)); + BADARG_IF(!enif_get_int(env, term, &w)); + BADARG_IF(!enif_get_map_value(env, argv[1], atom_h, &term)); + BADARG_IF(!enif_get_int(env, term, &h)); + BADARG_IF(!enif_get_map_value(env, argv[1], atom_refresh_rate, &term)); + BADARG_IF(!enif_get_int(env, term, &refresh_rate)); + + return nif_thread_call(env, thread_set_window_display_mode, 5, + NIF_RES_GET(Window, window_res), format, w, h, refresh_rate); +} + // set_window_fullscreen NIF_CALL_HANDLER(thread_set_window_fullscreen) |