1 extern crate sdl2;
2
3 use sdl2::event::Event;
4 use sdl2::keyboard::Keycode;
5 use sdl2::pixels::{Color, PixelFormatEnum};
6 use sdl2::rect::{Point, Rect};
7
main() -> Result<(), String>8 fn main() -> Result<(), String> {
9 let sdl_context = sdl2::init()?;
10 let video_subsystem = sdl_context.video()?;
11 let window = video_subsystem
12 .window("rust-sdl2 resource-manager demo", 800, 600)
13 .position_centered()
14 .build()
15 .map_err(|e| e.to_string())?;
16 let mut canvas = window.into_canvas().software().build().map_err(|e| e.to_string())?;
17 let creator = canvas.texture_creator();
18 let mut texture = creator.create_texture_target(PixelFormatEnum::RGBA8888, 400, 300)
19 .map_err(|e| e.to_string())?;
20
21 let mut angle = 0.0;
22
23 'mainloop: loop {
24 for event in sdl_context.event_pump()?.poll_iter() {
25 match event {
26 Event::KeyDown { keycode: Some(Keycode::Escape), .. } |
27 Event::Quit { .. } => break 'mainloop,
28 _ => {}
29 }
30 }
31 angle = (angle + 0.5) % 360.;
32 canvas.with_texture_canvas(&mut texture, |texture_canvas| {
33 texture_canvas.clear();
34 texture_canvas.set_draw_color(Color::RGBA(255, 0, 0, 255));
35 texture_canvas.fill_rect(Rect::new(0, 0, 400, 300)).expect("could not fill rect");
36 }).map_err(|e| e.to_string())?;
37 canvas.set_draw_color(Color::RGBA(0, 0, 0, 255));
38 let dst = Some(Rect::new(0, 0, 400, 300));
39 canvas.clear();
40 canvas.copy_ex(&texture,
41 None,
42 dst,
43 angle,
44 Some(Point::new(400, 300)),
45 false,
46 false
47 )?;
48 canvas.present();
49 }
50
51 Ok(())
52 }
53