diff --git a/README.md b/README.md index d950d4d0..d2c58b18 100644 --- a/README.md +++ b/README.md @@ -19,3 +19,10 @@ cd rust-sdl2_image rustpkg install sdl2_image ``` +Demo +---- + +``` +rustpkg install demo +./bin/demo image.[png|jpg] +``` diff --git a/src/demo/main.rs b/src/demo/main.rs new file mode 100644 index 00000000..acef7320 --- /dev/null +++ b/src/demo/main.rs @@ -0,0 +1,24 @@ +#[crate_type = "bin"]; + +extern mod sdl2; +extern mod sdl2_image; +extern mod native; + +use std::os; + +mod video; + +#[start] +fn start(argc: int, argv: **u8) -> int { + native::start(argc, argv, main) +} + +#[main] +fn main() { + let args = os::args(); + if args.len() < 2 { + println!("Usage: ./demo image.[png|jpg]") + } else { + video::main(args[1]); + } +} diff --git a/src/demo/video.rs b/src/demo/video.rs new file mode 100644 index 00000000..d63eb6b9 --- /dev/null +++ b/src/demo/video.rs @@ -0,0 +1,54 @@ +use sdl2; +use sdl2_image; +use sdl2_image::LoadSurface; +// use sdl2_image::LoadTexture; + +pub fn main(png: ~str) { + sdl2::init([sdl2::InitVideo]); + sdl2_image::init([sdl2_image::InitPng, sdl2_image::InitJpg]); + + let window = match sdl2::video::Window::new("rust-sdl2 demo: Video", sdl2::video::PosCentered, sdl2::video::PosCentered, 800, 600, [sdl2::video::OpenGL]) { + Ok(window) => window, + Err(err) => fail!(format!("failed to create window: {}", err)) + }; + + let renderer = match sdl2::render::Renderer::from_window(window, sdl2::render::DriverAuto, [sdl2::render::Accelerated]) { + Ok(renderer) => renderer, + Err(err) => fail!(format!("failed to create renderer: {}", err)) + }; + + // Load a surface, and convert it to a texture bound to the renderer + let surface: ~sdl2::surface::Surface = match LoadSurface::from_file(png) { + Ok(surface) => surface, + Err(err) => fail!(format!("Failed to load png: {}", err)) + }; + let texture = match renderer.create_texture_from_surface(surface) { + Ok(texture) => texture, + Err(err) => fail!(format!("Failed to create surface: {}", err)) + }; + + // Load a texture directly via the renderer + // let texture = match renderer.load_texture("test.png") { + // Ok(texture) => texture, + // Err(err) => fail!(format!("Could not set render target: {}", err)) + // }; + + renderer.copy(texture, None, None); + renderer.present(); + + 'main : loop { + 'event : loop { + match sdl2::event::poll_event() { + sdl2::event::QuitEvent(_) => break 'main, + sdl2::event::KeyDownEvent(_, _, key, _, _) => { + if key == sdl2::keycode::EscapeKey { + break 'main + } + } + _ => {} + } + } + } + sdl2_image::quit(); + sdl2::quit(); +} diff --git a/src/sdl2_image/lib.rs b/src/sdl2_image/lib.rs index b602dc80..7b3a8b90 100644 --- a/src/sdl2_image/lib.rs +++ b/src/sdl2_image/lib.rs @@ -37,6 +37,9 @@ mod others { mod ffi; +// repr(C) "makes the size of the enum's discriminant the default +// size of enums that the C ABI for the platform uses." +#[repr(C)] #[deriving(Clone, Eq, IterBytes, ToStr)] pub enum InitFlag { InitJpg = ffi::IMG_INIT_JPG as int,