diff --git a/site/source/docs/api_reference/emscripten.h.rst b/site/source/docs/api_reference/emscripten.h.rst index ecdf305521206..501127d73a3a0 100644 --- a/site/source/docs/api_reference/emscripten.h.rst +++ b/site/source/docs/api_reference/emscripten.h.rst @@ -492,6 +492,20 @@ Functions :rtype: double :return: The pixel ratio or 1.0 if not supported. +.. c:function:: char *emscripten_get_window_title() + + Returns the window title. + + The returned string will be valid until the next call of the function + +.. c:function:: void emscripten_set_window_title(char *title) + + Sets the window title. + +.. c:function:: void emscripten_get_screen_size(int *width, int *height) + + Returns the width and height of the screen. + .. c:function:: void emscripten_hide_mouse(void) Hide the OS mouse cursor over the canvas. diff --git a/src/library_browser.js b/src/library_browser.js index 32e84b962d5e7..4951cb7e42589 100644 --- a/src/library_browser.js +++ b/src/library_browser.js @@ -1381,6 +1381,36 @@ var LibraryBrowser = { exit(status); }, + emscripten_get_window_title__proxy: 'sync', + emscripten_get_window_title__sig: 'iv', + emscripten_get_window_title: function() { + var buflen = 256; + + if (!_emscripten_get_window_title.buffer) { + _emscripten_get_window_title.buffer = _malloc(buflen); + } + + writeAsciiToMemory( + document.title.slice(0, buflen - 1), + _emscripten_get_window_title.buffer + ); + + return _emscripten_get_window_title.buffer; + }, + + emscripten_set_window_title__proxy: 'sync', + emscripten_set_window_title__sig: 'vi', + emscripten_set_window_title: function(title) { + setWindowTitle(AsciiToString(title)); + }, + + emscripten_get_screen_size__proxy: 'sync', + emscripten_get_screen_size__sig: 'vii', + emscripten_get_screen_size: function(width, height) { + {{{ makeSetValue('width', '0', 'screen.width', 'i32') }}}; + {{{ makeSetValue('height', '0', 'screen.height', 'i32') }}}; + }, + emscripten_hide_mouse__proxy: 'sync', emscripten_hide_mouse__sig: 'v', emscripten_hide_mouse: function() { diff --git a/system/include/emscripten/emscripten.h b/system/include/emscripten/emscripten.h index 6eaba7052db41..09b5713a7529a 100644 --- a/system/include/emscripten/emscripten.h +++ b/system/include/emscripten/emscripten.h @@ -134,6 +134,9 @@ extern void emscripten_force_exit(int status); double emscripten_get_device_pixel_ratio(void); +char *emscripten_get_window_title(); +void emscripten_set_window_title(const char *); +void emscripten_get_screen_size(int *width, int *height); void emscripten_hide_mouse(void); void emscripten_set_canvas_size(int width, int height) __attribute__((deprecated("This variant does not allow specifying the target canvas", "Use emscripten_set_canvas_element_size() instead"))); void emscripten_get_canvas_size(int *width, int *height, int *isFullscreen) __attribute__((deprecated("This variant does not allow specifying the target canvas", "Use emscripten_get_canvas_element_size() and emscripten_get_fullscreen_status() instead"))); diff --git a/tests/test_html5.c b/tests/test_html5.c index a4785f42b52f9..99cbad6f88364 100644 --- a/tests/test_html5.c +++ b/tests/test_html5.c @@ -413,7 +413,19 @@ int main() ret = emscripten_set_webglcontextrestored_callback("#canvas", 0, 1, webglcontext_callback); TEST_RESULT(emscripten_set_webglcontextrestored_callback); - /* For the events to function, one must either call emscripten_set_main_loop or enable Module.noExitRuntime by some other means. + char *source_window_title = "test window title"; + emscripten_set_window_title(source_window_title); + char *current_window_title = emscripten_get_window_title(); + ret = (strcmp(source_window_title, current_window_title) == 0 \ + ? EMSCRIPTEN_RESULT_SUCCESS : EMSCRIPTEN_RESULT_FAILED); + TEST_RESULT(emscripten_get_window_title); + + int width, height; + emscripten_get_screen_size(&width, &height); + ret = (width && height) ? EMSCRIPTEN_RESULT_SUCCESS : EMSCRIPTEN_RESULT_FAILED; + TEST_RESULT(emscripten_get_screen_size); + + /* For the events to function, one must either call emscripten_set_main_loop or enable Module.noExitRuntime by some other means. Otherwise the application will exit after leaving main(), and the atexit handlers will clean up all event hooks (by design). */ EM_ASM(noExitRuntime = true);