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