[][src]Crate imgui_winit_support

This crate provides a winit-based backend platform for imgui-rs.

A backend platform handles window/input device events and manages their state.

Using the library

There are five things you need to do to use this library correctly:

  1. Initialize a WinitPlatform instance
  2. Attach it to a winit Window
  3. Pass events to the platform (every frame)
  4. Call frame preparation callback (every frame)
  5. Call render preparation callback (every frame)

Complete example (without a renderer)

use imgui::Context;
use imgui_winit_support::{HiDpiMode, WinitPlatform};
use std::time::Instant;
use winit::{Event, EventsLoop, Window, WindowEvent};

fn main() {
    let mut events_loop = EventsLoop::new();
    let mut window = Window::new(&events_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;
    while run {
        events_loop.poll_events(|event| {
            platform.handle_event(imgui.io_mut(), &window, &event); // step 3

            // application-specific event handling
            // for example:
            if let Event::WindowEvent { event, .. } = event {
                match event {
                    WindowEvent::CloseRequested => run = false,
                    _ => (),
                }
            }
        });

        platform.prepare_frame(imgui.io_mut(), &window) // step 4
            .expect("Failed to prepare frame");
        last_frame = imgui.io_mut().update_delta_time(last_frame);
        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 = ui.render();
        // renderer.render(..., draw_data).expect("UI rendering failed");

        // application-specific rendering *over the UI*
    }
}

Structs

WinitPlatform

winit backend platform state

Enums

HiDpiMode

DPI factor handling mode.