From 61ee35bcc383f1801608a910469fb37dc643a4ff Mon Sep 17 00:00:00 2001 From: Dmitry Stepanov Date: Wed, 7 May 2025 17:31:30 +0300 Subject: [PATCH] show/hide camera preview image --- editor/src/camera/panel.rs | 35 +++++++++++++++++++++++------------ editor/src/lib.rs | 7 +++++++ 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/editor/src/camera/panel.rs b/editor/src/camera/panel.rs index 6249b7ef7..7355e917b 100644 --- a/editor/src/camera/panel.rs +++ b/editor/src/camera/panel.rs @@ -37,8 +37,10 @@ use crate::{ scene::{camera::Camera, node::Node}, }, scene::{GameScene, Selection}, - send_sync_message, Message, + send_sync_message, send_sync_messages, Message, }; +use fyrox::core::algebra::Vector2; +use fyrox::gui::widget::WidgetMessage; use fyrox::scene::collider::BitMask; pub struct CameraPreviewControlPanel { @@ -55,9 +57,8 @@ impl CameraPreviewControlPanel { let preview_frame; let window = WindowBuilder::new( WidgetBuilder::new() - .with_width(200.0) - .with_height(250.0) - .with_name("CameraPanel"), + .with_name("CameraPanel") + .with_min_size(Vector2::new(180.0, 45.0)), ) .with_title(WindowTitle::text("Camera Preview")) .with_content( @@ -182,6 +183,15 @@ impl CameraPreviewControlPanel { game_scene.preview_camera = node_handle; + send_sync_message( + engine.user_interfaces.first(), + WidgetMessage::visibility( + self.preview_frame, + MessageDirection::ToWidget, + true, + ), + ); + self.camera_state = Some((node_handle, scene.graph[node_handle].clone_box())); break; } @@ -201,14 +211,15 @@ impl CameraPreviewControlPanel { game_scene.preview_camera = Handle::NONE; - send_sync_message( - engine.user_interfaces.first(), - ImageMessage::texture(self.preview_frame, MessageDirection::ToWidget, None), - ); - - send_sync_message( - engine.user_interfaces.first(), - CheckBoxMessage::checked(self.preview, MessageDirection::ToWidget, Some(false)), + let ui = engine.user_interfaces.first(); + send_sync_messages( + ui, + [ + // Don't keep the render target alive after the preview mode is off. + ImageMessage::texture(self.preview_frame, MessageDirection::ToWidget, None), + CheckBoxMessage::checked(self.preview, MessageDirection::ToWidget, Some(false)), + WidgetMessage::visibility(self.preview_frame, MessageDirection::ToWidget, false), + ], ); } diff --git a/editor/src/lib.rs b/editor/src/lib.rs index d28789439..2d096d864 100644 --- a/editor/src/lib.rs +++ b/editor/src/lib.rs @@ -210,6 +210,13 @@ pub fn send_sync_message(ui: &UserInterface, mut msg: UiMessage) { ui.send_message(msg); } +pub fn send_sync_messages(ui: &UserInterface, mut messages: [UiMessage; N]) { + for message in &mut messages { + message.flags = MSG_SYNC_FLAG; + } + ui.send_messages(messages); +} + lazy_static! { static ref EDITOR_TEXTURE_CACHE: Mutex> = Default::default(); }