Skip to content

Commit 490854e

Browse files
committed
Merge pull request #102741 from KerekesDavid/fix-viewport-scale
Fix viewport scaling at intermediate resolutions
2 parents 3d81685 + 315cc5e commit 490854e

File tree

3 files changed

+12
-9
lines changed

3 files changed

+12
-9
lines changed

scene/main/viewport.cpp

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -998,10 +998,10 @@ void Viewport::update_canvas_items() {
998998
_update_canvas_items(this);
999999
}
10001000

1001-
bool Viewport::_set_size(const Size2i &p_size, const Size2i &p_size_2d_override, bool p_allocated) {
1001+
bool Viewport::_set_size(const Size2i &p_size, const Size2 &p_size_2d_override, bool p_allocated) {
10021002
Transform2D stretch_transform_new = Transform2D();
10031003
if (is_size_2d_override_stretch_enabled() && p_size_2d_override.width > 0 && p_size_2d_override.height > 0) {
1004-
Size2 scale = Size2(p_size) / Size2(p_size_2d_override);
1004+
Size2 scale = Size2(p_size) / p_size_2d_override;
10051005
stretch_transform_new.scale(scale);
10061006
}
10071007

@@ -1070,7 +1070,7 @@ Size2i Viewport::_get_size() const {
10701070
return size;
10711071
}
10721072

1073-
Size2i Viewport::_get_size_2d_override() const {
1073+
Size2 Viewport::_get_size_2d_override() const {
10741074
return size_2d_override;
10751075
}
10761076

@@ -1088,7 +1088,7 @@ Rect2 Viewport::get_visible_rect() const {
10881088
r = Rect2(Point2(), size);
10891089
}
10901090

1091-
if (size_2d_override != Size2i()) {
1091+
if (size_2d_override != Size2()) {
10921092
r.size = size_2d_override;
10931093
}
10941094

@@ -5219,7 +5219,10 @@ void SubViewport::set_size_2d_override(const Size2i &p_size) {
52195219

52205220
Size2i SubViewport::get_size_2d_override() const {
52215221
ERR_READ_THREAD_GUARD_V(Size2i());
5222-
return _get_size_2d_override();
5222+
// Rounding will cause offset issues with the
5223+
// exact positioning of subwindows, but changing the
5224+
// type of size_2d_override would break compatibility.
5225+
return Size2i((_get_size_2d_override() + Size2(0.5, 0.5)).floor());
52235226
}
52245227

52255228
void SubViewport::set_size_2d_override_stretch(bool p_enable) {

scene/main/viewport.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ class Viewport : public Node {
252252
Transform2D stretch_transform;
253253

254254
Size2i size = Size2i(512, 512);
255-
Size2i size_2d_override;
255+
Size2 size_2d_override;
256256
bool size_allocated = false;
257257

258258
RID contact_2d_debug;
@@ -492,10 +492,10 @@ class Viewport : public Node {
492492
void _window_start_resize(SubWindowResize p_edge, Window *p_window);
493493

494494
protected:
495-
bool _set_size(const Size2i &p_size, const Size2i &p_size_2d_override, bool p_allocated);
495+
bool _set_size(const Size2i &p_size, const Size2 &p_size_2d_override, bool p_allocated);
496496

497497
Size2i _get_size() const;
498-
Size2i _get_size_2d_override() const;
498+
Size2 _get_size_2d_override() const;
499499
bool _is_size_allocated() const;
500500

501501
void _notification(int p_what);

scene/main/window.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1133,7 +1133,7 @@ void Window::_update_viewport_size() {
11331133
//update the viewport part
11341134

11351135
Size2i final_size;
1136-
Size2i final_size_override;
1136+
Size2 final_size_override;
11371137
Rect2i attach_to_screen_rect(Point2i(), size);
11381138
double font_oversampling = 1.0;
11391139
window_transform = Transform2D();

0 commit comments

Comments
 (0)