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