#egui #window #applications #user #multi #structs #traits

egui-multiwin

一个允许使用egui进行多窗口的crate

22个版本 (4个重大更新)

0.5.2 2024年5月20日
0.5.0 2024年4月30日
0.3.1 2023年11月2日
0.1.7 2023年7月10日
0.1.1 2022年9月1日

#524 in 数据结构

Download history 93/week @ 2024-04-19 185/week @ 2024-04-26 120/week @ 2024-05-03 12/week @ 2024-05-10 134/week @ 2024-05-17 16/week @ 2024-05-24 4/week @ 2024-05-31 4/week @ 2024-06-07 6/week @ 2024-06-28 38/week @ 2024-07-05 107/week @ 2024-07-26 15/week @ 2024-08-02

每月125次下载
用于 bjj_scoreboard

MIT/Apache

135KB
1K SLoC

这是egui-multiwin crate。

Rust Windows Rust MacOS Rust Linux

这个crate基于vivlim(https://github.com/vivlim)的工作和位于https://github.com/vivlim/egui-glow-multiwin的仓库。Vivlim的示例仓库结合了https://github.com/shivshank/mini_gl_fb/blob/master/examples/multi_window.rs和egui来形成一个很好的包。这个crate通过为用户定义一些trait以在自定义struct上实现,进行了一些修改,使其可以作为外部crate使用。

有一个示例展示了如何在项目中使用这个crate。它命名为multiwin-demo,位于examples文件夹中。

通常,您将创建一个结构体用于所有窗口共有的数据,并在其上实现egui_multiwin::multi_window::CommonEventHandler trait。T是您结构体的名称,而U是您想要作为非窗口特定事件传递的消息的名称。

pub struct AppCommon {
    clicks: u32,
}
impl egui_multiwin::multi_window::CommonEventHandler<AppCommon, u32> for AppCommon {
    fn process_event(&mut self, event: u32) -> Vec<egui_multiwin::multi_window::NewWindowRequest<AppCommon>> {
        let mut windows_to_create = vec![];
        println!("Received an event {}", event);
        match event {
            42 => windows_to_create.push(windows::popup_window::PopupWindow::new("event popup".to_string())),
            _ => {}
        }
        windows_to_create
    }
}

检查github issues以查看wayland(Linux)是否仍然存在与剪贴板的问题。该问题应提供解决程序,以解决在程序中关闭窗口后发生的段错误。

在主事件中,创建事件循环,创建事件循环代理(如有需要)。事件循环代理可以被克隆并发送到其他线程,允许自定义逻辑发送可以创建窗口并按需修改应用程序的公共状态的事件。创建多窗口实例,然后创建窗口请求以创建初始窗口,并将它们添加到多窗口中,使用add函数。创建您的公共数据结构实例,最后调用多窗口实例的run。

依赖项

~10–28MB
~417K SLoC