aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLoïc Hoguin <[email protected]>2018-01-18 11:04:11 +0100
committerLoïc Hoguin <[email protected]>2018-01-18 11:17:46 +0100
commitd6fb651c8d0a9bc6e18d3e940dd0db9c74e8e09c (patch)
treed4239c68bc58a7010fdbc1bf3d1543ea599c35cb
parentd6de0fce0b46be3b382ba3c30fb7c9559f3fcb8e (diff)
downloadesdl2-d6fb651c8d0a9bc6e18d3e940dd0db9c74e8e09c.tar.gz
esdl2-d6fb651c8d0a9bc6e18d3e940dd0db9c74e8e09c.tar.bz2
esdl2-d6fb651c8d0a9bc6e18d3e940dd0db9c74e8e09c.zip
Add screensaver functions
-rw-r--r--README.asciidoc3
-rw-r--r--c_src/esdl2.h3
-rw-r--r--c_src/sdl_video.c39
-rw-r--r--src/esdl2.erl12
-rw-r--r--src/sdl_video.erl16
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),