Skip to content

Commit

Permalink
Merge pull request #92317 from bruvzg/emb_decorations
Browse files Browse the repository at this point in the history
Fix `get_position_with_decorations` and `get_size_with_decorations` for embedded windows.
  • Loading branch information
akien-mga committed May 30, 2024
2 parents 4cd39c5 + 64d789a commit c9f2497
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 0 deletions.
2 changes: 2 additions & 0 deletions doc/classes/Window.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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">
Expand Down
20 changes: 20 additions & 0 deletions scene/main/window.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand All @@ -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;
}

Expand Down

0 comments on commit c9f2497

Please sign in to comment.