diff options
Diffstat (limited to 'scene/main/window.cpp')
-rw-r--r-- | scene/main/window.cpp | 70 |
1 files changed, 44 insertions, 26 deletions
diff --git a/scene/main/window.cpp b/scene/main/window.cpp index f5468b29c5..71ec9b29c5 100644 --- a/scene/main/window.cpp +++ b/scene/main/window.cpp @@ -270,20 +270,21 @@ void Window::set_title(const String &p_title) { ERR_MAIN_THREAD_GUARD; title = p_title; + tr_title = atr(p_title); +#ifdef DEBUG_ENABLED + if (window_id == DisplayServer::MAIN_WINDOW_ID) { + // Append a suffix to the window title to denote that the project is running + // from a debug build (including the editor). Since this results in lower performance, + // this should be clearly presented to the user. + tr_title = vformat("%s (DEBUG)", tr_title); + } +#endif if (embedder) { embedder->_sub_window_update(this); } else if (window_id != DisplayServer::INVALID_WINDOW_ID) { - String tr_title = atr(p_title); -#ifdef DEBUG_ENABLED - if (window_id == DisplayServer::MAIN_WINDOW_ID) { - // Append a suffix to the window title to denote that the project is running - // from a debug build (including the editor). Since this results in lower performance, - // this should be clearly presented to the user. - tr_title = vformat("%s (DEBUG)", tr_title); - } -#endif DisplayServer::get_singleton()->window_set_title(tr_title, window_id); + _update_window_size(); } } @@ -586,15 +587,6 @@ void Window::_make_window() { DisplayServer::get_singleton()->window_set_max_size(Size2i(), window_id); DisplayServer::get_singleton()->window_set_min_size(Size2i(), window_id); DisplayServer::get_singleton()->window_set_mouse_passthrough(mpath, window_id); - String tr_title = atr(title); -#ifdef DEBUG_ENABLED - if (window_id == DisplayServer::MAIN_WINDOW_ID) { - // Append a suffix to the window title to denote that the project is running - // from a debug build (including the editor). Since this results in lower performance, - // this should be clearly presented to the user. - tr_title = vformat("%s (DEBUG)", tr_title); - } -#endif DisplayServer::get_singleton()->window_set_title(tr_title, window_id); DisplayServer::get_singleton()->window_attach_instance_id(get_instance_id(), window_id); @@ -994,6 +986,12 @@ void Window::_update_window_size() { } DisplayServer::get_singleton()->window_set_max_size(max_size_used, window_id); + + if (keep_title_visible) { + Size2i title_size = DisplayServer::get_singleton()->window_get_title_size(tr_title, window_id); + size_limit = size_limit.max(title_size); + } + DisplayServer::get_singleton()->window_set_min_size(size_limit, window_id); DisplayServer::get_singleton()->window_set_size(size, window_id); } @@ -1281,17 +1279,19 @@ void Window::_notification(int p_what) { _invalidate_theme_cache(); _update_theme_item_cache(); - if (!embedder && window_id != DisplayServer::INVALID_WINDOW_ID) { - String tr_title = atr(title); + tr_title = atr(title); #ifdef DEBUG_ENABLED - if (window_id == DisplayServer::MAIN_WINDOW_ID) { - // Append a suffix to the window title to denote that the project is running - // from a debug build (including the editor). Since this results in lower performance, - // this should be clearly presented to the user. - tr_title = vformat("%s (DEBUG)", tr_title); - } + if (window_id == DisplayServer::MAIN_WINDOW_ID) { + // Append a suffix to the window title to denote that the project is running + // from a debug build (including the editor). Since this results in lower performance, + // this should be clearly presented to the user. + tr_title = vformat("%s (DEBUG)", tr_title); + } #endif + + if (!embedder && window_id != DisplayServer::INVALID_WINDOW_ID) { DisplayServer::get_singleton()->window_set_title(tr_title, window_id); + _update_window_size(); } } break; @@ -1384,6 +1384,20 @@ Window::ContentScaleStretch Window::get_content_scale_stretch() const { return content_scale_stretch; } +void Window::set_keep_title_visible(bool p_title_visible) { + if (keep_title_visible == p_title_visible) { + return; + } + keep_title_visible = p_title_visible; + if (window_id != DisplayServer::INVALID_WINDOW_ID) { + _update_window_size(); + } +} + +bool Window::get_keep_title_visible() const { + return keep_title_visible; +} + void Window::set_content_scale_factor(real_t p_factor) { ERR_MAIN_THREAD_GUARD; ERR_FAIL_COND(p_factor <= 0); @@ -2713,6 +2727,9 @@ void Window::_bind_methods() { ClassDB::bind_method(D_METHOD("set_content_scale_stretch", "stretch"), &Window::set_content_scale_stretch); ClassDB::bind_method(D_METHOD("get_content_scale_stretch"), &Window::get_content_scale_stretch); + ClassDB::bind_method(D_METHOD("set_keep_title_visible", "title_visible"), &Window::set_keep_title_visible); + ClassDB::bind_method(D_METHOD("get_keep_title_visible"), &Window::get_keep_title_visible); + ClassDB::bind_method(D_METHOD("set_content_scale_factor", "factor"), &Window::set_content_scale_factor); ClassDB::bind_method(D_METHOD("get_content_scale_factor"), &Window::get_content_scale_factor); @@ -2826,6 +2843,7 @@ void Window::_bind_methods() { ADD_GROUP("Limits", ""); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "min_size", PROPERTY_HINT_NONE, "suffix:px"), "set_min_size", "get_min_size"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "max_size", PROPERTY_HINT_NONE, "suffix:px"), "set_max_size", "get_max_size"); + ADD_PROPERTY(PropertyInfo(Variant::BOOL, "keep_title_visible"), "set_keep_title_visible", "get_keep_title_visible"); ADD_GROUP("Content Scale", "content_scale_"); ADD_PROPERTY(PropertyInfo(Variant::VECTOR2I, "content_scale_size"), "set_content_scale_size", "get_content_scale_size"); |