From 5be5b3eccfd455835e0266b412cda73bb33caf78 Mon Sep 17 00:00:00 2001 From: Wind-Explorer Date: Tue, 6 Jan 2026 14:08:20 +0800 Subject: [PATCH] control scene interactive state from frontend --- src-tauri/src/lib.rs | 3 ++- src-tauri/src/services/scene.rs | 19 +++++++------------ src/routes/scene/+page.svelte | 9 +++++++++ 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 3adff88..7862141 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -14,7 +14,7 @@ use crate::{ }, cursor::start_cursor_tracking, doll_editor::open_doll_editor_window, - scene::open_splash_window, + scene::{open_splash_window, set_scene_interactive}, }, state::{init_app_data, init_app_data_scoped, AppDataRefreshScope, FDOLL}, }; @@ -424,6 +424,7 @@ pub fn run() { save_client_config, open_client_config_manager, open_doll_editor_window, + set_scene_interactive, start_auth_flow, logout_and_restart ]) diff --git a/src-tauri/src/services/scene.rs b/src-tauri/src/services/scene.rs index 394fe0c..ea8fc91 100644 --- a/src-tauri/src/services/scene.rs +++ b/src-tauri/src/services/scene.rs @@ -22,7 +22,7 @@ fn scene_interactive_state() -> Arc { .clone() } -fn update_scene_interactive(interactive: bool) { +pub fn update_scene_interactive(interactive: bool) { let app_handle = get_app_handle(); if let Some(window) = app_handle.get_window(SCENE_WINDOW_LABEL) { @@ -38,6 +38,11 @@ fn update_scene_interactive(interactive: bool) { } } +#[tauri::command] +pub fn set_scene_interactive(interactive: bool) { + update_scene_interactive(interactive); +} + #[cfg(target_os = "macos")] #[link(name = "ApplicationServices", kind = "framework")] extern "C" { @@ -98,17 +103,7 @@ fn start_scene_modifier_listener() { info!("Key down state chanegd!"); let previous = state.swap(interactive, Ordering::SeqCst); if previous != interactive { - if let Some(window) = app_handle.get_window(SCENE_WINDOW_LABEL) { - if let Err(err) = window.set_ignore_cursor_events(!interactive) { - error!("Failed to toggle scene cursor events: {}", err); - } - - if let Err(err) = window.emit("scene-interactive", &interactive) { - error!("Failed to emit scene interactive event: {}", err); - } - } else { - warn!("Scene window not available for interactive update"); - } + update_scene_interactive(interactive); } last_interactive = interactive; } diff --git a/src/routes/scene/+page.svelte b/src/routes/scene/+page.svelte index 62df956..cca04e7 100644 --- a/src/routes/scene/+page.svelte +++ b/src/routes/scene/+page.svelte @@ -7,6 +7,8 @@ import { appData } from "../../events/app-data"; import { sceneInteractive } from "../../events/scene-interactive"; + import { invoke } from "@tauri-apps/api/core"; + import DesktopPet from "./DesktopPet.svelte"; let innerWidth = 0; @@ -32,6 +34,13 @@
+