+use sdl2::EventPump;
+use sdl2::pixels::Color;
+use sdl2::render::BlendMode;
+use sdl2::render::Canvas;
+use sdl2::video::Window;
+
+use {SCREEN_HEIGHT, SCREEN_WIDTH};
+use sprites::SpriteManager;
+
+pub struct App {
+ pub canvas: Canvas<Window>,
+ pub event_pump: EventPump,
+ pub sprites: SpriteManager,
+}
+
+impl App {
+ pub fn new() -> App {
+ let context = sdl2::init().unwrap();
+ sdl2::image::init(sdl2::image::InitFlag::PNG).unwrap();
+ let window = context.video().unwrap().window("SDL test", SCREEN_WIDTH, SCREEN_HEIGHT)
+ .position_centered()
+ .opengl()
+ .build()
+ .unwrap();
+ context.mouse().show_cursor(false);
+ let mut canvas = window.into_canvas().build().unwrap();
+ canvas.set_blend_mode(BlendMode::Add);
+ canvas.set_draw_color(Color::RGB(0, 0, 0));
+ canvas.clear();
+ canvas.present();
+ let event_pump = context.event_pump().unwrap();
+ let sprites = SpriteManager::new(canvas.texture_creator());
+ App {
+ canvas,
+ event_pump,
+ sprites,
+ }
+ }
+
+ pub fn load_sprites(&mut self, sprites: &[(&'static str, &str)]) {
+ for (name, file) in sprites {
+ self.sprites.load(name, file);
+ }
+ }
+}