diff options
author | RĂ©mi Verschelde <rverschelde@gmail.com> | 2020-07-10 19:35:26 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-10 19:35:26 +0200 |
commit | 08bbb3f161bfb4860d7574fa77b947872d344e7e (patch) | |
tree | 0197b438d2e64bc62ca819b1dec702c1c6d43ccb | |
parent | 70e21154f0416c13655ad8ce176a1b899a5e70d2 (diff) | |
parent | 8230e08f18cb6ad5a039f8c874360b34863bf4e4 (diff) |
Merge pull request #38341 from verdog/camera-bounds-fix
Fix Camera2D incorrect preview bounds
-rw-r--r-- | editor/editor_node.cpp | 2 | ||||
-rw-r--r-- | scene/2d/camera_2d.cpp | 19 | ||||
-rw-r--r-- | scene/2d/camera_2d.h | 1 |
3 files changed, 15 insertions, 7 deletions
diff --git a/editor/editor_node.cpp b/editor/editor_node.cpp index fe68797483..f768a2cacf 100644 --- a/editor/editor_node.cpp +++ b/editor/editor_node.cpp @@ -456,8 +456,6 @@ void EditorNode::_notification(int p_what) { editor_selection->update(); - //scene_root->set_size_override(true, Size2(ProjectSettings::get_singleton()->get("display/window/size/width"), ProjectSettings::get_singleton()->get("display/window/size/height"))); - { //TODO should only happen on settings changed int current_filter = GLOBAL_GET("rendering/canvas_textures/default_texture_filter"); if (current_filter != scene_root->get_default_canvas_item_texture_filter()) { diff --git a/scene/2d/camera_2d.cpp b/scene/2d/camera_2d.cpp index 68e99445d8..992c86d632 100644 --- a/scene/2d/camera_2d.cpp +++ b/scene/2d/camera_2d.cpp @@ -32,6 +32,7 @@ #include "core/engine.h" #include "core/math/math_funcs.h" +#include "editor/editor_node.h" #include "scene/scene_string_names.h" #include "servers/rendering_server.h" @@ -56,7 +57,7 @@ void Camera2D::_update_scroll() { viewport->set_canvas_transform(xform); - Size2 screen_size = viewport->get_visible_rect().size; + Size2 screen_size = get_camera_screen_size(); Point2 screen_offset = (anchor_mode == ANCHOR_MODE_DRAG_CENTER ? (screen_size * 0.5) : Point2()); get_tree()->call_group_flags(SceneTree::GROUP_CALL_REALTIME, group_name, "_camera_moved", xform, screen_offset); @@ -94,7 +95,7 @@ Transform2D Camera2D::get_camera_transform() { ERR_FAIL_COND_V(custom_viewport && !ObjectDB::get_instance(custom_viewport_id), Transform2D()); - Size2 screen_size = viewport->get_visible_rect().size; + Size2 screen_size = get_camera_screen_size(); Point2 new_camera_pos = get_global_transform().get_origin(); Point2 ret_camera_pos; @@ -274,7 +275,7 @@ void Camera2D::_notification(int p_what) { } Transform2D inv_camera_transform = get_camera_transform().affine_inverse(); - Size2 screen_size = get_viewport_rect().size; + Size2 screen_size = get_camera_screen_size(); Vector2 screen_endpoints[4] = { inv_camera_transform.xform(Vector2(0, 0)), @@ -321,7 +322,7 @@ void Camera2D::_notification(int p_what) { } Transform2D inv_camera_transform = get_camera_transform().affine_inverse(); - Size2 screen_size = get_viewport_rect().size; + Size2 screen_size = get_camera_screen_size(); Vector2 margin_endpoints[4] = { inv_camera_transform.xform(Vector2((screen_size.width / 2) - ((screen_size.width / 2) * drag_margin[MARGIN_LEFT]), (screen_size.height / 2) - ((screen_size.height / 2) * drag_margin[MARGIN_TOP]))), @@ -469,7 +470,7 @@ void Camera2D::reset_smoothing() { void Camera2D::align() { ERR_FAIL_COND(custom_viewport && !ObjectDB::get_instance(custom_viewport_id)); - Size2 screen_size = viewport->get_visible_rect().size; + Size2 screen_size = get_camera_screen_size(); Point2 current_camera_pos = get_global_transform().get_origin(); if (anchor_mode == ANCHOR_MODE_DRAG_CENTER) { @@ -507,6 +508,14 @@ Point2 Camera2D::get_camera_screen_center() const { return camera_screen_center; } +Size2 Camera2D::get_camera_screen_size() const { + // special case if the camera2D is in the root viewport + if (Engine::get_singleton()->is_editor_hint() && get_viewport() == EditorNode::get_singleton()->get_scene_root()) { + return Size2(ProjectSettings::get_singleton()->get("display/window/size/width"), ProjectSettings::get_singleton()->get("display/window/size/height")); + } + return get_viewport_rect().size; +} + void Camera2D::set_h_drag_enabled(bool p_enabled) { h_drag_enabled = p_enabled; } diff --git a/scene/2d/camera_2d.h b/scene/2d/camera_2d.h index 0a4e269c40..4d34b51e97 100644 --- a/scene/2d/camera_2d.h +++ b/scene/2d/camera_2d.h @@ -147,6 +147,7 @@ public: Vector2 get_zoom() const; Point2 get_camera_screen_center() const; + Size2 get_camera_screen_size() const; void set_custom_viewport(Node *p_viewport); Node *get_custom_viewport() const; |