From 5c3ebadb8e73c4685867fae43311cdda5af1ce9b Mon Sep 17 00:00:00 2001 From: Agent X <44549182+Agent-11@users.noreply.github.com> Date: Thu, 22 Feb 2024 13:36:22 -0500 Subject: [PATCH] Add ability to change window title --- autogen/lua_definitions/functions.lua | 11 ++++++++ docs/lua/functions-5.md | 38 +++++++++++++++++++++++++++ docs/lua/functions.md | 2 ++ src/pc/gfx/gfx_dummy.c | 8 ++++++ src/pc/gfx/gfx_dxgi.cpp | 8 ++++++ src/pc/gfx/gfx_sdl1.c | 10 +++++++ src/pc/gfx/gfx_sdl2.c | 10 +++++++ src/pc/gfx/gfx_window_manager_api.h | 2 ++ src/pc/lua/smlua_functions_autogen.c | 34 ++++++++++++++++++++++++ src/pc/lua/utils/smlua_misc_utils.c | 12 ++++++++- src/pc/lua/utils/smlua_misc_utils.h | 3 +++ src/pc/network/network.c | 2 ++ 12 files changed, 139 insertions(+), 1 deletion(-) diff --git a/autogen/lua_definitions/functions.lua b/autogen/lua_definitions/functions.lua index 7be35db2..3b6413da 100644 --- a/autogen/lua_definitions/functions.lua +++ b/autogen/lua_definitions/functions.lua @@ -8931,6 +8931,11 @@ function play_transition(transType, time, red, green, blue) -- ... end +--- @return nil +function reset_window_title() + -- ... +end + --- @return boolean function save_file_get_using_backup_slot() -- ... @@ -9049,6 +9054,12 @@ function set_vertex_color(index, value) -- ... end +--- @param title string +--- @return nil +function set_window_title(title) + -- ... +end + --- @param name string --- @return integer function smlua_model_util_get_id(name) diff --git a/docs/lua/functions-5.md b/docs/lua/functions-5.md index 6625ba5f..1b3ae89e 100644 --- a/docs/lua/functions-5.md +++ b/docs/lua/functions-5.md @@ -1460,6 +1460,24 @@
+## [reset_window_title](#reset_window_title) + +### Lua Example +`reset_window_title()` + +### Parameters +- None + +### Returns +- None + +### C Prototype +`void reset_window_title(void);` + +[:arrow_up_small:](#) + +
+ ## [save_file_get_using_backup_slot](#save_file_get_using_backup_slot) ### Lua Example @@ -1843,6 +1861,26 @@
+## [set_window_title](#set_window_title) + +### Lua Example +`set_window_title(title)` + +### Parameters +| Field | Type | +| ----- | ---- | +| title | `string` | + +### Returns +- None + +### C Prototype +`void set_window_title(const char* title);` + +[:arrow_up_small:](#) + +
+ --- # functions from smlua_model_utils.h diff --git a/docs/lua/functions.md b/docs/lua/functions.md index cc29ef67..0c977c6b 100644 --- a/docs/lua/functions.md +++ b/docs/lua/functions.md @@ -1672,6 +1672,7 @@ - [is_transition_playing](functions-5.md#is_transition_playing) - [movtexqc_register](functions-5.md#movtexqc_register) - [play_transition](functions-5.md#play_transition) + - [reset_window_title](functions-5.md#reset_window_title) - [save_file_get_using_backup_slot](functions-5.md#save_file_get_using_backup_slot) - [save_file_set_using_backup_slot](functions-5.md#save_file_set_using_backup_slot) - [set_environment_region](functions-5.md#set_environment_region) @@ -1691,6 +1692,7 @@ - [set_save_file_modified](functions-5.md#set_save_file_modified) - [set_ttc_speed_setting](functions-5.md#set_ttc_speed_setting) - [set_vertex_color](functions-5.md#set_vertex_color) + - [set_window_title](functions-5.md#set_window_title)
diff --git a/src/pc/gfx/gfx_dummy.c b/src/pc/gfx/gfx_dummy.c index e494bc7e..77bd07f8 100644 --- a/src/pc/gfx/gfx_dummy.c +++ b/src/pc/gfx/gfx_dummy.c @@ -84,6 +84,12 @@ static int gfx_dummy_get_max_msaa(void) { return 0; } +static void gfx_dummy_set_window_title(UNUSED const char* title) { +} + +static void gfx_dummy_reset_window_title(void) { +} + static void gfx_dummy_wm_swap_buffers_begin(void) { } @@ -207,6 +213,8 @@ struct GfxWindowManagerAPI gfx_dummy_wm_api = { gfx_dummy_wm_set_cursor_visible, gfx_dummy_wm_delay, gfx_dummy_get_max_msaa, + gfx_dummy_set_window_title, + gfx_dummy_reset_window_title }; struct GfxRenderingAPI gfx_dummy_renderer_api = { diff --git a/src/pc/gfx/gfx_dxgi.cpp b/src/pc/gfx/gfx_dxgi.cpp index 18db4bba..fd3f68d9 100644 --- a/src/pc/gfx/gfx_dxgi.cpp +++ b/src/pc/gfx/gfx_dxgi.cpp @@ -670,6 +670,14 @@ static int gfx_dxgi_get_max_msaa(void) { return 0; } +static void gfx_dxgi_set_window_title(const char* title) { + SetWindowTextA(dxgi.h_wnd, title); +} + +static void gfx_dxgi_reset_window_title(void) { + SetWindowTextA(dxgi.h_wnd, TITLE); +} + HWND gfx_dxgi_get_h_wnd(void) { return dxgi.h_wnd; } diff --git a/src/pc/gfx/gfx_sdl1.c b/src/pc/gfx/gfx_sdl1.c index 9b278fed..45a52f3f 100644 --- a/src/pc/gfx/gfx_sdl1.c +++ b/src/pc/gfx/gfx_sdl1.c @@ -184,6 +184,14 @@ static int gfx_sdl_get_max_msaa(void) { return 0; } +static void gfx_sdl_set_window_title(const char* title) { + SDL_WM_SetCaption(title, NULL); +} + +static void gfx_sdl_reset_window_title(void) { + SDL_WM_SetCaption(TITLE, NULL); +} + static void gfx_sdl_shutdown(void) { if (SDL_WasInit(0)) SDL_Quit(); @@ -213,6 +221,8 @@ struct GfxWindowManagerAPI gfx_sdl = { gfx_sdl_set_cursor_visible, gfx_sdl_delay, gfx_sdl_get_max_msaa, + gfx_sdl_set_window_title, + gfx_sdl_reset_window_title }; #endif // BACKEND_WM diff --git a/src/pc/gfx/gfx_sdl2.c b/src/pc/gfx/gfx_sdl2.c index fcd88a91..b8cd4730 100644 --- a/src/pc/gfx/gfx_sdl2.c +++ b/src/pc/gfx/gfx_sdl2.c @@ -255,6 +255,14 @@ static int gfx_sdl_get_max_msaa(void) { return maxSamples; } +static void gfx_sdl_set_window_title(const char* title) { + SDL_SetWindowTitle(wnd, title); +} + +static void gfx_sdl_reset_window_title(void) { + SDL_SetWindowTitle(wnd, TITLE); +} + static void gfx_sdl_shutdown(void) { if (SDL_WasInit(0)) { if (ctx) { SDL_GL_DeleteContext(ctx); ctx = NULL; } @@ -287,6 +295,8 @@ struct GfxWindowManagerAPI gfx_sdl = { gfx_sdl_set_cursor_visible, gfx_sdl_delay, gfx_sdl_get_max_msaa, + gfx_sdl_set_window_title, + gfx_sdl_reset_window_title }; #endif // BACKEND_WM diff --git a/src/pc/gfx/gfx_window_manager_api.h b/src/pc/gfx/gfx_window_manager_api.h index 7fd8d807..ebb5eefb 100644 --- a/src/pc/gfx/gfx_window_manager_api.h +++ b/src/pc/gfx/gfx_window_manager_api.h @@ -27,6 +27,8 @@ struct GfxWindowManagerAPI { void (*set_cursor_visible)(bool); void (*delay)(unsigned int ms); int (*get_max_msaa)(void); + void (*set_window_title)(const char* title); + void (*reset_window_title)(void); }; #endif diff --git a/src/pc/lua/smlua_functions_autogen.c b/src/pc/lua/smlua_functions_autogen.c index e57b32d8..baec2ae3 100644 --- a/src/pc/lua/smlua_functions_autogen.c +++ b/src/pc/lua/smlua_functions_autogen.c @@ -29414,6 +29414,21 @@ int smlua_func_play_transition(lua_State* L) { return 1; } +int smlua_func_reset_window_title(UNUSED lua_State* L) { + if (L == NULL) { return 0; } + + int top = lua_gettop(L); + if (top != 0) { + LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "reset_window_title", 0, top); + return 0; + } + + + reset_window_title(); + + return 1; +} + int smlua_func_save_file_get_using_backup_slot(UNUSED lua_State* L) { if (L == NULL) { return 0; } @@ -29745,6 +29760,23 @@ int smlua_func_set_vertex_color(lua_State* L) { return 1; } +int smlua_func_set_window_title(lua_State* L) { + if (L == NULL) { return 0; } + + int top = lua_gettop(L); + if (top != 1) { + LOG_LUA_LINE("Improper param count for '%s': Expected %u, Received %u", "set_window_title", 1, top); + return 0; + } + + const char* title = smlua_to_string(L, 1); + if (!gSmLuaConvertSuccess) { LOG_LUA("Failed to convert parameter %u for function '%s'", 1, "set_window_title"); return 0; } + + set_window_title(title); + + return 1; +} + ///////////////////////// // smlua_model_utils.h // ///////////////////////// @@ -32973,6 +33005,7 @@ void smlua_bind_functions_autogen(void) { smlua_bind_function(L, "is_transition_playing", smlua_func_is_transition_playing); smlua_bind_function(L, "movtexqc_register", smlua_func_movtexqc_register); smlua_bind_function(L, "play_transition", smlua_func_play_transition); + smlua_bind_function(L, "reset_window_title", smlua_func_reset_window_title); smlua_bind_function(L, "save_file_get_using_backup_slot", smlua_func_save_file_get_using_backup_slot); smlua_bind_function(L, "save_file_set_using_backup_slot", smlua_func_save_file_set_using_backup_slot); smlua_bind_function(L, "set_environment_region", smlua_func_set_environment_region); @@ -32992,6 +33025,7 @@ void smlua_bind_functions_autogen(void) { smlua_bind_function(L, "set_save_file_modified", smlua_func_set_save_file_modified); smlua_bind_function(L, "set_ttc_speed_setting", smlua_func_set_ttc_speed_setting); smlua_bind_function(L, "set_vertex_color", smlua_func_set_vertex_color); + smlua_bind_function(L, "set_window_title", smlua_func_set_window_title); // smlua_model_utils.h smlua_bind_function(L, "smlua_model_util_get_id", smlua_func_smlua_model_util_get_id); diff --git a/src/pc/lua/utils/smlua_misc_utils.c b/src/pc/lua/utils/smlua_misc_utils.c index 155f2944..5eb66c7b 100644 --- a/src/pc/lua/utils/smlua_misc_utils.c +++ b/src/pc/lua/utils/smlua_misc_utils.c @@ -12,7 +12,7 @@ #include "pc/mods/mod.h" #include "pc/mods/mods.h" #include "pc/mods/mods_utils.h" - +#include "pc/pc_main.h" #include "game/object_list_processor.h" #include "game/rendering_graph_node.h" #include "game/level_update.h" @@ -638,6 +638,16 @@ void gfx_enable_adjust_for_aspect_ratio(bool enable) { /// +void set_window_title(const char* title) { + WAPI.set_window_title(title); +} + +void reset_window_title(void) { + WAPI.reset_window_title(); +} + +/// + const char* get_os_name(void) { #if defined(_WIN32) || defined(_WIN64) return "Windows"; diff --git a/src/pc/lua/utils/smlua_misc_utils.h b/src/pc/lua/utils/smlua_misc_utils.h index d5bdd2eb..d8d90fa4 100644 --- a/src/pc/lua/utils/smlua_misc_utils.h +++ b/src/pc/lua/utils/smlua_misc_utils.h @@ -158,6 +158,9 @@ bool get_coop_compatibility_enabled(void); bool gfx_get_adjust_for_aspect_ratio(void); void gfx_enable_adjust_for_aspect_ratio(bool enable); +void set_window_title(const char* title); +void reset_window_title(void); + const char* get_os_name(void); #endif diff --git a/src/pc/network/network.c b/src/pc/network/network.c index 0bc061d5..ae6cdcfc 100644 --- a/src/pc/network/network.c +++ b/src/pc/network/network.c @@ -722,6 +722,8 @@ void network_shutdown(bool sendLeaving, bool exiting, bool popup, bool reconnect extern s16 gMenuMode; gMenuMode = -1; + reset_window_title(); + djui_panel_shutdown(); extern bool gDjuiInMainMenu; if (!gDjuiInMainMenu) {