Skip to content

Commit 66bfa2d

Browse files
committed
Improve ViewportTexture::get_size
1 parent 36a3b25 commit 66bfa2d

File tree

2 files changed

+10
-20
lines changed

2 files changed

+10
-20
lines changed

scene/main/viewport.cpp

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -134,33 +134,23 @@ int ViewportTexture::get_width() const {
134134
_err_print_viewport_not_set();
135135
return 0;
136136
}
137-
if (vp->is_sub_viewport()) {
138-
return vp->size.width;
139-
}
140-
return vp->size.width * vp->get_stretch_transform().get_scale().width;
137+
return vp->size.width;
141138
}
142139

143140
int ViewportTexture::get_height() const {
144141
if (!vp) {
145142
_err_print_viewport_not_set();
146143
return 0;
147144
}
148-
if (vp->is_sub_viewport()) {
149-
return vp->size.height;
150-
}
151-
return vp->size.height * vp->get_stretch_transform().get_scale().height;
145+
return vp->size.height;
152146
}
153147

154148
Size2 ViewportTexture::get_size() const {
155149
if (!vp) {
156150
_err_print_viewport_not_set();
157151
return Size2();
158152
}
159-
if (vp->is_sub_viewport()) {
160-
return vp->size;
161-
}
162-
Size2 scale = vp->get_stretch_transform().get_scale();
163-
return Size2(vp->size.width * scale.width, vp->size.height * scale.height).ceil();
153+
return vp->size;
164154
}
165155

166156
RID ViewportTexture::get_rid() const {
@@ -337,7 +327,7 @@ void Viewport::_sub_window_update(Window *p_window) {
337327
sw.pending_window_update = false;
338328

339329
RS::get_singleton()->canvas_item_clear(sw.canvas_item);
340-
const Rect2i r = Rect2i(p_window->get_position(), p_window->get_size());
330+
const Rect2i r = Rect2i(p_window->get_position(), p_window->_get_size_2d_override());
341331

342332
if (!p_window->get_flag(Window::FLAG_BORDERLESS)) {
343333
Ref<StyleBox> panel = gui.subwindow_focused == p_window ? p_window->theme_cache.embedded_border : p_window->theme_cache.embedded_unfocused_border;
@@ -372,7 +362,7 @@ void Viewport::_sub_window_update(Window *p_window) {
372362
close_icon->draw(sw.canvas_item, r.position + Vector2(r.size.width - close_h_ofs, -close_v_ofs));
373363
}
374364

375-
const Transform2D xform = sw.window->window_transform * sw.window->stretch_transform;
365+
const Transform2D xform = sw.window->window_transform;
376366
Rect2 vr = xform.xform(sw.window->get_visible_rect());
377367
vr.position += p_window->get_position();
378368
if (vr != r) {

scene/main/window.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1306,6 +1306,11 @@ void Window::_update_viewport_size() {
13061306
}
13071307
}
13081308

1309+
if (embedder) {
1310+
Size2 scale = embedder->stretch_transform.get_scale();
1311+
final_size = Size2(final_size * scale).ceil();
1312+
}
1313+
13091314
bool allocate = is_inside_tree() && visible && (window_id != DisplayServer::INVALID_WINDOW_ID || embedder != nullptr);
13101315
_set_size(final_size, final_size_override, allocate);
13111316

@@ -1318,11 +1323,6 @@ void Window::_update_viewport_size() {
13181323
notification(NOTIFICATION_WM_SIZE_CHANGED);
13191324

13201325
if (embedder) {
1321-
float scale = MIN(embedder->stretch_transform.get_scale().width, embedder->stretch_transform.get_scale().height);
1322-
Viewport::set_oversampling_override(scale);
1323-
Size2 s = Size2(final_size.width * scale, final_size.height * scale).ceil();
1324-
RS::get_singleton()->viewport_set_global_canvas_transform(get_viewport_rid(), global_canvas_transform * scale * content_scale_factor);
1325-
RS::get_singleton()->viewport_set_size(get_viewport_rid(), s.width, s.height);
13261326
embedder->_sub_window_update(this);
13271327
}
13281328
}

0 commit comments

Comments
 (0)