3030
3131#include " embedded_process.h"
3232
33+ #include " core/config/project_settings.h"
3334#include " editor/editor_string_names.h"
3435#include " scene/main/window.h"
3536#include " scene/resources/style_box_flat.h"
3637#include " scene/theme/theme_db.h"
3738
3839void EmbeddedProcessBase::_notification (int p_what) {
3940 switch (p_what) {
41+ case NOTIFICATION_READY: {
42+ ProjectSettings::get_singleton ()->connect (" settings_changed" , callable_mp (this , &EmbeddedProcessBase::_project_settings_changed));
43+ } break ;
4044 case NOTIFICATION_ENTER_TREE: {
4145 window = get_window ();
46+ transp_enabled = GLOBAL_GET (" display/window/per_pixel_transparency/allowed" );
47+ clear_color = GLOBAL_GET (" rendering/environment/defaults/default_clear_color" );
4248 } break ;
4349 case NOTIFICATION_DRAW: {
4450 _draw ();
4551 } break ;
4652 case NOTIFICATION_THEME_CHANGED: {
53+ checkerboard = get_editor_theme_icon (SNAME (" Checkerboard" ));
4754 focus_style_box = get_theme_stylebox (SNAME (" FocusViewport" ), EditorStringName (EditorStyles));
4855 Ref<StyleBoxFlat> focus_style_box_flat = focus_style_box;
4956 if (focus_style_box_flat.is_valid ()) {
@@ -60,6 +67,12 @@ void EmbeddedProcessBase::_notification(int p_what) {
6067 }
6168}
6269
70+ void EmbeddedProcessBase::_project_settings_changed () {
71+ transp_enabled = GLOBAL_GET (" display/window/per_pixel_transparency/allowed" );
72+ clear_color = GLOBAL_GET (" rendering/environment/defaults/default_clear_color" );
73+ queue_redraw ();
74+ }
75+
6376void EmbeddedProcessBase::_bind_methods () {
6477 ADD_SIGNAL (MethodInfo (" embedding_completed" ));
6578 ADD_SIGNAL (MethodInfo (" embedding_failed" ));
@@ -68,6 +81,17 @@ void EmbeddedProcessBase::_bind_methods() {
6881}
6982
7083void EmbeddedProcessBase::_draw () {
84+ if (is_embedding_completed ()) {
85+ Rect2 r = get_adjusted_embedded_window_rect (get_rect ());
86+ #ifndef MACOS_ENABLED
87+ r.position -= get_window ()->get_position ();
88+ #endif
89+ if (transp_enabled) {
90+ draw_texture_rect (checkerboard, r, true );
91+ } else {
92+ draw_rect (r, clear_color, true );
93+ }
94+ }
7195 if (is_process_focused () && focus_style_box.is_valid ()) {
7296 Size2 size = get_size ();
7397 Rect2 r = Rect2 (Point2 (), size);
@@ -79,13 +103,15 @@ void EmbeddedProcessBase::set_window_size(const Size2i &p_window_size) {
79103 if (window_size != p_window_size) {
80104 window_size = p_window_size;
81105 queue_update_embedded_process ();
106+ queue_redraw ();
82107 }
83108}
84109
85110void EmbeddedProcessBase::set_keep_aspect (bool p_keep_aspect) {
86111 if (keep_aspect != p_keep_aspect) {
87112 keep_aspect = p_keep_aspect;
88113 queue_update_embedded_process ();
114+ queue_redraw ();
89115 }
90116}
91117
0 commit comments