mirror of
https://github.com/godotengine/godot.git
synced 2025-10-19 07:53:26 +00:00
Merge pull request #109469 from ryevdokimov/fix-previews
Fix cinematic preview causing the editor redraw continuously and aspect ratio not updating in camera preview
This commit is contained in:
commit
8aa37cab89
2 changed files with 35 additions and 7 deletions
|
@ -3048,6 +3048,7 @@ void Node3DEditorViewport::_notification(int p_what) {
|
|||
switch (p_what) {
|
||||
case NOTIFICATION_TRANSLATION_CHANGED: {
|
||||
_update_name();
|
||||
_update_centered_labels();
|
||||
message_time = MIN(message_time, 0.001); // Make it disappear.
|
||||
|
||||
Key key = (OS::get_singleton()->has_feature("macos") || OS::get_singleton()->has_feature("web_macos") || OS::get_singleton()->has_feature("web_ios")) ? Key::META : Key::CTRL;
|
||||
|
@ -3154,9 +3155,11 @@ void Node3DEditorViewport::_notification(int p_what) {
|
|||
//then switch the viewport's camera to the scene's viewport camera
|
||||
if (previewing != nullptr) {
|
||||
previewing->disconnect(SceneStringName(tree_exited), callable_mp(this, &Node3DEditorViewport::_preview_exited_scene));
|
||||
previewing->disconnect(CoreStringName(property_list_changed), callable_mp(this, &Node3DEditorViewport::_preview_camera_property_changed));
|
||||
}
|
||||
previewing = cam;
|
||||
previewing->connect(SceneStringName(tree_exited), callable_mp(this, &Node3DEditorViewport::_preview_exited_scene));
|
||||
previewing->connect(CoreStringName(property_list_changed), callable_mp(this, &Node3DEditorViewport::_preview_camera_property_changed));
|
||||
RS::get_singleton()->viewport_attach_camera(viewport->get_viewport_rid(), cam->get_camera());
|
||||
surface->queue_redraw();
|
||||
}
|
||||
|
@ -3335,13 +3338,6 @@ void Node3DEditorViewport::_notification(int p_what) {
|
|||
Math::remap(fps, 110, 10, 0, 1)));
|
||||
}
|
||||
|
||||
bool show_cinema = view_display_menu->get_popup()->is_item_checked(view_display_menu->get_popup()->get_item_index(VIEW_CINEMATIC_PREVIEW));
|
||||
cinema_label->set_visible(show_cinema);
|
||||
if (show_cinema) {
|
||||
float cinema_half_width = cinema_label->get_size().width / 2.0f;
|
||||
cinema_label->set_anchor_and_offset(SIDE_LEFT, 0.5f, -cinema_half_width);
|
||||
}
|
||||
|
||||
if (lock_rotation) {
|
||||
float locked_half_width = locked_label->get_size().width / 2.0f;
|
||||
locked_label->set_anchor_and_offset(SIDE_LEFT, 0.5f, -locked_half_width);
|
||||
|
@ -3425,6 +3421,8 @@ void Node3DEditorViewport::_notification(int p_what) {
|
|||
} break;
|
||||
|
||||
case NOTIFICATION_THEME_CHANGED: {
|
||||
_update_centered_labels();
|
||||
|
||||
view_display_menu->set_button_icon(get_editor_theme_icon(SNAME("GuiTabMenuHl")));
|
||||
preview_camera->set_button_icon(get_editor_theme_icon(SNAME("Camera3D")));
|
||||
Control *gui_base = EditorNode::get_singleton()->get_gui_base();
|
||||
|
@ -3885,6 +3883,10 @@ void Node3DEditorViewport::_menu_option(int p_option) {
|
|||
previewing_cinema = true;
|
||||
_toggle_cinema_preview(current);
|
||||
|
||||
cinema_label->set_visible(current);
|
||||
_update_centered_labels();
|
||||
surface->queue_redraw();
|
||||
|
||||
if (current) {
|
||||
preview_camera->hide();
|
||||
} else {
|
||||
|
@ -4065,6 +4067,20 @@ void Node3DEditorViewport::_preview_exited_scene() {
|
|||
view_display_menu->show();
|
||||
}
|
||||
|
||||
void Node3DEditorViewport::_preview_camera_property_changed() {
|
||||
if (previewing) {
|
||||
surface->queue_redraw();
|
||||
}
|
||||
}
|
||||
|
||||
void Node3DEditorViewport::_update_centered_labels() {
|
||||
if (cinema_label->is_visible()) {
|
||||
cinema_label->reset_size();
|
||||
float cinema_half_width = cinema_label->get_size().width / 2.0f;
|
||||
cinema_label->set_anchor_and_offset(SIDE_LEFT, 0.5f, -cinema_half_width);
|
||||
}
|
||||
}
|
||||
|
||||
void Node3DEditorViewport::_init_gizmo_instance(int p_idx) {
|
||||
uint32_t layer = 1 << (GIZMO_BASE_LAYER + p_idx);
|
||||
|
||||
|
@ -4158,6 +4174,7 @@ void Node3DEditorViewport::_toggle_camera_preview(bool p_activate) {
|
|||
|
||||
if (!p_activate) {
|
||||
previewing->disconnect(SceneStringName(tree_exiting), callable_mp(this, &Node3DEditorViewport::_preview_exited_scene));
|
||||
previewing->disconnect(CoreStringName(property_list_changed), callable_mp(this, &Node3DEditorViewport::_preview_camera_property_changed));
|
||||
previewing = nullptr;
|
||||
RS::get_singleton()->viewport_attach_camera(viewport->get_viewport_rid(), camera->get_camera()); //restore
|
||||
if (!preview) {
|
||||
|
@ -4168,6 +4185,7 @@ void Node3DEditorViewport::_toggle_camera_preview(bool p_activate) {
|
|||
} else {
|
||||
previewing = preview;
|
||||
previewing->connect(SceneStringName(tree_exiting), callable_mp(this, &Node3DEditorViewport::_preview_exited_scene));
|
||||
previewing->connect(CoreStringName(property_list_changed), callable_mp(this, &Node3DEditorViewport::_preview_camera_property_changed));
|
||||
RS::get_singleton()->viewport_attach_camera(viewport->get_viewport_rid(), preview->get_camera()); //replace
|
||||
surface->queue_redraw();
|
||||
}
|
||||
|
@ -4180,6 +4198,7 @@ void Node3DEditorViewport::_toggle_cinema_preview(bool p_activate) {
|
|||
if (!previewing_cinema) {
|
||||
if (previewing != nullptr) {
|
||||
previewing->disconnect(SceneStringName(tree_exited), callable_mp(this, &Node3DEditorViewport::_preview_exited_scene));
|
||||
previewing->disconnect(CoreStringName(property_list_changed), callable_mp(this, &Node3DEditorViewport::_preview_camera_property_changed));
|
||||
}
|
||||
|
||||
previewing = nullptr;
|
||||
|
@ -4431,6 +4450,12 @@ void Node3DEditorViewport::set_state(const Dictionary &p_state) {
|
|||
|
||||
int idx = view_display_menu->get_popup()->get_item_index(VIEW_CINEMATIC_PREVIEW);
|
||||
view_display_menu->get_popup()->set_item_checked(idx, previewing_cinema);
|
||||
|
||||
cinema_label->set_visible(previewing_cinema);
|
||||
if (previewing_cinema) {
|
||||
_update_centered_labels();
|
||||
surface->queue_redraw();
|
||||
}
|
||||
}
|
||||
|
||||
if (preview_camera->is_connected(SceneStringName(toggled), callable_mp(this, &Node3DEditorViewport::_toggle_camera_preview))) {
|
||||
|
@ -4441,6 +4466,7 @@ void Node3DEditorViewport::set_state(const Dictionary &p_state) {
|
|||
if (Object::cast_to<Camera3D>(pv)) {
|
||||
previewing = Object::cast_to<Camera3D>(pv);
|
||||
previewing->connect(SceneStringName(tree_exiting), callable_mp(this, &Node3DEditorViewport::_preview_exited_scene));
|
||||
previewing->connect(CoreStringName(property_list_changed), callable_mp(this, &Node3DEditorViewport::_preview_camera_property_changed));
|
||||
RS::get_singleton()->viewport_attach_camera(viewport->get_viewport_rid(), previewing->get_camera()); //replace
|
||||
surface->queue_redraw();
|
||||
previewing_camera = true;
|
||||
|
|
|
@ -482,6 +482,8 @@ private:
|
|||
bool previewing_cinema = false;
|
||||
bool _is_node_locked(const Node *p_node) const;
|
||||
void _preview_exited_scene();
|
||||
void _preview_camera_property_changed();
|
||||
void _update_centered_labels();
|
||||
void _toggle_camera_preview(bool);
|
||||
void _toggle_cinema_preview(bool);
|
||||
void _init_gizmo_instance(int p_idx);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue