diff --git a/iced b/iced index 34973a56..9ce8c6be 160000 --- a/iced +++ b/iced @@ -1 +1 @@ -Subproject commit 34973a56d512d11c1c3c343e2cb5c4c979d15e9c +Subproject commit 9ce8c6becc655be8448bbf069421ae2ddab1a18c diff --git a/src/widget/context_drawer/widget.rs b/src/widget/context_drawer/widget.rs index 0674a616..7aba4b69 100644 --- a/src/widget/context_drawer/widget.rs +++ b/src/widget/context_drawer/widget.rs @@ -247,11 +247,15 @@ impl<'a, Message: Clone> Widget for ContextDraw &self, state: &Tree, layout: Layout<'_>, + renderer: &Renderer, dnd_rectangles: &mut iced_core::clipboard::DndDestinationRectangles, ) { - self.content - .as_widget() - .drag_destinations(&state.children[0], layout, dnd_rectangles); + self.content.as_widget().drag_destinations( + &state.children[0], + layout, + renderer, + dnd_rectangles, + ); } fn id(&self) -> Option { diff --git a/src/widget/dnd_destination.rs b/src/widget/dnd_destination.rs index 0aca0d79..5cb32711 100644 --- a/src/widget/dnd_destination.rs +++ b/src/widget/dnd_destination.rs @@ -506,6 +506,7 @@ impl<'a, Message: 'static> Widget &self, state: &Tree, layout: layout::Layout<'_>, + renderer: &crate::Renderer, dnd_rectangles: &mut iced_core::clipboard::DndDestinationRectangles, ) { let bounds = layout.bounds(); @@ -524,9 +525,12 @@ impl<'a, Message: 'static> Widget }; dnd_rectangles.push(my_dest); - self.container - .as_widget() - .drag_destinations(&state.children[0], layout, dnd_rectangles); + self.container.as_widget().drag_destinations( + &state.children[0], + layout, + renderer, + dnd_rectangles, + ); } fn id(&self) -> Option { diff --git a/src/widget/dnd_source.rs b/src/widget/dnd_source.rs index 5a378209..03de37e2 100644 --- a/src/widget/dnd_source.rs +++ b/src/widget/dnd_source.rs @@ -1,3 +1,5 @@ +use std::any::Any; + use crate::{ iced::{ clipboard::dnd::{DndAction, DndEvent, SourceEvent}, @@ -167,9 +169,12 @@ impl< iced_core::widget::OperationOutputWrapper, >, ) { - self.container - .as_widget() - .operate(&mut tree.children[0], layout, renderer, operation); + operation.custom((&mut tree.state) as &mut dyn Any, Some(&self.id)); + operation.container(Some(&self.id), layout.bounds(), &mut |operation| { + self.container + .as_widget() + .operate(&mut tree.children[0], layout, renderer, operation) + }); } fn on_event( @@ -205,6 +210,7 @@ impl< } state.left_pressed_position = Some(position); + // dbg!(&state, &self.id); return event::Status::Captured; } } @@ -223,6 +229,7 @@ impl< return ret; } if let Some(left_pressed_position) = state.left_pressed_position { + // dbg!(&state); if position.distance(left_pressed_position) > self.drag_threshold { self.start_dnd(clipboard, state.cached_bounds); state.is_dragging = true; @@ -311,11 +318,15 @@ impl< &self, state: &Tree, layout: layout::Layout<'_>, + renderer: &crate::Renderer, dnd_rectangles: &mut iced_style::core::clipboard::DndDestinationRectangles, ) { - self.container - .as_widget() - .drag_destinations(&state.children[0], layout, dnd_rectangles); + self.container.as_widget().drag_destinations( + &state.children[0], + layout, + renderer, + dnd_rectangles, + ); } fn id(&self) -> Option { @@ -340,7 +351,7 @@ impl< } /// Local state of the [`MouseListener`]. -#[derive(Default)] +#[derive(Debug, Default)] struct State { hovered: bool, left_pressed_position: Option, diff --git a/src/widget/flex_row/widget.rs b/src/widget/flex_row/widget.rs index b89397f0..9f19ca1c 100644 --- a/src/widget/flex_row/widget.rs +++ b/src/widget/flex_row/widget.rs @@ -251,6 +251,7 @@ impl<'a, Message: 'static + Clone> Widget &self, state: &Tree, layout: Layout<'_>, + renderer: &Renderer, dnd_rectangles: &mut iced_style::core::clipboard::DndDestinationRectangles, ) { for ((e, layout), state) in self @@ -260,7 +261,7 @@ impl<'a, Message: 'static + Clone> Widget .zip(state.children.iter()) { e.as_widget() - .drag_destinations(state, layout, dnd_rectangles); + .drag_destinations(state, layout, renderer, dnd_rectangles); } } } diff --git a/src/widget/grid/widget.rs b/src/widget/grid/widget.rs index 7ba1cfcc..a043f19d 100644 --- a/src/widget/grid/widget.rs +++ b/src/widget/grid/widget.rs @@ -273,6 +273,7 @@ impl<'a, Message: 'static + Clone> Widget for G &self, state: &Tree, layout: Layout<'_>, + renderer: &Renderer, dnd_rectangles: &mut iced_style::core::clipboard::DndDestinationRectangles, ) { for ((e, layout), state) in self @@ -282,7 +283,7 @@ impl<'a, Message: 'static + Clone> Widget for G .zip(state.children.iter()) { e.as_widget() - .drag_destinations(state, layout, dnd_rectangles); + .drag_destinations(state, layout, renderer, dnd_rectangles); } } } diff --git a/src/widget/header_bar.rs b/src/widget/header_bar.rs index 2fd0279a..62d3ea1b 100644 --- a/src/widget/header_bar.rs +++ b/src/widget/header_bar.rs @@ -243,6 +243,7 @@ impl<'a, Message: Clone + 'static> Widget, + renderer: &crate::Renderer, dnd_rectangles: &mut iced_style::core::clipboard::DndDestinationRectangles, ) { if let Some((child_tree, child_layout)) = @@ -251,6 +252,7 @@ impl<'a, Message: Clone + 'static> Widget, >, ) { - self.content.as_widget().operate( - &mut tree.children[0], - layout.children().next().unwrap(), - renderer, - operation, - ); + operation.container(Some(&self.id), layout.bounds(), &mut |operation| { + self.content.as_widget().operate( + &mut tree.children[0], + layout.children().next().unwrap(), + renderer, + operation, + ); + }); } fn on_event( @@ -175,12 +177,14 @@ where &self, state: &Tree, layout: Layout<'_>, + renderer: &Renderer, dnd_rectangles: &mut iced_style::core::clipboard::DndDestinationRectangles, ) { let content_layout = layout.children().next().unwrap(); self.content.as_widget().drag_destinations( &state.children[0], content_layout, + renderer, dnd_rectangles, ); } diff --git a/src/widget/layer_container.rs b/src/widget/layer_container.rs index eb7ea531..7033e342 100644 --- a/src/widget/layer_container.rs +++ b/src/widget/layer_container.rs @@ -256,10 +256,11 @@ where &self, state: &Tree, layout: Layout<'_>, + renderer: &Renderer, dnd_rectangles: &mut iced_style::core::clipboard::DndDestinationRectangles, ) { self.container - .drag_destinations(state, layout, dnd_rectangles); + .drag_destinations(state, layout, renderer, dnd_rectangles); } fn id(&self) -> Option { diff --git a/src/widget/popover.rs b/src/widget/popover.rs index 1d9055ad..82a7c8ed 100644 --- a/src/widget/popover.rs +++ b/src/widget/popover.rs @@ -247,11 +247,15 @@ where &self, tree: &Tree, layout: Layout<'_>, + renderer: &Renderer, dnd_rectangles: &mut iced_core::clipboard::DndDestinationRectangles, ) { - self.content - .as_widget() - .drag_destinations(&tree.children[0], layout, dnd_rectangles); + self.content.as_widget().drag_destinations( + &tree.children[0], + layout, + renderer, + dnd_rectangles, + ); } } diff --git a/src/widget/rectangle_tracker/mod.rs b/src/widget/rectangle_tracker/mod.rs index 7cc08e00..93b861a3 100644 --- a/src/widget/rectangle_tracker/mod.rs +++ b/src/widget/rectangle_tracker/mod.rs @@ -296,10 +296,11 @@ where &self, state: &Tree, layout: Layout<'_>, + renderer: &Renderer, dnd_rectangles: &mut iced_style::core::clipboard::DndDestinationRectangles, ) { self.container - .drag_destinations(state, layout, dnd_rectangles); + .drag_destinations(state, layout, renderer, dnd_rectangles); } } diff --git a/src/widget/segmented_button/widget.rs b/src/widget/segmented_button/widget.rs index 73f7b365..2a6c1335 100644 --- a/src/widget/segmented_button/widget.rs +++ b/src/widget/segmented_button/widget.rs @@ -1529,6 +1529,7 @@ where &self, _state: &Tree, layout: Layout<'_>, + _renderer: &Renderer, dnd_rectangles: &mut iced_core::clipboard::DndDestinationRectangles, ) { let bounds = layout.bounds();