mirror of
https://github.com/FyroxEngine/Fyrox.git
synced 2026-10-12 02:02:20 +00:00
show/hide camera preview image
This commit is contained in:
+23
-12
@@ -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),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -210,6 +210,13 @@ pub fn send_sync_message(ui: &UserInterface, mut msg: UiMessage) {
|
||||
ui.send_message(msg);
|
||||
}
|
||||
|
||||
pub fn send_sync_messages<const N: usize>(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<FxHashMap<usize, TextureResource>> = Default::default();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user