From 6cdb4c62ced3e13b0ef9f6894d004e6cbf1a3c27 Mon Sep 17 00:00:00 2001 From: Ashley Wulber Date: Thu, 2 Jul 2026 12:38:03 -0400 Subject: [PATCH] refactor(rectange tracker): relax Copy to Clone --- src/widget/rectangle_tracker/mod.rs | 8 +++---- src/widget/rectangle_tracker/subscription.rs | 24 +++++++++++--------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/widget/rectangle_tracker/mod.rs b/src/widget/rectangle_tracker/mod.rs index 839fa9a7..1fb89ac3 100644 --- a/src/widget/rectangle_tracker/mod.rs +++ b/src/widget/rectangle_tracker/mod.rs @@ -22,15 +22,15 @@ pub fn rectangle_tracking_container<'a, Message, I, T>( tx: UnboundedSender<(I, Rectangle)>, ) -> RectangleTrackingContainer<'a, Message, crate::Renderer, I> where - I: Hash + Copy + Send + Sync + Debug + 'a, + I: Hash + Clone + Send + Sync + Debug + 'a, T: Into>, { RectangleTrackingContainer::new(content, id, tx) } pub fn subscription< - I: 'static + Hash + Copy + Send + Sync + Debug, - R: 'static + Hash + Copy + Send + Sync + Debug + Eq, + I: 'static + Hash + Clone + Send + Sync + Debug, + R: 'static + Hash + Clone + Send + Sync + Debug + Eq, >( id: I, ) -> iced::Subscription<(I, RectangleUpdate)> { @@ -76,7 +76,7 @@ where impl<'a, Message, Renderer, I> RectangleTrackingContainer<'a, Message, Renderer, I> where Renderer: iced_core::Renderer, - I: 'a + Hash + Copy + Send + Sync + Debug, + I: 'a + Hash + Clone + Send + Sync + Debug, { /// Creates an empty [`Container`]. pub(crate) fn new(content: T, id: I, tx: UnboundedSender<(I, Rectangle)>) -> Self diff --git a/src/widget/rectangle_tracker/subscription.rs b/src/widget/rectangle_tracker/subscription.rs index 22b42441..98082547 100644 --- a/src/widget/rectangle_tracker/subscription.rs +++ b/src/widget/rectangle_tracker/subscription.rs @@ -10,14 +10,16 @@ use super::RectangleTracker; #[cold] pub fn rectangle_tracker_subscription< - I: 'static + Hash + Copy + Send + Sync + Debug, - R: 'static + Hash + Copy + Send + Sync + Debug + Eq, + I: 'static + Hash + Clone + Send + Sync + Debug, + R: 'static + Hash + Clone + Send + Sync + Debug + Eq, >( id: I, ) -> Subscription<(I, RectangleUpdate)> { Subscription::run_with(id, |id| { - let id = *id; - stream::unfold(State::Ready, move |state| start_listening(id, state)) + let id = id.clone(); + stream::unfold(State::Ready, move |state| { + start_listening(id.clone(), state) + }) }) } @@ -27,7 +29,7 @@ pub enum State { Finished, } -async fn start_listening( +async fn start_listening( id: I, mut state: State, ) -> Option<((I, RectangleUpdate), State)> { @@ -37,7 +39,7 @@ async fn start_listening 0.1 || (prev.y - new.y).abs() > 0.1 { - map.insert(u.0, new); + map.insert(u.0.clone(), new); ( - Some((id, RectangleUpdate::Rectangle(u))), + Some((id.clone(), RectangleUpdate::Rectangle(u))), State::Waiting(rx, map), ) } else { (None, State::Waiting(rx, map)) } } else { - map.insert(u.0, u.1); + map.insert(u.0.clone(), u.1); ( - Some((id, RectangleUpdate::Rectangle(u))), + Some((id.clone(), RectangleUpdate::Rectangle(u))), State::Waiting(rx, map), ) } @@ -80,7 +82,7 @@ async fn start_listening where - I: 'static + Hash + Copy + Send + Sync + Debug, + I: 'static + Hash + Clone + Send + Sync + Debug, { Rectangle((I, Rectangle)), Init(RectangleTracker),