1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
use winit::{
event::*,
event_loop::{ControlFlow, EventLoop},
window::WindowBuilder,
};
use bufro::Color;
fn main() {
let event_loop = EventLoop::new();
let window = WindowBuilder::new()
.with_inner_size(winit::dpi::PhysicalSize::new(500, 500))
.build(&event_loop)
.unwrap();
let mut painter = pollster::block_on(bufro::Painter::new_from_window(&window, (500, 500)));
let font = bufro::Font::new(include_bytes!("FiraMono-Regular.ttf")).unwrap();
event_loop.run(move |event, _, control_flow| {
match event {
Event::WindowEvent {
ref event,
window_id,
} if window_id == window.id() => {
match event {
WindowEvent::CloseRequested => *control_flow = ControlFlow::Exit,
WindowEvent::KeyboardInput {
input:
winit::event::KeyboardInput {
virtual_keycode: Some(keycode),
..
},
..
} => match keycode {
VirtualKeyCode::Escape => *control_flow = ControlFlow::Exit,
VirtualKeyCode::Space => {}
_ => {}
},
WindowEvent::Resized(physical_size) => {
painter.resize((physical_size.width, physical_size.height));
}
WindowEvent::ScaleFactorChanged { new_inner_size, .. } => {
// new_inner_size is &mut so w have to dereference it twice
painter.resize((new_inner_size.width, new_inner_size.height));
}
_ => {}
}
}
Event::RedrawRequested(_) => {
let size = window.inner_size();
painter.rectangle(
0.,
0.,
size.width as f32,
size.height as f32,
Color::from_f(0.2, 0.2, 0.2, 1.0),
);
painter.rectangle(0.0, 0.0, 100.0, 100.0, Color::from_f(1.0, 0.0, 0.0, 1.0));
painter.fill_text(&font, "Hello, World!", 500.0, 500.0, 15.5, Color::from_8(0xFF, 0xFF, 0xFF, 0xFF), None);
match painter.flush() {
Ok(_) => {}
// Recreate the swap_chain if lost
Err(bufro::SurfaceError::Lost) => {
painter.clear();
painter.regen()
}
// The system is out of memory, we should probably quit
Err(bufro::SurfaceError::OutOfMemory) => *control_flow = ControlFlow::Exit,
// All other errors (Outdated, Timeout) should be resolved by the next frame
Err(e) => {
painter.clear();
eprintln!("{:?}", e)
}
}
}
Event::MainEventsCleared => {
// RedrawRequested will only trigger once, unless we manually
// request it.
window.request_redraw();
}
_ => {}
}
});
}