d6271e513d
* x11-rs : don't build libminifb_native.a * x11-rs : commented out all calls to the mfb_xxx functions. * x11-rs : added handle field to Window, type is xlib::Window. Also implemented the get_window_handle() method. * x11-rs : created a DisplayInfo struct with a setup() method. * x11-rs : fleshed out DisplayInfo::setup() method some more. * x11-rs : updated Cargo.toml to require x11_dl "2.16". That is because we need the XContext type, which seems to be unavailable in the 2.14 version. * x11-rs : code to call the XCreateWindow() function. * x11-rs : call XMapRaise() and XFlush() on our window. * x11-rs : more work on Window::new() -- ported more stuff from mfb_open(). * x11-rs : create the 'ximage' field in Window::new(). * x11-rs : removed SharedData struct, moved fields into Window. * x11-rs : ported the set_window_title() method. * x11-rs : ported creating a "draw_buffer" and the 1:1 scaling code. * x11-rs : ported the scale_2x() function. * x11-rs : ported the scale_4x() function. * x11-rs : ported the set_position() method. * x11-rs : ported the mfb_close() code, i.e. Drop trait on a Window. * x11-rs : tidied up code computing "scale" value for a new window. * x11-rs : implemented Drop trait for DisplayInfo. * x11-rs : updated the get_scroll_wheel() method. * x11-rs : tidy up update_with_buffer() and check buffer size. * x11-rs : ported the check_formats() code. * x11-rs : ported the init_cursors() code. * x11-rs : ported the set_cursor_style() code. * x11-rs : ported the raw_get_mouse_pos() code. * x11-rs : moved the code implementing Drop trait for Window. * x11-rs : ported the basic event loop (i.e. raw_process_events). * x11-rs : ported code handling the WM_DELETE_WINDOW client message. * x11-rs : added code file "src/os/unix/key_mapping.rs" This file contains code to map an X keysym to a Unicode char, which is done via a binary search on a large table. I ported the code to Rust and rewrote the binary search as a recursive function. * x11-rs : ported the XkbQueryExtension() code. * x11-rs : fleshed out the process_key() code. * x11-rs : added test code for keysym_to_unicode(), fixed a table entry. * x11-rs : another test value for the key_mapping test code. * x11-rs : ported the update_key_state() code. * x11-rs : ported the char_callback() code. * x11-rs : ported the mouse button handling code. * x11-rs : ported code handling the XConfigureNotify event. * x11-rs : code tidying, silence most compiler warnings. * x11-rs : removed the native C code: X11MiniFB.c * x11-rs : fixed bug in the button handling code. * x11-rs : made the scale_2x() and scale_4x() code faster. * merge error * whitespace * fix cursors: bad string handling * upgrade x11-dl * merge scaling implementations * multi-window example |
||
---|---|---|
examples | ||
src | ||
.gitignore | ||
.travis.yml | ||
appveyor.yml | ||
build.rs | ||
Cargo.toml | ||
CHANGELOG.md | ||
LICENSE | ||
LICENSE-APACHE | ||
LICENSE-MIT | ||
README.md |
minifb is a cross platform library written in Rust and that makes it easy to setup a window and to (optional) display a 32-bit pixel buffer. It also makes it easy to get input from keyboard and mouse. An example is the best way to show how it works:
Usage
# Cargo.toml
[dependencies]
minifb = "0.11.2"
Example
extern crate minifb;
use minifb::{Key, WindowOptions, Window};
const WIDTH: usize = 640;
const HEIGHT: usize = 360;
fn main() {
let mut buffer: Vec<u32> = vec![0; WIDTH * HEIGHT];
let mut window = Window::new("Test - ESC to exit",
WIDTH,
HEIGHT,
WindowOptions::default()).unwrap_or_else(|e| {
panic!("{}", e);
});
while window.is_open() && !window.is_key_down(Key::Escape) {
for i in buffer.iter_mut() {
*i = 0; // write something more funny here!
}
// We unwrap here as we want this code to exit if it fails. Real applications may want to handle this in a different way
window.update_with_buffer(&buffer).unwrap();
}
}
Status
Currently Mac, Redox, Linux and Windows (64-bit and 32-bit) are the current supported platforms. X11 (Linux/FreeBSD/etc) support has been tested on Ubuntu (x64). Bug report(s) for other OSes/CPUs are welcome!
Build instructions
cargo build
cargo run --example noise
This will run the noise example
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.