rust_minifb/examples/menu.rs

119 lines
3 KiB
Rust
Raw Normal View History

2016-03-05 03:36:28 +11:00
extern crate minifb;
2019-11-27 18:03:33 +11:00
use minifb::MENU_KEY_CTRL;
use minifb::{InputCallback, Key, Menu, Scale, Window, WindowOptions};
2016-03-05 03:36:28 +11:00
const WIDTH: usize = 640;
const HEIGHT: usize = 360;
const MENU_TEST_ID: usize = 1;
const OTHER_MENU_ID: usize = 2;
const COLOR_0_ID: usize = 3;
const COLOR_1_ID: usize = 4;
const COLOR_2_ID: usize = 5;
const CLOSE_MENU_ID: usize = 6;
2016-07-08 21:29:49 +10:00
struct KeyCharCallback;
impl InputCallback for KeyCharCallback {
fn add_char(&mut self, c: u32) {
println!("add_char {}", c);
}
}
2016-03-05 03:36:28 +11:00
fn main() {
let mut buffer: Vec<u32> = vec![0; WIDTH * HEIGHT];
2019-11-27 18:03:33 +11:00
let mut window = Window::new(
"Menu Test - Press ESC to exit",
WIDTH,
HEIGHT,
WindowOptions {
resize: true,
2019-11-27 18:03:33 +11:00
scale: Scale::X2,
..WindowOptions::default()
},
)
.expect("Unable to Open Window");
2016-03-05 03:36:28 +11:00
2016-07-08 21:29:49 +10:00
window.set_input_callback(Box::new(KeyCharCallback {}));
2016-05-08 19:01:49 +10:00
let mut menu = Menu::new("Test").unwrap();
let mut sub = Menu::new("Select Color").unwrap();
2019-11-27 18:03:33 +11:00
sub.add_item("Color 0", COLOR_0_ID)
.shortcut(Key::F1, 0)
.build();
sub.add_item("Color 1", COLOR_1_ID)
.shortcut(Key::F2, 0)
.build();
sub.add_item("Color 2", COLOR_2_ID)
.shortcut(Key::F7, 0)
.build();
2016-05-08 18:24:37 +10:00
2019-11-27 18:03:33 +11:00
menu.add_item("Menu Test", MENU_TEST_ID)
.shortcut(Key::W, MENU_KEY_CTRL)
.build();
2016-05-08 21:37:20 +10:00
2016-05-08 19:01:49 +10:00
menu.add_separator();
2016-05-08 21:37:20 +10:00
2019-11-27 18:03:33 +11:00
menu.add_item("Other Menu", OTHER_MENU_ID)
.shortcut(Key::W, MENU_KEY_CTRL)
.build();
menu.add_item("Remove Menu", CLOSE_MENU_ID)
.shortcut(Key::R, 0)
.build();
2016-05-08 08:25:31 +10:00
2016-05-08 18:24:37 +10:00
menu.add_sub_menu("Sub Test", &sub);
2016-05-08 21:27:55 +10:00
let menu_handle = window.add_menu(&menu);
2016-05-07 20:51:14 +10:00
window.get_unix_menus().map(|menus| {
2016-07-08 21:29:49 +10:00
println!("Menus {:?}", menus);
});
2016-07-08 21:29:49 +10:00
2016-05-08 19:01:49 +10:00
let mut color_mul = 1;
2016-03-05 03:36:28 +11:00
while window.is_open() && !window.is_key_down(Key::Escape) {
for y in 0..HEIGHT {
for x in 0..WIDTH {
buffer[(y * WIDTH) + x] = (((x ^ y) & 0xff) * color_mul) as u32;
}
}
window.is_menu_pressed().map(|menu_id| {
match menu_id {
COLOR_0_ID => {
color_mul = 0xfe0000;
}
COLOR_1_ID => {
color_mul = 0xff00;
}
COLOR_2_ID => {
color_mul = 1;
}
CLOSE_MENU_ID => {
println!("remove menu");
2016-05-08 21:27:55 +10:00
window.remove_menu(menu_handle);
2016-03-05 03:36:28 +11:00
}
_ => (),
}
println!("Menu id {} pressed", menu_id);
});
window.get_keys().map(|keys| {
for t in keys {
match t {
Key::W => println!("holding w!"),
Key::T => println!("holding t!"),
_ => (),
}
}
});
// We unwrap here as we want this code to exit if it fails
window.update_with_buffer(&buffer, WIDTH, HEIGHT).unwrap();
2016-03-05 03:36:28 +11:00
}
}