From 593598c592566249c39c458280aca1f796cb958d Mon Sep 17 00:00:00 2001 From: Rindbee Date: Fri, 10 Feb 2023 21:45:49 +0800 Subject: Calling popup_center* with the default size will use the current size --- doc/classes/Window.xml | 2 ++ scene/main/window.cpp | 10 ++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/doc/classes/Window.xml b/doc/classes/Window.xml index 14e705a7e6..92050eaa34 100644 --- a/doc/classes/Window.xml +++ b/doc/classes/Window.xml @@ -358,6 +358,7 @@ Popups the [Window] at the center of the current screen, with optionally given minimum size. If the [Window] is embedded, it will be centered in the parent [Viewport] instead. + [b]Note:[/b] Calling it with the default value of [param minsize] is equivalent to calling it with [member size]. @@ -367,6 +368,7 @@ Popups the [Window] centered inside its parent [Window]. [code]fallback_ratio[/code] determines the maximum size of the [Window], in relation to its parent. + [b]Note:[/b] Calling it with the default value of [param minsize] is equivalent to calling it with [member size]. diff --git a/scene/main/window.cpp b/scene/main/window.cpp index 771e074d48..663dd586c0 100644 --- a/scene/main/window.cpp +++ b/scene/main/window.cpp @@ -1422,6 +1422,9 @@ void Window::popup_centered_clamped(const Size2i &p_size, float p_fallback_ratio ERR_FAIL_COND(!is_inside_tree()); ERR_FAIL_COND_MSG(window_id == DisplayServer::MAIN_WINDOW_ID, "Can't popup the main window."); + // Consider the current size when calling with the default value. + Size2i expected_size = p_size == Size2i() ? size : p_size; + Rect2 parent_rect; if (is_embedded()) { @@ -1436,7 +1439,7 @@ void Window::popup_centered_clamped(const Size2i &p_size, float p_fallback_ratio Vector2i size_ratio = parent_rect.size * p_fallback_ratio; Rect2i popup_rect; - popup_rect.size = Vector2i(MIN(size_ratio.x, p_size.x), MIN(size_ratio.y, p_size.y)); + popup_rect.size = Vector2i(MIN(size_ratio.x, expected_size.x), MIN(size_ratio.y, expected_size.y)); popup_rect.size = _clamp_window_size(popup_rect.size); if (parent_rect != Rect2()) { @@ -1450,6 +1453,9 @@ void Window::popup_centered(const Size2i &p_minsize) { ERR_FAIL_COND(!is_inside_tree()); ERR_FAIL_COND_MSG(window_id == DisplayServer::MAIN_WINDOW_ID, "Can't popup the main window."); + // Consider the current size when calling with the default value. + Size2i expected_size = p_minsize == Size2i() ? size : p_minsize; + Rect2 parent_rect; if (is_embedded()) { @@ -1462,7 +1468,7 @@ void Window::popup_centered(const Size2i &p_minsize) { } Rect2i popup_rect; - popup_rect.size = _clamp_window_size(get_size().max(p_minsize)); + popup_rect.size = _clamp_window_size(expected_size); if (parent_rect != Rect2()) { popup_rect.position = parent_rect.position + (parent_rect.size - popup_rect.size) / 2; -- cgit v1.2.3