diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2024-02-02 12:06:29 +0100 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2024-02-02 12:06:29 +0100 |
commit | 10e111477db68fe65776a1d68fb1ffccaf6520fc (patch) | |
tree | a2b0e2c750c9b89f6b2d46f8334be94fcbdc8f91 | |
parent | 0d1fa8d657d503b478b1056422d3d3f4941116e3 (diff) | |
parent | 0d88aadd53fe966942fb0aa13bce2d177648a897 (diff) | |
download | redot-engine-10e111477db68fe65776a1d68fb1ffccaf6520fc.tar.gz |
Merge pull request #87856 from bruvzg/transpbg
Automatically set viewport background to transparent when window flag is set.
-rw-r--r-- | doc/classes/Window.xml | 2 | ||||
-rw-r--r-- | scene/main/window.cpp | 8 |
2 files changed, 8 insertions, 2 deletions
diff --git a/doc/classes/Window.xml b/doc/classes/Window.xml index 618a774aae..ab14f64aa1 100644 --- a/doc/classes/Window.xml +++ b/doc/classes/Window.xml @@ -675,7 +675,7 @@ <member name="transparent" type="bool" setter="set_flag" getter="get_flag" default="false"> If [code]true[/code], the [Window]'s background can be transparent. This is best used with embedded windows. [b]Note:[/b] Transparency support is implemented on Linux, macOS and Windows, but availability might vary depending on GPU driver, display manager, and compositor capabilities. - [b]Note:[/b] This property has no effect if either [member ProjectSettings.display/window/per_pixel_transparency/allowed], or the window's [member Viewport.transparent_bg] is set to [code]false[/code]. + [b]Note:[/b] This property has no effect if [member ProjectSettings.display/window/per_pixel_transparency/allowed] is set to [code]false[/code]. </member> <member name="unfocusable" type="bool" setter="set_flag" getter="get_flag" default="false"> If [code]true[/code], the [Window] can't be focused nor interacted with. It can still be visible. diff --git a/scene/main/window.cpp b/scene/main/window.cpp index 99f9e11b1f..fd64220c2c 100644 --- a/scene/main/window.cpp +++ b/scene/main/window.cpp @@ -484,9 +484,12 @@ void Window::set_flag(Flags p_flag, bool p_enabled) { ERR_FAIL_INDEX(p_flag, FLAG_MAX); flags[p_flag] = p_enabled; + if (p_flag == FLAG_TRANSPARENT) { + set_transparent_background(p_enabled); + } + if (embedder) { embedder->_sub_window_update(this); - } else if (window_id != DisplayServer::INVALID_WINDOW_ID) { if (!is_in_edited_scene_root()) { DisplayServer::get_singleton()->window_set_flag(DisplayServer::WindowFlags(p_flag), p_enabled, window_id); @@ -1285,6 +1288,9 @@ void Window::_notification(int p_what) { _update_viewport_size(); // Then feed back to the viewport. _update_window_callbacks(); RS::get_singleton()->viewport_set_update_mode(get_viewport_rid(), RS::VIEWPORT_UPDATE_WHEN_VISIBLE); + if (DisplayServer::get_singleton()->window_get_flag(DisplayServer::WindowFlags(FLAG_TRANSPARENT), window_id)) { + set_transparent_background(true); + } } else { // Create. if (visible) { |