Skip to content

Commit

Permalink
Merge pull request #102741 from KerekesDavid/fix-viewport-scale
Browse files Browse the repository at this point in the history
Fix viewport scaling at intermediate resolutions
  • Loading branch information
Repiteo committed Mar 6, 2025
2 parents 3d81685 + 315cc5e commit 490854e
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 9 deletions.
13 changes: 8 additions & 5 deletions scene/main/viewport.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -998,10 +998,10 @@ void Viewport::update_canvas_items() {
_update_canvas_items(this);
}

bool Viewport::_set_size(const Size2i &p_size, const Size2i &p_size_2d_override, bool p_allocated) {
bool Viewport::_set_size(const Size2i &p_size, const Size2 &p_size_2d_override, bool p_allocated) {
Transform2D stretch_transform_new = Transform2D();
if (is_size_2d_override_stretch_enabled() && p_size_2d_override.width > 0 && p_size_2d_override.height > 0) {
Size2 scale = Size2(p_size) / Size2(p_size_2d_override);
Size2 scale = Size2(p_size) / p_size_2d_override;
stretch_transform_new.scale(scale);
}

Expand Down Expand Up @@ -1070,7 +1070,7 @@ Size2i Viewport::_get_size() const {
return size;
}

Size2i Viewport::_get_size_2d_override() const {
Size2 Viewport::_get_size_2d_override() const {
return size_2d_override;
}

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

if (size_2d_override != Size2i()) {
if (size_2d_override != Size2()) {
r.size = size_2d_override;
}

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

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

void SubViewport::set_size_2d_override_stretch(bool p_enable) {
Expand Down
6 changes: 3 additions & 3 deletions scene/main/viewport.h
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@ class Viewport : public Node {
Transform2D stretch_transform;

Size2i size = Size2i(512, 512);
Size2i size_2d_override;
Size2 size_2d_override;
bool size_allocated = false;

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

protected:
bool _set_size(const Size2i &p_size, const Size2i &p_size_2d_override, bool p_allocated);
bool _set_size(const Size2i &p_size, const Size2 &p_size_2d_override, bool p_allocated);

Size2i _get_size() const;
Size2i _get_size_2d_override() const;
Size2 _get_size_2d_override() const;
bool _is_size_allocated() const;

void _notification(int p_what);
Expand Down
2 changes: 1 addition & 1 deletion scene/main/window.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1133,7 +1133,7 @@ void Window::_update_viewport_size() {
//update the viewport part

Size2i final_size;
Size2i final_size_override;
Size2 final_size_override;
Rect2i attach_to_screen_rect(Point2i(), size);
double font_oversampling = 1.0;
window_transform = Transform2D();
Expand Down

0 comments on commit 490854e

Please sign in to comment.