extern crate sdl2; extern crate sdl2_gfx; use sdl2::event::Event; use sdl2::pixels; use sdl2::keyboard::Keycode; use sdl2_gfx::primitives::DrawRenderer; const SCREEN_WIDTH: u32 = 800; const SCREEN_HEIGHT: u32 = 600; // hadle the annoying Rect i32 macro_rules! rect( ($x:expr, $y:expr, $w:expr, $h:expr) => ( sdl2::rect::Rect::new($x as i32, $y as i32, $w as i32, $h as i32) ) ); fn main() { let sdl_context = sdl2::init().unwrap(); let video_subsys = sdl_context.video().unwrap(); let window = video_subsys.window("rust-sdl2_gfx: draw line & FPSManager", SCREEN_WIDTH, SCREEN_HEIGHT) .position_centered() .opengl() .build() .unwrap(); let mut renderer = window.renderer().build().unwrap(); renderer.set_draw_color(pixels::Color::RGB(0, 0, 0)); renderer.clear(); renderer.present(); let mut lastx = 0; let mut lasty = 0; let mut events = sdl_context.event_pump().unwrap(); 'main: loop { for event in events.poll_iter() { match event { Event::Quit {..} => break 'main, Event::KeyDown {keycode: Some(keycode), ..} => { if keycode == Keycode::Escape { break 'main } else if keycode == Keycode::Space { println!("space down"); for i in 0..400 { renderer.pixel(i as i16, i as i16, 0xFF000FFu32).unwrap(); } renderer.present(); } } Event::MouseButtonDown {x, y, ..} => { let color = pixels::Color::RGB(x as u8, y as u8, 255); let _ = renderer.line(lastx, lasty, x as i16, y as i16, color); lastx = x as i16; lasty = y as i16; println!("mouse btn down at ({},{})", x, y); renderer.present(); } _ => {} } } } }