|
@@ -791,15 +791,21 @@ void Viewport::update_canvas_items() {
|
|
|
_update_canvas_items(this);
|
|
|
}
|
|
|
|
|
|
-void Viewport::_set_size(const Size2i &p_size, const Size2i &p_size_2d_override, const Rect2i &p_to_screen_rect, const Transform2D &p_stretch_transform, bool p_allocated) {
|
|
|
- if (size == p_size && size_allocated == p_allocated && stretch_transform == p_stretch_transform && p_size_2d_override == size_2d_override && to_screen_rect == p_to_screen_rect) {
|
|
|
+void Viewport::_set_size(const Size2i &p_size, const Size2i &p_size_2d_override, const Rect2i &p_to_screen_rect, 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);
|
|
|
+ stretch_transform_new.scale(scale);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (size == p_size && size_allocated == p_allocated && stretch_transform == stretch_transform_new && p_size_2d_override == size_2d_override && to_screen_rect == p_to_screen_rect) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
size = p_size;
|
|
|
size_allocated = p_allocated;
|
|
|
size_2d_override = p_size_2d_override;
|
|
|
- stretch_transform = p_stretch_transform;
|
|
|
+ stretch_transform = stretch_transform_new;
|
|
|
to_screen_rect = p_to_screen_rect;
|
|
|
|
|
|
#ifndef _3D_DISABLED
|
|
@@ -4132,7 +4138,7 @@ void SubViewport::_internal_set_size(const Size2i &p_size, bool p_force) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- _set_size(p_size, _get_size_2d_override(), Rect2i(), _stretch_transform(), true);
|
|
|
+ _set_size(p_size, _get_size_2d_override(), Rect2i(), true);
|
|
|
|
|
|
if (c) {
|
|
|
c->update_minimum_size();
|
|
@@ -4144,7 +4150,7 @@ Size2i SubViewport::get_size() const {
|
|
|
}
|
|
|
|
|
|
void SubViewport::set_size_2d_override(const Size2i &p_size) {
|
|
|
- _set_size(_get_size(), p_size, Rect2i(), _stretch_transform(), true);
|
|
|
+ _set_size(_get_size(), p_size, Rect2i(), true);
|
|
|
}
|
|
|
|
|
|
Size2i SubViewport::get_size_2d_override() const {
|
|
@@ -4157,7 +4163,7 @@ void SubViewport::set_size_2d_override_stretch(bool p_enable) {
|
|
|
}
|
|
|
|
|
|
size_2d_override_stretch = p_enable;
|
|
|
- _set_size(_get_size(), _get_size_2d_override(), Rect2i(), _stretch_transform(), true);
|
|
|
+ _set_size(_get_size(), _get_size_2d_override(), Rect2i(), true);
|
|
|
}
|
|
|
|
|
|
bool SubViewport::is_size_2d_override_stretch_enabled() const {
|
|
@@ -4186,17 +4192,6 @@ DisplayServer::WindowID SubViewport::get_window_id() const {
|
|
|
return DisplayServer::INVALID_WINDOW_ID;
|
|
|
}
|
|
|
|
|
|
-Transform2D SubViewport::_stretch_transform() {
|
|
|
- Transform2D transform;
|
|
|
- Size2i view_size_2d_override = _get_size_2d_override();
|
|
|
- if (size_2d_override_stretch && view_size_2d_override.width > 0 && view_size_2d_override.height > 0) {
|
|
|
- Size2 scale = Size2(_get_size()) / Size2(view_size_2d_override);
|
|
|
- transform.scale(scale);
|
|
|
- }
|
|
|
-
|
|
|
- return transform;
|
|
|
-}
|
|
|
-
|
|
|
Transform2D SubViewport::get_screen_transform() const {
|
|
|
Transform2D container_transform;
|
|
|
SubViewportContainer *c = Object::cast_to<SubViewportContainer>(get_parent());
|