diff options
| author | pml68 <contact@pml68.me> | 2024-09-22 23:53:02 +0200 |
|---|---|---|
| committer | pml68 <contact@pml68.me> | 2024-09-23 00:00:45 +0200 |
| commit | f5c35e48c480355036778d26aacde498e5c15e68 (patch) | |
| tree | bf949b406bd8f0719f06095bb14bf9872a7493e5 /iced_drop/src/lib.rs | |
| parent | Merge pull request #1 from pml68/feat/codegen (diff) | |
| download | iced-builder-f5c35e48c480355036778d26aacde498e5c15e68.tar.gz | |
feat: restructure project, start drag and drop
Diffstat (limited to '')
| -rw-r--r-- | iced_drop/src/lib.rs | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/iced_drop/src/lib.rs b/iced_drop/src/lib.rs new file mode 100644 index 0000000..fc559dc --- /dev/null +++ b/iced_drop/src/lib.rs @@ -0,0 +1,51 @@ +pub mod widget; + +use iced::{ + advanced::{graphics::futures::MaybeSend, renderer, widget::Id}, + Command, 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<Message, MF>( + msg: MF, + point: Point, + options: Option<Vec<Id>>, + depth: Option<usize>, +) -> Command<Message> +where + Message: 'static, + MF: Fn(Vec<(Id, Rectangle)>) -> Message + MaybeSend + Sync + Clone + 'static, +{ + Command::widget(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>, +) -> Command<Message> +where + Message: 'static, + MF: Fn(Vec<(Id, Rectangle)>) -> Message + MaybeSend + Sync + Clone + 'static, + F: Fn(&Rectangle) -> bool + 'static, +{ + Command::widget(drop::find_zones(filter, options, depth)).map(move |id| msg(id)) +} |
