5 releases (1 stable)
2.0.0 | Oct 22, 2024 |
---|---|
0.4.0 | Jan 31, 2024 |
0.3.0 | Dec 18, 2023 |
0.2.0 | Dec 7, 2023 |
0.1.0 | Nov 10, 2023 |
#331 in GUI
348 downloads per month
Used in 2 crates
43KB
861 lines
Start a drag operation out of a window on macOS, Windows and Linux (via GTK).
Tested for tao (latest), winit (latest), wry (v0.24) and tauri (v1) windows.
Due to the GTK-based implementation, winit currently cannot leverage this crate on Linux yet.
- Add the
drag
dependency:
$ cargo add drag
-
Use the
drag::start_drag
function. It takes a&T: raw_window_handle::HasWindowHandle
type on macOS and Windows, and a>k::ApplicationWindow
on Linux: -
tao:
let event_loop = tao::event_loop::EventLoop::new(); let window = tao::window::WindowBuilder::new().build(&event_loop).unwrap(); let item = drag::DragItem::Files(vec![std::fs::canonicalize("./examples/icon.png").unwrap()]); let preview_icon = drag::Image::File("./examples/icon.png".into()); drag::start_drag( #[cfg(target_os = "linux")] { use tao::platform::unix::WindowExtUnix; window.gtk_window() }, #[cfg(not(target_os = "linux"))] &window, item, preview_icon, |result, cursor_position| { println!("drag result: {result:?}"); }, drag::Options::default(), );
- wry:
let event_loop = tao::event_loop::EventLoop::new(); let window = tao::window::WindowBuilder::new().build(&event_loop).unwrap(); let webview = wry::WebViewBuilder::new().build(&window).unwrap(); let item = drag::DragItem::Files(vec![std::fs::canonicalize("./examples/icon.png").unwrap()]); let preview_icon = drag::Image::File("./examples/icon.png".into()); drag::start_drag( #[cfg(target_os = "linux")] { use tao::platform::unix::WindowExtUnix; window.gtk_window() }, #[cfg(not(target_os = "linux"))] &window, item, preview_icon, |result, cursor_position| { println!("drag result: {result:?}"); }, drag::Options::default(), );
- winit:
let window = ...winit window; let item = drag::DragItem::Files(vec![std::fs::canonicalize("./examples/icon.png").unwrap()]); let preview_icon = drag::Image::File("./examples/icon.png".into()); let _ = drag::start_drag(&window, item, preview_icon, |result, cursor_position| { println!("drag result: {result:?}"); }, Default::default());
Dependencies
~0.3–39MB
~618K SLoC