diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2024-05-30 11:48:02 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2024-05-30 11:48:02 +0200 |
commit | c9f249796df71f1921c7e8ea11cd23c2339e9376 (patch) | |
tree | 9699aac8c15d4e203d8f6290825ac80c1c310cfa | |
parent | 4cd39c56fb242137f025313e64c13ab147113d09 (diff) | |
parent | 64d789aba7b5f57611d503be55e9405ff389e05e (diff) | |
download | redot-engine-c9f249796df71f1921c7e8ea11cd23c2339e9376.tar.gz |
Merge pull request #92317 from bruvzg/emb_decorations
Fix `get_position_with_decorations` and `get_size_with_decorations` for embedded windows.
-rw-r--r-- | doc/classes/Window.xml | 2 | ||||
-rw-r--r-- | scene/main/window.cpp | 20 |
2 files changed, 22 insertions, 0 deletions
diff --git a/doc/classes/Window.xml b/doc/classes/Window.xml index 9c0e8011dc..286b35d642 100644 --- a/doc/classes/Window.xml +++ b/doc/classes/Window.xml @@ -118,12 +118,14 @@ <return type="Vector2i" /> <description> Returns the window's position including its border. + [b]Note:[/b] If [member visible] is [code]false[/code], this method returns the same value as [member position]. </description> </method> <method name="get_size_with_decorations" qualifiers="const"> <return type="Vector2i" /> <description> Returns the window's size including its border. + [b]Note:[/b] If [member visible] is [code]false[/code], this method returns the same value as [member size]. </description> </method> <method name="get_theme_color" qualifiers="const"> diff --git a/scene/main/window.cpp b/scene/main/window.cpp index addbd6078a..b5824bc695 100644 --- a/scene/main/window.cpp +++ b/scene/main/window.cpp @@ -408,6 +408,16 @@ Point2i Window::get_position_with_decorations() const { if (window_id != DisplayServer::INVALID_WINDOW_ID) { return DisplayServer::get_singleton()->window_get_position_with_decorations(window_id); } + if (visible && is_embedded() && !get_flag(Window::FLAG_BORDERLESS)) { + Size2 border_offset; + if (theme_cache.embedded_border.is_valid()) { + border_offset = theme_cache.embedded_border->get_offset(); + } + if (theme_cache.embedded_unfocused_border.is_valid()) { + border_offset = border_offset.max(theme_cache.embedded_unfocused_border->get_offset()); + } + return position - border_offset; + } return position; } @@ -416,6 +426,16 @@ Size2i Window::get_size_with_decorations() const { if (window_id != DisplayServer::INVALID_WINDOW_ID) { return DisplayServer::get_singleton()->window_get_size_with_decorations(window_id); } + if (visible && is_embedded() && !get_flag(Window::FLAG_BORDERLESS)) { + Size2 border_size; + if (theme_cache.embedded_border.is_valid()) { + border_size = theme_cache.embedded_border->get_minimum_size(); + } + if (theme_cache.embedded_unfocused_border.is_valid()) { + border_size = border_size.max(theme_cache.embedded_unfocused_border->get_minimum_size()); + } + return size + border_size; + } return size; } |