summaryrefslogtreecommitdiff
path: root/crates/iced_drop/src/widget/operation/drop.rs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--crates/iced_drop/src/widget/operation/drop.rs88
1 files changed, 0 insertions, 88 deletions
diff --git a/crates/iced_drop/src/widget/operation/drop.rs b/crates/iced_drop/src/widget/operation/drop.rs
deleted file mode 100644
index ead412c..0000000
--- a/crates/iced_drop/src/widget/operation/drop.rs
+++ /dev/null
@@ -1,88 +0,0 @@
-use iced::advanced::widget::operation::{Outcome, Scrollable};
-use iced::advanced::widget::{Id, Operation};
-use iced::{Rectangle, Vector};
-
-/// Produces an [`Operation`] that will find the drop zones that pass a filter on the zone's bounds.
-/// For any drop zone to be considered, the Element must have some Id.
-/// If `options` is `None`, all drop zones will be considered.
-/// Depth determines how how deep into nested drop zones to go.
-/// If 'depth' is `None`, nested dropzones will be fully explored
-pub fn find_zones<F>(
- filter: F,
- options: Option<Vec<Id>>,
- depth: Option<usize>,
-) -> impl Operation<Vec<(Id, Rectangle)>>
-where
- F: Fn(&Rectangle) -> bool + Send + 'static,
-{
- struct FindDropZone<F> {
- filter: F,
- options: Option<Vec<Id>>,
- zones: Vec<(Id, Rectangle)>,
- max_depth: Option<usize>,
- c_depth: usize,
- offset: Vector,
- }
-
- impl<F> Operation<Vec<(Id, Rectangle)>> for FindDropZone<F>
- where
- F: Fn(&Rectangle) -> bool + Send + 'static,
- {
- fn container(
- &mut self,
- id: Option<&Id>,
- bounds: iced::Rectangle,
- operate_on_children: &mut dyn FnMut(
- &mut dyn Operation<Vec<(Id, Rectangle)>>,
- ),
- ) {
- match id {
- Some(id) => {
- let is_option = match &self.options {
- Some(options) => options.contains(id),
- None => true,
- };
- let bounds = bounds - self.offset;
- if is_option && (self.filter)(&bounds) {
- self.c_depth += 1;
- self.zones.push((id.clone(), bounds));
- }
- }
- None => (),
- }
- let goto_next = match &self.max_depth {
- Some(m_depth) => self.c_depth < *m_depth,
- None => true,
- };
- if goto_next {
- operate_on_children(self);
- }
- }
-
- fn finish(&self) -> Outcome<Vec<(Id, Rectangle)>> {
- Outcome::Some(self.zones.clone())
- }
-
- fn scrollable(
- &mut self,
- _id: Option<&Id>,
- bounds: Rectangle,
- _content_bounds: Rectangle,
- translation: Vector,
- _state: &mut dyn Scrollable,
- ) {
- if (self.filter)(&bounds) {
- self.offset = self.offset + translation;
- }
- }
- }
-
- FindDropZone {
- filter,
- options,
- zones: vec![],
- max_depth: depth,
- c_depth: 0,
- offset: Vector { x: 0.0, y: 0.0 },
- }
-}