diff options
-rw-r--r-- | README.asciidoc | 3 | ||||
-rw-r--r-- | c_src/esdl2.h | 3 | ||||
-rw-r--r-- | c_src/sdl_video.c | 39 | ||||
-rw-r--r-- | src/esdl2.erl | 12 | ||||
-rw-r--r-- | src/sdl_video.erl | 16 |
5 files changed, 70 insertions, 3 deletions
diff --git a/README.asciidoc b/README.asciidoc index 1ab6055..67883f6 100644 --- a/README.asciidoc +++ b/README.asciidoc @@ -92,9 +92,6 @@ corresponding to the public headers. ** `SDL_GetWindowSurface` (window) ** `SDL_UpdateWindowSurface` (window) ** `SDL_UpdateWindowSurfaceRects` (window) -** `SDL_IsScreenSaverEnabled` -** `SDL_EnableScreenSaver` -** `SDL_DisableScreenSaver` ** `SDL_GL_LoadLibrary` (unclear if we need it) ** `SDL_GL_GetProcAddress` (unclear if we need it) ** `SDL_GL_UnloadLibrary` (unclear if we need it) diff --git a/c_src/esdl2.h b/c_src/esdl2.h index 8c107f8..2cee676 100644 --- a/c_src/esdl2.h +++ b/c_src/esdl2.h @@ -410,6 +410,8 @@ F(get_version, 0) \ F(get_revision, 0) \ /* sdl_video */ \ + F(disable_screensaver, 0) \ + F(enable_screensaver, 0) \ F(get_closest_display_mode, 2) \ F(get_current_display_mode, 1) \ F(get_current_video_driver, 0) \ @@ -423,6 +425,7 @@ F(get_num_video_displays, 0) \ F(get_num_video_drivers, 0) \ F(get_video_driver, 1) \ + F(is_screensaver_enabled, 0) \ F(video_init, 1) \ F(video_quit, 0) \ /* sdl_window */ \ diff --git a/c_src/sdl_video.c b/c_src/sdl_video.c index 49dbe7f..e16c7d2 100644 --- a/c_src/sdl_video.c +++ b/c_src/sdl_video.c @@ -34,6 +34,30 @@ ERL_NIF_TERM display_mode_to_map(ErlNifEnv* env, SDL_DisplayMode* mode) return map; } +// disable_screensaver + +NIF_CAST_HANDLER(thread_disable_screensaver) +{ + SDL_DisableScreenSaver(); +} + +NIF_FUNCTION(disable_screensaver) +{ + return nif_thread_cast(env, thread_disable_screensaver, 0); +} + +// enable_screensaver + +NIF_CAST_HANDLER(thread_enable_screensaver) +{ + SDL_EnableScreenSaver(); +} + +NIF_FUNCTION(enable_screensaver) +{ + return nif_thread_cast(env, thread_enable_screensaver, 0); +} + // get_closest_display_mode NIF_CALL_HANDLER(thread_get_closest_display_mode) @@ -323,6 +347,21 @@ NIF_FUNCTION(get_video_driver) return enif_make_binary(env, &bin); } +// is_screensaver_enabled + +NIF_CALL_HANDLER(thread_is_screensaver_enabled) +{ + if (SDL_IsScreenSaverEnabled()) + return atom_true; + + return atom_false; +} + +NIF_FUNCTION(is_screensaver_enabled) +{ + return nif_thread_call(env, thread_is_screensaver_enabled, 0); +} + // video_init NIF_CALL_HANDLER(thread_video_init) diff --git a/src/esdl2.erl b/src/esdl2.erl index edbb3b1..ae429e7 100644 --- a/src/esdl2.erl +++ b/src/esdl2.erl @@ -166,6 +166,8 @@ -export([get_revision/0]). %% sdl_video +-export([disable_screensaver/0]). +-export([enable_screensaver/0]). -export([get_closest_display_mode/2]). -export([get_current_display_mode/1]). -export([get_current_video_driver/0]). @@ -179,6 +181,7 @@ -export([get_num_video_displays/0]). -export([get_num_video_drivers/0]). -export([get_video_driver/1]). +-export([is_screensaver_enabled/0]). -export([video_init/1]). -export([video_quit/0]). @@ -623,6 +626,12 @@ get_revision() -> %% sdl_video +disable_screensaver() -> + erlang:nif_error({not_loaded, ?MODULE}). + +enable_screensaver() -> + erlang:nif_error({not_loaded, ?MODULE}). + get_closest_display_mode(_, _) -> erlang:nif_error({not_loaded, ?MODULE}). @@ -662,6 +671,9 @@ get_num_video_drivers() -> get_video_driver(_) -> erlang:nif_error({not_loaded, ?MODULE}). +is_screensaver_enabled() -> + erlang:nif_error({not_loaded, ?MODULE}). + video_init(_) -> erlang:nif_error({not_loaded, ?MODULE}). diff --git a/src/sdl_video.erl b/src/sdl_video.erl index 958d928..abf60d3 100644 --- a/src/sdl_video.erl +++ b/src/sdl_video.erl @@ -14,6 +14,8 @@ -module(sdl_video). +-export([disable_screensaver/0]). +-export([enable_screensaver/0]). -export([get_closest_display_mode/2]). -export([get_current_display_mode/1]). -export([get_current_driver/0]). @@ -27,6 +29,7 @@ -export([get_num_display_modes/1]). -export([get_num_displays/0]). -export([get_num_drivers/0]). +-export([is_screensaver_enabled/0]). -export([start/1]). -export([stop/0]). @@ -38,6 +41,14 @@ }. -export_type([display_mode/0]). +-spec disable_screensaver() -> ok. +disable_screensaver() -> + esdl2:disable_screensaver(). + +-spec enable_screensaver() -> ok. +enable_screensaver() -> + esdl2:enable_screensaver(). + -spec get_closest_display_mode(integer(), display_mode()) -> display_mode() | undefined. get_closest_display_mode(DisplayIndex, Mode) -> esdl2:get_closest_display_mode(DisplayIndex, Mode), @@ -103,6 +114,11 @@ get_num_displays() -> get_num_drivers() -> esdl2:get_num_video_drivers(). +-spec is_screensaver_enabled() -> boolean(). +is_screensaver_enabled() -> + esdl2:is_screensaver_enabled(), + receive {'_nif_thread_ret_', Ret} -> Ret end. + -spec start(binary()) -> ok | sdl:error(). start(DriverName) -> esdl2:video_init(DriverName), |