4 个版本 (破坏性更新)
0.4.0 | 2024 年 1 月 31 日 |
---|---|
0.3.0 | 2023 年 12 月 18 日 |
0.2.0 | 2023 年 12 月 7 日 |
0.1.0 | 2023 年 11 月 10 日 |
#596 在 GUI
每月 262 次下载
用于 2 crates
43KB
854 行
在 macOS、Windows 和 Linux(通过 GTK)上启动窗口外的拖动操作。
已针对 tao(最新版),winit(最新版),wry(v0.24)和 tauri(v1)窗口进行测试。
由于基于 GTK 的实现,winit 目前还不能在 Linux 上利用此 crate。
- 添加
drag
依赖项
$cargo add drag
-
使用
drag::start_drag
函数。它需要一个&T: raw_window_handle::HasRawWindowHandle
类型在 macOS 和 Windows 上,以及在 Linux 上的>k::ApplicationWindow
-
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 = wry::application::event_loop::EventLoop::new(); let window = wry::application::window::WindowBuilder::new().build(&event_loop).unwrap(); let webview = wry::webview::WebViewBuilder::new(window).unwrap().build().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 wry::application::platform::unix::WindowExtUnix; webview.window().gtk_window() }, #[cfg(not(target_os = "linux"))] &webview.window(), item, preview_icon, |result, cursor_position| { println!("drag result: {result:?}"); }, drag::Options::default(), );
- winit
let event_loop = winit::event_loop::EventLoop::new().unwrap(); let window = winit::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()); let _ = drag::start_drag(&window, item, preview_icon, |result, cursor_position| { println!("drag result: {result:?}"); }, Default::default());
依赖项
~0.4–40MB
~618K SLoC