diff --git a/editor/scene/3d/node_3d_editor_plugin.cpp b/editor/scene/3d/node_3d_editor_plugin.cpp index c77b0d8aabc..c07897bd692 100644 --- a/editor/scene/3d/node_3d_editor_plugin.cpp +++ b/editor/scene/3d/node_3d_editor_plugin.cpp @@ -2986,6 +2986,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; @@ -3092,9 +3093,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(); } @@ -3273,13 +3276,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); @@ -3363,6 +3359,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(); @@ -3823,6 +3821,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 { @@ -4003,6 +4005,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); @@ -4096,6 +4112,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) { @@ -4106,6 +4123,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(); } @@ -4118,6 +4136,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; @@ -4369,6 +4388,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))) { @@ -4379,6 +4404,7 @@ void Node3DEditorViewport::set_state(const Dictionary &p_state) { if (Object::cast_to(pv)) { previewing = Object::cast_to(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; diff --git a/editor/scene/3d/node_3d_editor_plugin.h b/editor/scene/3d/node_3d_editor_plugin.h index d71a4c11d21..7998fda0c92 100644 --- a/editor/scene/3d/node_3d_editor_plugin.h +++ b/editor/scene/3d/node_3d_editor_plugin.h @@ -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);