diff --git a/src/rendering/slint_platform.rs b/src/rendering/slint_platform.rs index 1a46099..5607a2f 100644 --- a/src/rendering/slint_platform.rs +++ b/src/rendering/slint_platform.rs @@ -2,22 +2,27 @@ use slint::{ platform::{Platform, WindowAdapter}, PlatformError, }; -use std::rc::Rc; +use std::rc::{Rc, Weak}; use super::femtovg_window::FemtoVGWindow; pub struct CustomSlintPlatform { - window: Rc, + window: Weak, } impl CustomSlintPlatform { - pub const fn new(window: Rc) -> Self { - Self { window } + pub fn new(window: &Rc) -> Self { + Self { + window: Rc::downgrade(window), + } } } impl Platform for CustomSlintPlatform { fn create_window_adapter(&self) -> Result, PlatformError> { - Result::Ok(Rc::clone(&self.window) as Rc) + self.window + .upgrade() + .ok_or(PlatformError::NoPlatform) + .map(|w| w as Rc) } } diff --git a/src/windowing/state/builder.rs b/src/windowing/state/builder.rs index 3519c99..a6c25a1 100644 --- a/src/windowing/state/builder.rs +++ b/src/windowing/state/builder.rs @@ -110,11 +110,11 @@ impl WindowStateBuilder { } pub fn build(self) -> Result { - let platform = CustomSlintPlatform::new(Rc::clone( + let platform = CustomSlintPlatform::new( self.window .as_ref() .ok_or_else(|| LayerShikaError::InvalidInput("Window is required".into()))?, - )); + ); set_platform(Box::new(platform)).map_err(|e| { LayerShikaError::PlatformSetup(format!("Failed to set platform: {e:?}")) })?;