Skip to content

Commit 88e6997

Browse files
committed
Merge pull request #97745 from scgm0/Fix-blurred-content-of-embedded-windows
Improve blurred content of embedded windows
2 parents a7a2a12 + 0bc2c26 commit 88e6997

File tree

2 files changed

+10
-6
lines changed

2 files changed

+10
-6
lines changed

scene/main/viewport.cpp

+6-6
Original file line numberDiff line numberDiff line change
@@ -127,23 +127,24 @@ int ViewportTexture::get_width() const {
127127
_err_print_viewport_not_set();
128128
return 0;
129129
}
130-
return vp->size.width;
130+
return get_size().width;
131131
}
132132

133133
int ViewportTexture::get_height() const {
134134
if (!vp) {
135135
_err_print_viewport_not_set();
136136
return 0;
137137
}
138-
return vp->size.height;
138+
return get_size().height;
139139
}
140140

141141
Size2 ViewportTexture::get_size() const {
142142
if (!vp) {
143143
_err_print_viewport_not_set();
144144
return Size2();
145145
}
146-
return vp->size;
146+
float scale = MIN(vp->get_screen_transform().get_scale().width, vp->get_screen_transform().get_scale().height);
147+
return Size2(vp->size.width * scale, vp->size.height * scale).ceil();
147148
}
148149

149150
RID ViewportTexture::get_rid() const {
@@ -313,10 +314,8 @@ void Viewport::_sub_window_update(Window *p_window) {
313314
SubWindow &sw = gui.sub_windows.write[index];
314315
sw.pending_window_update = false;
315316

316-
Transform2D pos;
317-
pos.set_origin(p_window->get_position());
318317
RS::get_singleton()->canvas_item_clear(sw.canvas_item);
319-
Rect2i r = Rect2i(p_window->get_position(), sw.window->get_size());
318+
Rect2i r = Rect2i(p_window->get_position(), p_window->get_size());
320319

321320
if (!p_window->get_flag(Window::FLAG_BORDERLESS)) {
322321
Ref<StyleBox> panel = gui.subwindow_focused == p_window ? p_window->theme_cache.embedded_border : p_window->theme_cache.embedded_unfocused_border;
@@ -987,6 +986,7 @@ void Viewport::update_canvas_items() {
987986
for (Viewport::SubWindow w : gui.sub_windows) {
988987
if (w.window && !w.pending_window_update) {
989988
w.pending_window_update = true;
989+
w.window->_update_viewport_size();
990990
callable_mp(this, &Viewport::_sub_window_update).call_deferred(w.window);
991991
}
992992
}

scene/main/window.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -1267,6 +1267,10 @@ void Window::_update_viewport_size() {
12671267
notification(NOTIFICATION_WM_SIZE_CHANGED);
12681268

12691269
if (embedder) {
1270+
float scale = MIN(embedder->stretch_transform.get_scale().width, embedder->stretch_transform.get_scale().height);
1271+
Size2 s = Size2(final_size.width * scale, final_size.height * scale).ceil();
1272+
RS::get_singleton()->viewport_set_global_canvas_transform(get_viewport_rid(), global_canvas_transform * scale * content_scale_factor);
1273+
RS::get_singleton()->viewport_set_size(get_viewport_rid(), s.width, s.height);
12701274
embedder->_sub_window_update(this);
12711275
}
12721276
}

0 commit comments

Comments
 (0)