1 extern crate sdl2;
2
3 use sdl2::event::Event;
4 use sdl2::pixels;
5 use sdl2::keyboard::Keycode;
6
7 use sdl2::gfx::primitives::DrawRenderer;
8
9 const SCREEN_WIDTH: u32 = 800;
10 const SCREEN_HEIGHT: u32 = 600;
11
main() -> Result<(), String>12 fn main() -> Result<(), String> {
13 let sdl_context = sdl2::init()?;
14 let video_subsys = sdl_context.video()?;
15 let window = video_subsys.window("rust-sdl2_gfx: draw line & FPSManager", SCREEN_WIDTH, SCREEN_HEIGHT)
16 .position_centered()
17 .opengl()
18 .build()
19 .map_err(|e| e.to_string())?;
20
21 let mut canvas = window.into_canvas().build().map_err(|e| e.to_string())?;
22
23 canvas.set_draw_color(pixels::Color::RGB(0, 0, 0));
24 canvas.clear();
25 canvas.present();
26
27 let mut lastx = 0;
28 let mut lasty = 0;
29
30 let mut events = sdl_context.event_pump()?;
31
32 'main: loop {
33 for event in events.poll_iter() {
34
35 match event {
36
37 Event::Quit {..} => break 'main,
38
39 Event::KeyDown {keycode: Some(keycode), ..} => {
40 if keycode == Keycode::Escape {
41 break 'main
42 } else if keycode == Keycode::Space {
43 println!("space down");
44 for i in 0..400 {
45 canvas.pixel(i as i16, i as i16, 0xFF000FFu32)?;
46 }
47 canvas.present();
48 }
49 }
50
51 Event::MouseButtonDown {x, y, ..} => {
52 let color = pixels::Color::RGB(x as u8, y as u8, 255);
53 let _ = canvas.line(lastx, lasty, x as i16, y as i16, color);
54 lastx = x as i16;
55 lasty = y as i16;
56 println!("mouse btn down at ({},{})", x, y);
57 canvas.present();
58 }
59
60 _ => {}
61 }
62 }
63 }
64
65 Ok(())
66 }
67