21 个版本 (12 个重大更新)

0.12.0 2024年5月5日
0.11.0 2023年4月5日
0.10.0 2023年1月16日
0.9.0 2022年11月30日
0.0.22 2019年2月5日

GUI 中排名第 890

Download history 973/week @ 2024-05-04 747/week @ 2024-05-11 838/week @ 2024-05-18 685/week @ 2024-05-25 825/week @ 2024-06-01 510/week @ 2024-06-08 768/week @ 2024-06-15 792/week @ 2024-06-22 263/week @ 2024-06-29 297/week @ 2024-07-06 570/week @ 2024-07-13 694/week @ 2024-07-20 717/week @ 2024-07-27 595/week @ 2024-08-03 875/week @ 2024-08-10 383/week @ 2024-08-17

每月下载量 2,653
31 个 Crates 中使用(28 个直接使用)

MIT/Apache 许可协议

680KB
13K SLoC

此 crate 为 imgui-rs 提供 winit 基础后端平台。

后端平台处理窗口/输入设备事件并管理其状态。

使用库

要正确使用此库,您需要做五件事情

  1. 初始化一个 WinitPlatform 实例
  2. 将其附加到 winit Window
  3. 将事件传递到平台(每帧一次)
  4. 调用帧准备回调(每帧一次)
  5. 调用渲染准备回调(每帧一次)

完整示例(无渲染器)

use imgui::Context;
use imgui_winit_support::{HiDpiMode, WinitPlatform};
use std::time::Instant;
use winit::event::{Event, WindowEvent};
use winit::event_loop::{ControlFlow, EventLoop};
use winit::window::Window;

let mut event_loop = EventLoop::new().expect("Failed to create EventLoop");
let mut window = Window::new(&event_loop).unwrap();

let mut imgui = Context::create();
// configure imgui-rs Context if necessary

let mut platform = WinitPlatform::init(&mut imgui); // step 1
platform.attach_window(imgui.io_mut(), &window, HiDpiMode::Default); // step 2

let mut last_frame = Instant::now();
let mut run = true;
event_loop.run(move |event, window_target| {
    match event {
        Event::NewEvents(_) => {
            // other application-specific logic
            let now = Instant::now();
            imgui.io_mut().update_delta_time(now - last_frame);
            last_frame = now;
        },
        Event::AboutToWait => {
            // other application-specific logic
            platform.prepare_frame(imgui.io_mut(), &window) // step 4
                .expect("Failed to prepare frame");
            window.request_redraw();
        }
        Event::WindowEvent { event: WindowEvent::RedrawRequested, .. } => {
            let ui = imgui.frame();
            // application-specific rendering *under the UI*

            // construct the UI

            platform.prepare_render(&ui, &window); // step 5
            // render the UI with a renderer
            let draw_data = imgui.render();
            // renderer.render(..., draw_data).expect("UI rendering failed");

            // application-specific rendering *over the UI*
        },
        Event::WindowEvent { event: WindowEvent::CloseRequested, .. } => {
            window_target.exit();
        }
        // other application-specific event handling
        event => {
            platform.handle_event(imgui.io_mut(), &window, &event); // step 3
            // other application-specific event handling
        }
    }
}).expect("EventLoop error");

依赖项

~14–27MB
~442K SLoC