Skip to content

Commit 0eff41d

Browse files
committed
Fix displaying of embedded Window
Fix Rect of texture to take window and stretch transform into account. There is no need for `viewport_attach_to_screen` for embedded windows, since their display is handled via `Viewport::_sub_window_update`.
1 parent 4364ed6 commit 0eff41d

File tree

2 files changed

+8
-2
lines changed

2 files changed

+8
-2
lines changed

scene/main/viewport.cpp

+7-1
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,13 @@ void Viewport::_sub_window_update(Window *p_window) {
348348
close_icon->draw(sw.canvas_item, r.position + Vector2(r.size.width - close_h_ofs, -close_v_ofs));
349349
}
350350

351-
RS::get_singleton()->canvas_item_add_texture_rect(sw.canvas_item, r, sw.window->get_texture()->get_rid());
351+
const Transform2D xform = sw.window->window_transform * sw.window->stretch_transform;
352+
Rect2 vr = xform.xform(sw.window->get_visible_rect());
353+
vr.position += p_window->get_position();
354+
if (vr != r) {
355+
RS::get_singleton()->canvas_item_add_rect(sw.canvas_item, r, Color());
356+
}
357+
RS::get_singleton()->canvas_item_add_texture_rect(sw.canvas_item, vr, sw.window->get_texture()->get_rid());
352358
}
353359

354360
void Viewport::_sub_window_grab_focus(Window *p_window) {

scene/main/window.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -1239,7 +1239,7 @@ void Window::_update_viewport_size() {
12391239

12401240
if (window_id != DisplayServer::INVALID_WINDOW_ID) {
12411241
RenderingServer::get_singleton()->viewport_attach_to_screen(get_viewport_rid(), attach_to_screen_rect, window_id);
1242-
} else {
1242+
} else if (!is_embedded()) {
12431243
RenderingServer::get_singleton()->viewport_attach_to_screen(get_viewport_rid(), Rect2i(), DisplayServer::INVALID_WINDOW_ID);
12441244
}
12451245

0 commit comments

Comments
 (0)