Go to file
Francesca Sunshine 9698d0a8d8
x11: Set window title prior to mapping window (#362)
Fixes #282

Some tiling window managers (i3, dwm, etc.) determine how a window should behave based on
its name. If the name is set after mapping, then window managers will check the name before
we set it, followed by them detecting it as a change when the name is actually set. That
results in the window briefly behaving in an unexpected way, followed by a rapid switch to
the expected behavior.

In accordance to section 4.1.2 of ICCCM, the name, decorations, size hints, and window
deletion redirection have all been moved up to be set before mapping.
2017-12-13 16:41:49 -05:00
.circleci Implement virtual key translation for emscripten (#289) 2017-09-16 15:46:53 +02:00
examples Mouse events (#344) 2017-11-12 21:56:57 +01:00
src x11: Set window title prior to mapping window (#362) 2017-12-13 16:41:49 -05:00
tests Formalize thread-safety guarantees (#322) 2017-10-18 20:40:21 +02:00
.gitattributes Initial commit 2014-07-27 11:41:26 +02:00
.gitignore win32: Bump user32-sys req for MapVirtualKeyA 2015-09-22 14:01:27 -04:00
.gitmodules Add basic support for Android 2014-09-11 18:28:07 +02:00
.travis.yml Use travis matrix for the ios/linux variants (#313) 2017-10-08 15:51:55 +02:00
appveyor.yml Fix the appveyor build 2015-09-24 08:37:52 +02:00
Cargo.toml x11: Implement file drag and drop (#360) 2017-12-13 12:22:03 +01:00
CHANGELOG.md x11: Implement file drag and drop (#360) 2017-12-13 12:22:03 +01:00
LICENSE Initial commit 2014-07-27 11:41:26 +02:00
README.md Emscripten rework (#286) 2017-09-14 16:31:34 +02:00

winit - Cross-platform window creation and management in Rust

Docs.rs

Build Status Build status

[dependencies]
winit = "0.7"

Documentation

Usage

Winit is a window creation and management library. It can create windows and lets you handle events (for example: the window being resized, a key being pressed, a mouse mouvement, etc.) produced by window.

Winit is designed to be a low-level brick in a hierarchy of libraries. Consequently, in order to show something on the window you need to use the platform-specific getters provided by winit, or another library.

extern crate winit;

fn main() {
    let mut events_loop = winit::EventsLoop::new();
    let window = winit::Window::new(&events_loop).unwrap();

    events_loop.run_forever(|event| {
        match event {
            winit::Event::WindowEvent { event: winit::WindowEvent::Closed, .. } => {
                winit::ControlFlow::Break
            },
            _ => winit::ControlFlow::Continue,
        }
    });
}

Platform-specific usage

Emscripten and WebAssembly

Building a binary will yield a .js file. In order to use it in an HTML file, you need to:

  • Put a <canvas id="my_id"></canvas> element somewhere. A canvas corresponds to a winit "window".
  • Write a Javascript code that creates a global variable named Module. Set Module.canvas to the ID of the <canvas> element (in the example this would be "my_id"). More information here.
  • Make sure that you insert the .js file generated by Rust after the Module variable is created.