summaryrefslogtreecommitdiff
path: root/iced_drop/src/lib.rs
diff options
context:
space:
mode:
authorpml68 <contact@pml68.dev>2025-02-21 20:59:23 +0100
committerpml68 <contact@pml68.dev>2025-02-21 20:59:23 +0100
commitadc18808bc8ae73bf6a9056df9e1c8760a0a827d (patch)
treec81a88bf256ea7205c02e7bc57843375eb2ed079 /iced_drop/src/lib.rs
parentfeat!: add name to `Theme`, `is_dark` -> `dark` (diff)
downloadiced-builder-adc18808bc8ae73bf6a9056df9e1c8760a0a827d.tar.gz
feat: update to `iced` 0.14-dev
Diffstat (limited to '')
-rw-r--r--iced_drop/src/lib.rs53
1 files changed, 53 insertions, 0 deletions
diff --git a/iced_drop/src/lib.rs b/iced_drop/src/lib.rs
new file mode 100644
index 0000000..9906cbe
--- /dev/null
+++ b/iced_drop/src/lib.rs
@@ -0,0 +1,53 @@
+pub mod widget;
+
+use iced::{
+ advanced::widget::{operate, Id},
+ advanced::{graphics::futures::MaybeSend, renderer},
+ task::Task,
+ Element, Point, Rectangle,
+};
+
+use widget::droppable::*;
+use widget::operation::drop;
+
+pub fn droppable<'a, Message, Theme, Renderer>(
+ content: impl Into<Element<'a, Message, Theme, Renderer>>,
+) -> Droppable<'a, Message, Theme, Renderer>
+where
+ Message: Clone,
+ Renderer: renderer::Renderer,
+{
+ Droppable::new(content)
+}
+
+pub fn zones_on_point<T, MF>(
+ msg: MF,
+ point: Point,
+ options: Option<Vec<Id>>,
+ depth: Option<usize>,
+) -> Task<T>
+where
+ T: Send + 'static,
+ MF: Fn(Vec<(Id, Rectangle)>) -> T + MaybeSend + Sync + Clone + 'static,
+{
+ operate(drop::find_zones(
+ move |bounds| bounds.contains(point),
+ options,
+ depth,
+ ))
+ .map(move |id| msg(id))
+}
+
+pub fn find_zones<Message, MF, F>(
+ msg: MF,
+ filter: F,
+ options: Option<Vec<Id>>,
+ depth: Option<usize>,
+) -> Task<Message>
+where
+ Message: Send + 'static,
+ MF: Fn(Vec<(Id, Rectangle)>) -> Message + MaybeSend + Sync + Clone + 'static,
+ F: Fn(&Rectangle) -> bool + Send + 'static,
+{
+ operate(drop::find_zones(filter, options, depth)).map(move |id| msg(id))
+}