From 37cf5f76ac30bc19bd388cab64ae238bfd9983a3 Mon Sep 17 00:00:00 2001 From: Sunjay Varma Date: Fri, 11 Jan 2019 23:42:23 -0500 Subject: [PATCH] Replaced all calls to unwrap() in examples with either the ? operator or expect --- examples/animation.rs | 27 +++++----- examples/audio-capture-and-replay.rs | 32 +++++++----- examples/audio-queue-squarewave.rs | 20 ++++---- examples/audio-squarewave.rs | 10 ++-- examples/audio-wav.rs | 10 ++-- examples/audio-whitenoise.rs | 10 ++-- examples/cursor.rs | 38 +++++++------- examples/demo.rs | 14 +++--- examples/game-controller.rs | 64 +++++++++++------------- examples/game-of-life-unsafe-textures.rs | 52 ++++++++++--------- examples/game-of-life.rs | 51 +++++++++++-------- examples/gfx-demo.rs | 17 ++++--- examples/haptic.rs | 51 ++++++++----------- examples/image-demo.rs | 29 +++++------ examples/joystick.rs | 53 ++++++++------------ examples/keyboard-state.rs | 12 +++-- examples/message-box.rs | 31 +++++------- examples/mixer-demo.rs | 54 +++++++++----------- examples/mouse-state.rs | 12 +++-- examples/no-renderer.rs | 26 +++++----- examples/relative-mouse-state.rs | 12 +++-- examples/renderer-target.rs | 40 +++++++-------- examples/renderer-texture.rs | 26 +++++----- examples/renderer-yuv.rs | 22 ++++---- examples/resource-manager.rs | 32 ++++++------ examples/ttf-demo.rs | 31 +++++++----- examples/window-properties.rs | 16 +++--- 27 files changed, 404 insertions(+), 388 deletions(-) diff --git a/examples/animation.rs b/examples/animation.rs index cad8aa78..442db194 100644 --- a/examples/animation.rs +++ b/examples/animation.rs @@ -7,27 +7,28 @@ use sdl2::rect::Rect; use sdl2::rect::Point; use std::time::Duration; -fn main() { - let sdl_context = sdl2::init().unwrap(); - let video_subsystem = sdl_context.video().unwrap(); +fn main() -> Result<(), String> { + let sdl_context = sdl2::init()?; + let video_subsystem = sdl_context.video()?; let window = video_subsystem.window("SDL2", 640, 480) - .position_centered().build().unwrap(); + .position_centered().build().map_err(|e| e.to_string())?; let mut canvas = window.into_canvas() - .accelerated().build().unwrap(); + .accelerated().build().map_err(|e| e.to_string())?; let texture_creator = canvas.texture_creator(); canvas.set_draw_color(sdl2::pixels::Color::RGBA(0,0,0,255)); - let mut timer = sdl_context.timer().unwrap(); + let mut timer = sdl_context.timer()?; - let mut event_pump = sdl_context.event_pump().unwrap(); + let mut event_pump = sdl_context.event_pump()?; // animation sheet and extras are available from // https://opengameart.org/content/a-platformer-in-the-forest - let temp_surface = sdl2::surface::Surface::load_bmp(Path::new("assets/characters.bmp")).unwrap(); - let texture = texture_creator.create_texture_from_surface(&temp_surface).unwrap(); + let temp_surface = sdl2::surface::Surface::load_bmp(Path::new("assets/characters.bmp"))?; + let texture = texture_creator.create_texture_from_surface(&temp_surface) + .map_err(|e| e.to_string())?; let frames_per_anim = 4; let sprite_tile_size = (32,32); @@ -72,11 +73,13 @@ fn main() { canvas.clear(); // copy the frame to the canvas - canvas.copy_ex(&texture, Some(source_rect_0), Some(dest_rect_0), 0.0, None, false, false).unwrap(); - canvas.copy_ex(&texture, Some(source_rect_1), Some(dest_rect_1), 0.0, None, true, false).unwrap(); - canvas.copy_ex(&texture, Some(source_rect_2), Some(dest_rect_2), 0.0, None, false, false).unwrap(); + canvas.copy_ex(&texture, Some(source_rect_0), Some(dest_rect_0), 0.0, None, false, false)?; + canvas.copy_ex(&texture, Some(source_rect_1), Some(dest_rect_1), 0.0, None, true, false)?; + canvas.copy_ex(&texture, Some(source_rect_2), Some(dest_rect_2), 0.0, None, false, false)?; canvas.present(); std::thread::sleep(Duration::from_millis(100)); } + + Ok(()) } diff --git a/examples/audio-capture-and-replay.rs b/examples/audio-capture-and-replay.rs index 67c66dc4..81f56387 100644 --- a/examples/audio-capture-and-replay.rs +++ b/examples/audio-capture-and-replay.rs @@ -31,14 +31,15 @@ impl AudioCallback for Recording { self.pos += 1; if self.pos >= self.record_buffer.len() { self.done = true; - self.done_sender.send(self.record_buffer.clone()).unwrap(); + self.done_sender.send(self.record_buffer.clone()) + .expect("could not send record buffer"); break; } } } } -fn record(audio_subsystem: &AudioSubsystem, desired_spec: &AudioSpecDesired) -> Vec { +fn record(audio_subsystem: &AudioSubsystem, desired_spec: &AudioSpecDesired) -> Result, String> { println!("Capturing {:} seconds... Please rock!", RECORDING_LENGTH_SECONDS); let (done_sender, done_receiver) = mpsc::channel(); @@ -51,13 +52,13 @@ fn record(audio_subsystem: &AudioSubsystem, desired_spec: &AudioSpecDesired) -> done_sender, done: false } - }).unwrap(); + })?; println!("AudioDriver: {:?}", capture_device.subsystem().current_audio_driver()); capture_device.resume(); // Wait until the recording is done. - let recorded_vec = done_receiver.recv().unwrap(); + let recorded_vec = done_receiver.recv().map_err(|e| e.to_string())?; capture_device.pause(); @@ -65,7 +66,7 @@ fn record(audio_subsystem: &AudioSubsystem, desired_spec: &AudioSpecDesired) -> // Depending on your system it might be even important that the capture_device is dropped // before the playback starts. - recorded_vec + Ok(recorded_vec) } @@ -77,7 +78,8 @@ fn calculate_average_volume(recorded_vec: &[i16]) -> f32 { /// Returns a percent value fn calculate_max_volume(recorded_vec: &[i16]) -> f32 { - let max: i64 = recorded_vec.iter().map(|&x| (x as i64).abs()).max().unwrap(); + let max: i64 = recorded_vec.iter().map(|&x| (x as i64).abs()).max() + .expect("expected at least one value in recorded_vec"); (max as f32) / (i16::MAX as f32) * 100.0 } @@ -98,7 +100,7 @@ impl AudioCallback for SoundPlayback { } } -fn replay_recorded_vec(audio_subsystem: &AudioSubsystem, desired_spec: &AudioSpecDesired, recorded_vec: Vec) { +fn replay_recorded_vec(audio_subsystem: &AudioSubsystem, desired_spec: &AudioSpecDesired, recorded_vec: Vec) -> Result<(), String> { println!("Playing..."); let playback_device = audio_subsystem.open_playback(None, desired_spec, |spec| { @@ -107,19 +109,21 @@ fn replay_recorded_vec(audio_subsystem: &AudioSubsystem, desired_spec: &AudioSpe data: recorded_vec, pos: 0, } - }).unwrap(); + })?; // Start playback playback_device.resume(); std::thread::sleep(Duration::from_secs(RECORDING_LENGTH_SECONDS as u64)); // Device is automatically closed when dropped + + Ok(()) } -fn main() { - let sdl_context = sdl2::init().unwrap(); - let audio_subsystem = sdl_context.audio().unwrap(); +fn main() -> Result<(), String> { + let sdl_context = sdl2::init()?; + let audio_subsystem = sdl_context.audio()?; let desired_spec = AudioSpecDesired { freq: None, @@ -127,10 +131,12 @@ fn main() { samples: None }; - let recorded_vec = record(&audio_subsystem, &desired_spec); + let recorded_vec = record(&audio_subsystem, &desired_spec)?; println!("Average Volume of your Recording = {:?}%", calculate_average_volume(&recorded_vec)); println!("Max Volume of your Recording = {:?}%", calculate_max_volume(&recorded_vec)); - replay_recorded_vec(&audio_subsystem, &desired_spec, recorded_vec); + replay_recorded_vec(&audio_subsystem, &desired_spec, recorded_vec)?; + + Ok(()) } diff --git a/examples/audio-queue-squarewave.rs b/examples/audio-queue-squarewave.rs index a3d41813..7f4f7fd5 100644 --- a/examples/audio-queue-squarewave.rs +++ b/examples/audio-queue-squarewave.rs @@ -13,20 +13,20 @@ fn gen_wave(bytes_to_write: i32) -> Vec { for x in 0..sample_count { result.push( - if (x / period) % 2 == 0 { + if (x / period) % 2 == 0 { tone_volume - } - else { + } + else { -tone_volume - } + } ); } result } -fn main() { - let sdl_context = sdl2::init().unwrap(); - let audio_subsystem = sdl_context.audio().unwrap(); +fn main() -> Result<(), String> { + let sdl_context = sdl2::init()?; + let audio_subsystem = sdl_context.audio()?; let desired_spec = AudioSpecDesired { freq: Some(48_000), @@ -34,9 +34,9 @@ fn main() { // mono - samples: Some(4) // default sample size - }; + }; - let device = audio_subsystem.open_queue::(None, &desired_spec).unwrap(); + let device = audio_subsystem.open_queue::(None, &desired_spec)?; let target_bytes = 48_000 * 4; let wave = gen_wave(target_bytes); @@ -48,4 +48,6 @@ fn main() { std::thread::sleep(Duration::from_millis(2_000)); // Device is automatically closed when dropped + + Ok(()) } diff --git a/examples/audio-squarewave.rs b/examples/audio-squarewave.rs index 2b3a1e1e..1a9b6acc 100644 --- a/examples/audio-squarewave.rs +++ b/examples/audio-squarewave.rs @@ -21,9 +21,9 @@ impl AudioCallback for SquareWave { } } -fn main() { - let sdl_context = sdl2::init().unwrap(); - let audio_subsystem = sdl_context.audio().unwrap(); +fn main() -> Result<(), String> { + let sdl_context = sdl2::init()?; + let audio_subsystem = sdl_context.audio()?; let desired_spec = AudioSpecDesired { freq: Some(44_100), @@ -41,7 +41,7 @@ fn main() { phase: 0.0, volume: 0.25 } - }).unwrap(); + })?; // Start playback device.resume(); @@ -50,4 +50,6 @@ fn main() { std::thread::sleep(Duration::from_millis(2_000)); // Device is automatically closed when dropped + + Ok(()) } diff --git a/examples/audio-wav.rs b/examples/audio-wav.rs index 857af560..e903b8b9 100644 --- a/examples/audio-wav.rs +++ b/examples/audio-wav.rs @@ -25,13 +25,13 @@ impl AudioCallback for Sound { } } -fn main() { +fn main() -> Result<(), String> { let wav_file : Cow<'static, Path> = match std::env::args().nth(1) { None => Cow::from(Path::new("./assets/sine.wav")), Some(s) => Cow::from(PathBuf::from(s)) }; - let sdl_context = sdl2::init().unwrap(); - let audio_subsystem = sdl_context.audio().unwrap(); + let sdl_context = sdl2::init()?; + let audio_subsystem = sdl_context.audio()?; let desired_spec = AudioSpecDesired { freq: Some(44_100), @@ -56,7 +56,7 @@ fn main() { volume: 0.25, pos: 0, } - }).unwrap(); + })?; // Start playback device.resume(); @@ -65,4 +65,6 @@ fn main() { std::thread::sleep(Duration::from_millis(1_000)); // Device is automatically closed when dropped + + Ok(()) } diff --git a/examples/audio-whitenoise.rs b/examples/audio-whitenoise.rs index 471e7dbc..d0709320 100644 --- a/examples/audio-whitenoise.rs +++ b/examples/audio-whitenoise.rs @@ -21,9 +21,9 @@ impl AudioCallback for MyCallback { } } -fn main() { - let sdl_context = sdl2::init().unwrap(); - let audio_subsystem = sdl_context.audio().unwrap(); +fn main() -> Result<(), String> { + let sdl_context = sdl2::init()?; + let audio_subsystem = sdl_context.audio()?; let desired_spec = AudioSpecDesired { freq: Some(44_100), @@ -37,7 +37,7 @@ fn main() { println!("{:?}", spec); MyCallback { volume: 0.5 } - }).unwrap(); + })?; // Start playback device.resume(); @@ -56,4 +56,6 @@ fn main() { std::thread::sleep(Duration::from_millis(1_000)); // Device is automatically closed when dropped + + Ok(()) } diff --git a/examples/cursor.rs b/examples/cursor.rs index 59eea1cf..16304e59 100644 --- a/examples/cursor.rs +++ b/examples/cursor.rs @@ -10,26 +10,21 @@ use sdl2::pixels::Color; use sdl2::rect::Rect; use sdl2::surface::Surface; -pub fn run(png: &Path) { - - let sdl_context = sdl2::init().unwrap(); - let video_subsystem = sdl_context.video().unwrap(); - let _image_context = sdl2::image::init(InitFlag::PNG | InitFlag::JPG).unwrap(); +pub fn run(png: &Path) -> Result<(), String> { + let sdl_context = sdl2::init()?; + let video_subsystem = sdl_context.video()?; + let _image_context = sdl2::image::init(InitFlag::PNG | InitFlag::JPG)?; let window = video_subsystem.window("rust-sdl2 demo: Cursor", 800, 600) .position_centered() .build() - .unwrap(); + .map_err(|e| e.to_string())?; - let mut canvas = window.into_canvas().software().build().unwrap(); + let mut canvas = window.into_canvas().software().build().map_err(|e| e.to_string())?; - let surface = match Surface::from_file(png) { - Ok(surface) => surface, - Err(err) => panic!("failed to load cursor image: {}", err) - }; - let cursor = match Cursor::from_surface(surface, 0, 0) { - Ok(cursor) => cursor, - Err(err) => panic!("failed to load cursor: {}", err) - }; + let surface = Surface::from_file(png) + .map_err(|err| format!("failed to load cursor image: {}", err))?; + let cursor = Cursor::from_surface(surface, 0, 0) + .map_err(|err| format!("failed to load cursor: {}", err))?; cursor.set(); canvas.clear(); @@ -37,7 +32,7 @@ pub fn run(png: &Path) { canvas.set_draw_color(Color::RGBA(255, 255, 255, 255)); - let mut events = sdl_context.event_pump().unwrap(); + let mut events = sdl_context.event_pump()?; 'mainloop: loop { for event in events.poll_iter() { @@ -46,23 +41,26 @@ pub fn run(png: &Path) { Event::KeyDown {keycode: Option::Some(Keycode::Escape), ..} => break 'mainloop, Event::MouseButtonDown {x, y, ..} => { - canvas.fill_rect(Rect::new(x, y, 1, 1)).unwrap(); + canvas.fill_rect(Rect::new(x, y, 1, 1))?; canvas.present(); } _ => {} } } } + + Ok(()) } -fn main() { - +fn main() -> Result<(), String> { let args: Vec<_> = env::args().collect(); if args.len() < 2 { println!("Usage: cargo run /path/to/image.(png|jpg)") } else { - run(Path::new(&args[1])); + run(Path::new(&args[1]))?; } + + Ok(()) } diff --git a/examples/demo.rs b/examples/demo.rs index aa8ee931..05137674 100644 --- a/examples/demo.rs +++ b/examples/demo.rs @@ -5,22 +5,22 @@ use sdl2::event::Event; use sdl2::keyboard::Keycode; use std::time::Duration; -pub fn main() { - let sdl_context = sdl2::init().unwrap(); - let video_subsystem = sdl_context.video().unwrap(); +pub fn main() -> Result<(), String> { + let sdl_context = sdl2::init()?; + let video_subsystem = sdl_context.video()?; let window = video_subsystem.window("rust-sdl2 demo: Video", 800, 600) .position_centered() .opengl() .build() - .unwrap(); + .map_err(|e| e.to_string())?; - let mut canvas = window.into_canvas().build().unwrap(); + let mut canvas = window.into_canvas().build().map_err(|e| e.to_string())?; canvas.set_draw_color(Color::RGB(255, 0, 0)); canvas.clear(); canvas.present(); - let mut event_pump = sdl_context.event_pump().unwrap(); + let mut event_pump = sdl_context.event_pump()?; 'running: loop { for event in event_pump.poll_iter() { @@ -34,4 +34,6 @@ pub fn main() { ::std::thread::sleep(Duration::new(0, 1_000_000_000u32 / 60)); // The rest of the game loop goes here... } + + Ok(()) } diff --git a/examples/game-controller.rs b/examples/game-controller.rs index 517af707..8e6b70f1 100644 --- a/examples/game-controller.rs +++ b/examples/game-controller.rs @@ -1,52 +1,42 @@ extern crate sdl2; -fn main() { - let sdl_context = sdl2::init().unwrap(); - let game_controller_subsystem = sdl_context.game_controller().unwrap(); +fn main() -> Result<(), String> { + let sdl_context = sdl2::init()?; + let game_controller_subsystem = sdl_context.game_controller()?; - let available = - match game_controller_subsystem.num_joysticks() { - Ok(n) => n, - Err(e) => panic!("can't enumerate joysticks: {}", e), - }; + let available = game_controller_subsystem.num_joysticks() + .map_err(|e| format!("can't enumerate joysticks: {}", e))?; println!("{} joysticks available", available); - let mut controller = None; - - // Iterate over all available joysticks and look for game - // controllers. - for id in 0..available { - if game_controller_subsystem.is_game_controller(id) { - println!("Attempting to open controller {}", id); - - match game_controller_subsystem.open(id) { - Ok(c) => { - // We managed to find and open a game controller, - // exit the loop - println!("Success: opened \"{}\"", c.name()); - controller = Some(c); - break; - }, - Err(e) => println!("failed: {:?}", e), - } - - } else { - println!("{} is not a game controller", id); + // Iterate over all available joysticks and look for game controllers. + let mut controller = (0..available).find_map(|id| { + if !game_controller_subsystem.is_game_controller(id) { + println!("{} is not a game controller", id); + return None; } - } - let mut controller = - match controller { - Some(c) => c, - None => panic!("Couldn't open any controller"), - }; + println!("Attempting to open controller {}", id); + + match game_controller_subsystem.open(id) { + Ok(c) => { + // We managed to find and open a game controller, + // exit the loop + println!("Success: opened \"{}\"", c.name()); + Some(c) + }, + Err(e) => { + println!("failed: {:?}", e); + None + } + } + }).expect("Couldn't open any controller"); println!("Controller mapping: {}", controller.mapping()); let (mut lo_freq, mut hi_freq) = (0, 0); - for event in sdl_context.event_pump().unwrap().wait_iter() { + for event in sdl_context.event_pump()?.wait_iter() { use sdl2::event::Event; use sdl2::controller::Axis; @@ -84,4 +74,6 @@ fn main() { _ => (), } } + + Ok(()) } diff --git a/examples/game-of-life-unsafe-textures.rs b/examples/game-of-life-unsafe-textures.rs index 08c971da..e878c40c 100644 --- a/examples/game-of-life-unsafe-textures.rs +++ b/examples/game-of-life-unsafe-textures.rs @@ -126,15 +126,13 @@ mod game_of_life { } #[cfg(feature = "unsafe_textures")] -fn dummy_texture<'a>(canvas: &mut Canvas) -> (Texture, Texture) { +fn dummy_texture<'a>(canvas: &mut Canvas) -> Result<(Texture, Texture), String> { enum TextureColor { Yellow, White, }; - let mut square_texture1 : Texture = - canvas.create_texture_target(None, SQUARE_SIZE, SQUARE_SIZE).unwrap(); - let mut square_texture2 : Texture = - canvas.create_texture_target(None, SQUARE_SIZE, SQUARE_SIZE).unwrap(); + let mut square_texture1 = canvas.create_texture_target(None, SQUARE_SIZE, SQUARE_SIZE).map_err(|e| e.to_string())?; + let mut square_texture2 = canvas.create_texture_target(None, SQUARE_SIZE, SQUARE_SIZE).map_err(|e| e.to_string())?; // let's change the textures we just created { let textures = vec![ @@ -150,11 +148,13 @@ fn dummy_texture<'a>(canvas: &mut Canvas) -> (Texture, Texture) { for j in 0..SQUARE_SIZE { if (i+j) % 4 == 0 { texture_canvas.set_draw_color(Color::RGB(255, 255, 0)); - texture_canvas.draw_point(Point::new(i as i32, j as i32)).unwrap(); + texture_canvas.draw_point(Point::new(i as i32, j as i32)) + .expect("could not draw point"); } if (i+j*2) % 9 == 0 { texture_canvas.set_draw_color(Color::RGB(200, 200, 0)); - texture_canvas.draw_point(Point::new(i as i32, j as i32)).unwrap(); + texture_canvas.draw_point(Point::new(i as i32, j as i32)) + .expect("could not draw point"); } } } @@ -168,11 +168,13 @@ fn dummy_texture<'a>(canvas: &mut Canvas) -> (Texture, Texture) { // this doesn't mean anything, there was some trial and error to find // something that wasn't too ugly texture_canvas.set_draw_color(Color::RGB(192, 192, 192)); - texture_canvas.draw_point(Point::new(i as i32, j as i32)).unwrap(); + texture_canvas.draw_point(Point::new(i as i32, j as i32)) + .expect("could not draw point"); } if (i+j*2) % 5 == 0 { texture_canvas.set_draw_color(Color::RGB(64, 64, 64)); - texture_canvas.draw_point(Point::new(i as i32, j as i32)).unwrap(); + texture_canvas.draw_point(Point::new(i as i32, j as i32)) + .expect("could not draw point"); } } } @@ -186,24 +188,26 @@ fn dummy_texture<'a>(canvas: &mut Canvas) -> (Texture, Texture) { // this doesn't mean anything, there was some trial and serror to find // something that wasn't too ugly texture_canvas.set_draw_color(Color::RGB(192, 192, 192)); - texture_canvas.draw_point(Point::new(i as i32, j as i32)).unwrap(); + texture_canvas.draw_point(Point::new(i as i32, j as i32)) + .expect("could not draw point"); } if (i+j*2) % 5 == 0 { texture_canvas.set_draw_color(Color::RGB(64, 64, 64)); - texture_canvas.draw_point(Point::new(i as i32, j as i32)).unwrap(); + texture_canvas.draw_point(Point::new(i as i32, j as i32)) + .expect("could not draw point"); } } } - }).unwrap(); + }).map_err(|e| e.to_string())?; } - (square_texture1, square_texture2) + Ok((square_texture1, square_texture2)) } #[cfg(feature = "unsafe_textures")] -pub fn main() { - let sdl_context = sdl2::init().unwrap(); - let video_subsystem = sdl_context.video().unwrap(); - +pub fn main() -> Result<(), String> { + let sdl_context = sdl2::init()?; + let video_subsystem = sdl_context.video()?; + // the window is the representation of a window in your operating system, // however you can only manipulate properties of that window, like its size, whether it's // fullscreen, ... but you cannot change its content without using a Canvas or using the @@ -214,14 +218,14 @@ pub fn main() { SQUARE_SIZE*PLAYGROUND_HEIGHT) .position_centered() .build() - .unwrap(); + .map_err(|e| e.to_string())?; // the canvas allows us to both manipulate the property of the window and to change its content // via hardware or software rendering. See CanvasBuilder for more info. let mut canvas = window.into_canvas() .target_texture() .present_vsync() - .build().unwrap(); + .build().map_err(|e| e.to_string())?; println!("Using SDL_Renderer \"{}\"", canvas.info().name); canvas.set_draw_color(Color::RGB(0, 0, 0)); @@ -233,10 +237,10 @@ pub fn main() { canvas.present(); // Create a "target" texture so that we can use our Renderer with it later - let (square_texture1, square_texture2) = dummy_texture(&mut canvas); + let (square_texture1, square_texture2) = dummy_texture(&mut canvas)?; let mut game = game_of_life::GameOfLife::new(); - let mut event_pump = sdl_context.event_pump().unwrap(); + let mut event_pump = sdl_context.event_pump()?; let mut frame : u32 = 0; 'running: loop { // get the inputs here @@ -253,7 +257,7 @@ pub fn main() { let y = (y as u32) / SQUARE_SIZE; match game.get_mut(x as i32, y as i32) { Some(square) => {*square = !(*square);}, - None => {panic!()} + None => unreachable!(), }; }, _ => {} @@ -281,7 +285,7 @@ pub fn main() { Rect::new(((i % PLAYGROUND_WIDTH) * SQUARE_SIZE) as i32, ((i / PLAYGROUND_WIDTH) * SQUARE_SIZE) as i32, SQUARE_SIZE, - SQUARE_SIZE)).unwrap(); + SQUARE_SIZE))?; } } canvas.present(); @@ -289,6 +293,8 @@ pub fn main() { frame += 1; }; } + + Ok(()) } #[cfg(not(feature = "unsafe_textures"))] diff --git a/examples/game-of-life.rs b/examples/game-of-life.rs index 67dd0ebf..423684c4 100644 --- a/examples/game-of-life.rs +++ b/examples/game-of-life.rs @@ -115,15 +115,13 @@ mod game_of_life { } } -fn dummy_texture<'a>(canvas: &mut Canvas, texture_creator: &'a TextureCreator) -> (Texture<'a>, Texture<'a>) { +fn dummy_texture<'a>(canvas: &mut Canvas, texture_creator: &'a TextureCreator) -> Result<(Texture<'a>, Texture<'a>), String> { enum TextureColor { Yellow, White, }; - let mut square_texture1 : Texture = - texture_creator.create_texture_target(None, SQUARE_SIZE, SQUARE_SIZE).unwrap(); - let mut square_texture2 : Texture = - texture_creator.create_texture_target(None, SQUARE_SIZE, SQUARE_SIZE).unwrap(); + let mut square_texture1 = texture_creator.create_texture_target(None, SQUARE_SIZE, SQUARE_SIZE).map_err(|e| e.to_string())?; + let mut square_texture2 = texture_creator.create_texture_target(None, SQUARE_SIZE, SQUARE_SIZE).map_err(|e| e.to_string())?; // let's change the textures we just created { let textures = vec![ @@ -139,11 +137,13 @@ fn dummy_texture<'a>(canvas: &mut Canvas, texture_creator: &'a TextureCr for j in 0..SQUARE_SIZE { if (i+j) % 4 == 0 { texture_canvas.set_draw_color(Color::RGB(255, 255, 0)); - texture_canvas.draw_point(Point::new(i as i32, j as i32)).unwrap(); + texture_canvas.draw_point(Point::new(i as i32, j as i32)) + .expect("could not draw point"); } if (i+j*2) % 9 == 0 { texture_canvas.set_draw_color(Color::RGB(200, 200, 0)); - texture_canvas.draw_point(Point::new(i as i32, j as i32)).unwrap(); + texture_canvas.draw_point(Point::new(i as i32, j as i32)) + .expect("could not draw point"); } } } @@ -157,11 +157,13 @@ fn dummy_texture<'a>(canvas: &mut Canvas, texture_creator: &'a TextureCr // this doesn't mean anything, there was some trial and error to find // something that wasn't too ugly texture_canvas.set_draw_color(Color::RGB(192, 192, 192)); - texture_canvas.draw_point(Point::new(i as i32, j as i32)).unwrap(); + texture_canvas.draw_point(Point::new(i as i32, j as i32)) + .expect("could not draw point"); } if (i+j*2) % 5 == 0 { texture_canvas.set_draw_color(Color::RGB(64, 64, 64)); - texture_canvas.draw_point(Point::new(i as i32, j as i32)).unwrap(); + texture_canvas.draw_point(Point::new(i as i32, j as i32)) + .expect("could not draw point"); } } } @@ -175,22 +177,24 @@ fn dummy_texture<'a>(canvas: &mut Canvas, texture_creator: &'a TextureCr // this doesn't mean anything, there was some trial and serror to find // something that wasn't too ugly texture_canvas.set_draw_color(Color::RGB(192, 192, 192)); - texture_canvas.draw_point(Point::new(i as i32, j as i32)).unwrap(); + texture_canvas.draw_point(Point::new(i as i32, j as i32)) + .expect("could not draw point"); } if (i+j*2) % 5 == 0 { texture_canvas.set_draw_color(Color::RGB(64, 64, 64)); - texture_canvas.draw_point(Point::new(i as i32, j as i32)).unwrap(); + texture_canvas.draw_point(Point::new(i as i32, j as i32)) + .expect("could not draw point"); } } } - }).unwrap(); + }).map_err(|e| e.to_string())?; } - (square_texture1, square_texture2) + Ok((square_texture1, square_texture2)) } -pub fn main() { - let sdl_context = sdl2::init().unwrap(); - let video_subsystem = sdl_context.video().unwrap(); +pub fn main() -> Result<(), String> { + let sdl_context = sdl2::init()?; + let video_subsystem = sdl_context.video()?; // the window is the representation of a window in your operating system, // however you can only manipulate properties of that window, like its size, whether it's @@ -202,14 +206,15 @@ pub fn main() { SQUARE_SIZE*PLAYGROUND_HEIGHT) .position_centered() .build() - .unwrap(); + .map_err(|e| e.to_string())?; // the canvas allows us to both manipulate the property of the window and to change its content // via hardware or software rendering. See CanvasBuilder for more info. let mut canvas = window.into_canvas() .target_texture() .present_vsync() - .build().unwrap(); + .build() + .map_err(|e| e.to_string())?; println!("Using SDL_Renderer \"{}\"", canvas.info().name); canvas.set_draw_color(Color::RGB(0, 0, 0)); @@ -225,10 +230,10 @@ pub fn main() { let texture_creator : TextureCreator<_> = canvas.texture_creator(); // Create a "target" texture so that we can use our Renderer with it later - let (square_texture1, square_texture2) = dummy_texture(&mut canvas, &texture_creator); + let (square_texture1, square_texture2) = dummy_texture(&mut canvas, &texture_creator)?; let mut game = game_of_life::GameOfLife::new(); - let mut event_pump = sdl_context.event_pump().unwrap(); + let mut event_pump = sdl_context.event_pump()?; let mut frame : u32 = 0; 'running: loop { // get the inputs here @@ -245,7 +250,7 @@ pub fn main() { let y = (y as u32) / SQUARE_SIZE; match game.get_mut(x as i32, y as i32) { Some(square) => {*square = !(*square);}, - None => {panic!()} + None => unreachable!(), }; }, _ => {} @@ -273,7 +278,7 @@ pub fn main() { Rect::new(((i % PLAYGROUND_WIDTH) * SQUARE_SIZE) as i32, ((i / PLAYGROUND_WIDTH) * SQUARE_SIZE) as i32, SQUARE_SIZE, - SQUARE_SIZE)).unwrap(); + SQUARE_SIZE))?; } } canvas.present(); @@ -281,4 +286,6 @@ pub fn main() { frame += 1; }; } + + Ok(()) } diff --git a/examples/gfx-demo.rs b/examples/gfx-demo.rs index fc9f50d8..9c67e1e5 100644 --- a/examples/gfx-demo.rs +++ b/examples/gfx-demo.rs @@ -9,16 +9,16 @@ use sdl2::gfx::primitives::DrawRenderer; const SCREEN_WIDTH: u32 = 800; const SCREEN_HEIGHT: u32 = 600; -fn main() { - let sdl_context = sdl2::init().unwrap(); - let video_subsys = sdl_context.video().unwrap(); +fn main() -> Result<(), String> { + let sdl_context = sdl2::init()?; + let video_subsys = sdl_context.video()?; let window = video_subsys.window("rust-sdl2_gfx: draw line & FPSManager", SCREEN_WIDTH, SCREEN_HEIGHT) .position_centered() .opengl() .build() - .unwrap(); + .map_err(|e| e.to_string())?; - let mut canvas = window.into_canvas().build().unwrap(); + let mut canvas = window.into_canvas().build().map_err(|e| e.to_string())?; canvas.set_draw_color(pixels::Color::RGB(0, 0, 0)); canvas.clear(); @@ -27,7 +27,7 @@ fn main() { let mut lastx = 0; let mut lasty = 0; - let mut events = sdl_context.event_pump().unwrap(); + let mut events = sdl_context.event_pump()?; 'main: loop { for event in events.poll_iter() { @@ -42,10 +42,9 @@ fn main() { } else if keycode == Keycode::Space { println!("space down"); for i in 0..400 { - canvas.pixel(i as i16, i as i16, 0xFF000FFu32).unwrap(); + canvas.pixel(i as i16, i as i16, 0xFF000FFu32)?; } canvas.present(); - } } @@ -62,4 +61,6 @@ fn main() { } } } + + Ok(()) } diff --git a/examples/haptic.rs b/examples/haptic.rs index 20d0dd21..de3d717a 100644 --- a/examples/haptic.rs +++ b/examples/haptic.rs @@ -1,40 +1,31 @@ extern crate sdl2; -fn main() { - let sdl_context = sdl2::init().unwrap(); - let joystick_subsystem = sdl_context.joystick().unwrap(); - let haptic_subsystem = sdl_context.haptic().unwrap(); +fn main() -> Result<(), String> { + let sdl_context = sdl2::init()?; + let joystick_subsystem = sdl_context.joystick()?; + let haptic_subsystem = sdl_context.haptic()?; - let available = - match joystick_subsystem.num_joysticks() { - Ok(n) => n, - Err(e) => panic!("can't enumerate joysticks: {}", e), - }; + let available = joystick_subsystem.num_joysticks() + .map_err(|e| format!("can't enumerate joysticks: {}", e))?; println!("{} joysticks available", available); - let mut joystick_index = None; + // Iterate over all available joysticks and stop once we manage to open one. + let joystick_index = (0..available).find_map(|id| match joystick_subsystem.open(id) { + Ok(c) => { + println!("Success: opened \"{}\"", c.name()); + Some(id) + }, + Err(e) => { + println!("failed: {:?}", e); + None + }, + }).expect("Couldn't open any joystick"); - // Iterate over all available joysticks and stop once we manage to - // open one. - for id in 0..available { - match joystick_subsystem.open(id) { - Ok(c) => { - println!("Success: opened \"{}\"", c.name()); - joystick_index = Some(id); - break; - }, - Err(e) => println!("failed: {:?}", e), - } - } + let mut haptic = haptic_subsystem.open_from_joystick_id(joystick_index) + .map_err(|e| e.to_string())?; - if joystick_index.is_none() { - panic!("Couldn't open any joystick"); - }; - - let mut haptic = haptic_subsystem.open_from_joystick_id(joystick_index.unwrap()).unwrap(); - - for event in sdl_context.event_pump().unwrap().wait_iter() { + for event in sdl_context.event_pump()?.wait_iter() { use sdl2::event::Event; match event { @@ -59,4 +50,6 @@ fn main() { _ => (), } } + + Ok(()) } diff --git a/examples/image-demo.rs b/examples/image-demo.rs index 028ced52..b1069eef 100644 --- a/examples/image-demo.rs +++ b/examples/image-demo.rs @@ -6,25 +6,24 @@ use sdl2::image::{LoadTexture, InitFlag}; use sdl2::event::Event; use sdl2::keyboard::Keycode; -pub fn run(png: &Path) { - - let sdl_context = sdl2::init().unwrap(); - let video_subsystem = sdl_context.video().unwrap(); - let _image_context = sdl2::image::init(InitFlag::PNG | InitFlag::JPG).unwrap(); +pub fn run(png: &Path) -> Result<(), String> { + let sdl_context = sdl2::init()?; + let video_subsystem = sdl_context.video()?; + let _image_context = sdl2::image::init(InitFlag::PNG | InitFlag::JPG)?; let window = video_subsystem.window("rust-sdl2 demo: Video", 800, 600) .position_centered() .build() - .unwrap(); + .map_err(|e| e.to_string())?; - let mut canvas = window.into_canvas().software().build().unwrap(); + let mut canvas = window.into_canvas().software().build().map_err(|e| e.to_string())?; let texture_creator = canvas.texture_creator(); - let texture = texture_creator.load_texture(png).unwrap(); + let texture = texture_creator.load_texture(png)?; - canvas.copy(&texture, None, None).expect("Render failed"); + canvas.copy(&texture, None, None)?; canvas.present(); 'mainloop: loop { - for event in sdl_context.event_pump().unwrap().poll_iter() { + for event in sdl_context.event_pump()?.poll_iter() { match event { Event::Quit{..} | Event::KeyDown {keycode: Option::Some(Keycode::Escape), ..} => @@ -33,16 +32,18 @@ pub fn run(png: &Path) { } } } + + Ok(()) } - -fn main() { - +fn main() -> Result<(), String> { let args: Vec<_> = env::args().collect(); if args.len() < 2 { println!("Usage: cargo run /path/to/image.(png|jpg)") } else { - run(Path::new(&args[1])); + run(Path::new(&args[1]))?; } + + Ok(()) } diff --git a/examples/joystick.rs b/examples/joystick.rs index 804a68f5..54be2e72 100644 --- a/examples/joystick.rs +++ b/examples/joystick.rs @@ -1,44 +1,33 @@ extern crate sdl2; -fn main() { - let sdl_context = sdl2::init().unwrap(); - let joystick_subsystem = sdl_context.joystick().unwrap(); +fn main() -> Result<(), String> { + let sdl_context = sdl2::init()?; + let joystick_subsystem = sdl_context.joystick()?; - let available = - match joystick_subsystem.num_joysticks() { - Ok(n) => n, - Err(e) => panic!("can't enumerate joysticks: {}", e), - }; + let available = joystick_subsystem.num_joysticks() + .map_err(|e| format!("can't enumerate joysticks: {}", e))?; println!("{} joysticks available", available); - let mut joystick = None; - - // Iterate over all available joysticks and stop once we manage to - // open one. - for id in 0..available { - match joystick_subsystem.open(id) { - Ok(c) => { - println!("Success: opened \"{}\"", c.name()); - joystick = Some(c); - break; - }, - Err(e) => println!("failed: {:?}", e), - } - } - - // Print the joystick's power level, if a joystick was found. - let mut joystick = match joystick { - Some(j) => { - println!("\"{}\" power level: {:?}", j.name(), j.power_level().unwrap()); - j + // Iterate over all available joysticks and stop once we manage to open one. + let mut joystick = (0..available).find_map(|id| match joystick_subsystem.open(id) { + Ok(c) => { + println!("Success: opened \"{}\"", c.name()); + Some(c) }, - None => panic!("Couldn't open any joystick"), - }; + Err(e) => { + println!("failed: {:?}", e); + None + }, + }).expect("Couldn't open any joystick"); + + // Print the joystick's power level + println!("\"{}\" power level: {:?}", joystick.name(), joystick.power_level() + .map_err(|e| e.to_string())?); let (mut lo_freq, mut hi_freq) = (0, 0); - for event in sdl_context.event_pump().unwrap().wait_iter() { + for event in sdl_context.event_pump()?.wait_iter() { use sdl2::event::Event; match event { @@ -85,4 +74,6 @@ fn main() { _ => (), } } + + Ok(()) } diff --git a/examples/keyboard-state.rs b/examples/keyboard-state.rs index 7e55ad8e..729095d4 100644 --- a/examples/keyboard-state.rs +++ b/examples/keyboard-state.rs @@ -5,16 +5,16 @@ use sdl2::keyboard::Keycode; use std::collections::HashSet; use std::time::Duration; -pub fn main() { - let sdl_context = sdl2::init().unwrap(); - let video_subsystem = sdl_context.video().unwrap(); +pub fn main() -> Result<(), String> { + let sdl_context = sdl2::init()?; + let video_subsystem = sdl_context.video()?; let _window = video_subsystem.window("Keyboard", 800, 600) .position_centered() .build() - .unwrap(); + .map_err(|e| e.to_string())?; - let mut events = sdl_context.event_pump().unwrap(); + let mut events = sdl_context.event_pump()?; let mut prev_keys = HashSet::new(); @@ -40,4 +40,6 @@ pub fn main() { std::thread::sleep(Duration::from_millis(100)); } + + Ok(()) } diff --git a/examples/message-box.rs b/examples/message-box.rs index 223f2f08..f8610182 100644 --- a/examples/message-box.rs +++ b/examples/message-box.rs @@ -5,39 +5,32 @@ use sdl2::event::Event; use sdl2::keyboard::Keycode; use ::sdl2::messagebox::*; -pub fn main() { - let sdl_context = sdl2::init().unwrap(); - let video_subsystem = sdl_context.video().unwrap(); +pub fn main() -> Result<(), String> { + let sdl_context = sdl2::init()?; + let video_subsystem = sdl_context.video()?; let window = video_subsystem.window("rust-sdl2 demo: Video", 800, 600) .position_centered() .opengl() .build() - .unwrap(); + .map_err(|e| e.to_string())?; - let mut canvas = window.into_canvas().build().unwrap(); + let mut canvas = window.into_canvas().build().map_err(|e| e.to_string())?; canvas.set_draw_color(Color::RGB(255, 0, 0)); canvas.clear(); canvas.present(); - let mut event_pump = sdl_context.event_pump().unwrap(); + let mut event_pump = sdl_context.event_pump()?; 'running: loop { for event in event_pump.poll_iter() { match event { Event::Quit {..} | Event::KeyDown { keycode: Some(Keycode::Escape), .. } => { - let res = - show_simple_message_box(MessageBoxFlag::ERROR, - "Some title", - "Some information inside the window", - canvas.window()); - match res { - Ok(_) => {} - Err(ShowMessageError::SdlError(string)) => { - println!("An error occured : {}",string); - } - Err(_) => println!("Unexpected error occured !"), - }; + show_simple_message_box(MessageBoxFlag::ERROR, + "Some title", + "Some information inside the window", + canvas.window() + ).map_err(|e| e.to_string())?; break 'running }, _ => {} @@ -69,4 +62,6 @@ pub fn main() { None, None); println!("{:?}",res); + + Ok(()) } diff --git a/examples/mixer-demo.rs b/examples/mixer-demo.rs index 489a3528..b0667274 100644 --- a/examples/mixer-demo.rs +++ b/examples/mixer-demo.rs @@ -6,34 +6,34 @@ use std::env; use std::path::Path; use sdl2::mixer::{InitFlag, DEFAULT_CHANNELS, AUDIO_S16LSB}; -fn main() { - +fn main() -> Result<(), String> { let args: Vec<_> = env::args().collect(); if args.len() < 2 { println!("Usage: ./demo music.[mp3|wav|ogg] [sound-effect.[mp3|wav|ogg]]") } else { let sound_file = args.get(2).map(|sound_file| Path::new(sound_file)); - demo(Path::new(&args[1]), sound_file); + demo(Path::new(&args[1]), sound_file)?; } + + Ok(()) } -fn demo(music_file: &Path, sound_file: Option<&Path>) { - +fn demo(music_file: &Path, sound_file: Option<&Path>) -> Result<(), String> { println!("linked version: {}", sdl2::mixer::get_linked_version()); - let sdl = sdl2::init().unwrap(); - let _audio = sdl.audio().unwrap(); - let mut timer = sdl.timer().unwrap(); + let sdl = sdl2::init()?; + let _audio = sdl.audio()?; + let mut timer = sdl.timer()?; let frequency = 44_100; let format = AUDIO_S16LSB; // signed 16 bit samples, in little-endian byte order let channels = DEFAULT_CHANNELS; // Stereo let chunk_size = 1_024; - sdl2::mixer::open_audio(frequency, format, channels, chunk_size).unwrap(); + sdl2::mixer::open_audio(frequency, format, channels, chunk_size)?; let _mixer_context = sdl2::mixer::init( InitFlag::MP3 | InitFlag::FLAC | InitFlag::MOD | InitFlag::OGG - ).unwrap(); + )?; // Number of mixing channels available for sound effect `Chunk`s to play // simultaneously. @@ -57,7 +57,7 @@ fn demo(music_file: &Path, sound_file: Option<&Path>) { println!("query spec => {:?}", sdl2::mixer::query_spec()); - let music = sdl2::mixer::Music::from_file(music_file).unwrap(); + let music = sdl2::mixer::Music::from_file(music_file)?; fn hook_finished() { println!("play ends! from rust cb"); @@ -71,26 +71,18 @@ fn demo(music_file: &Path, sound_file: Option<&Path>) { println!("play => {:?}", music.play(1)); if let Some(sound_file_path) = sound_file { - let sound_chunk_res = sdl2::mixer::Chunk::from_file(sound_file_path); + let sound_chunk = sdl2::mixer::Chunk::from_file(sound_file_path) + .map_err(|e| format!("Cannot load sound file: {:?}", e))?; - match sound_chunk_res { - Ok(sound_chunk) => { - println!("chunk volume => {:?}", sound_chunk.get_volume()); - println!("playing sound twice"); - let play_res = sdl2::mixer::Channel::all().play(&sound_chunk, 1); + println!("chunk volume => {:?}", sound_chunk.get_volume()); + println!("playing sound twice"); + sdl2::mixer::Channel::all().play(&sound_chunk, 1)?; - // This delay is needed because when the `Chunk` goes out of scope, - // the sound effect stops playing. Delay long enough to hear the - // sound. - timer.delay(5_000); - - match play_res { - Ok(_) => println!("played sound"), - Err(e) => println!("{:?}", e), - } - } - Err(e) => println!("Cannot load sound file: {:?}", e), - } + // This delay is needed because when the `Chunk` goes out of scope, + // the sound effect stops playing. Delay long enough to hear the + // sound. + timer.delay(5_000); + println!("played sound"); } timer.delay(10_000); @@ -100,11 +92,13 @@ fn demo(music_file: &Path, sound_file: Option<&Path>) { timer.delay(5_000); println!("fading in from pos ... {:?}", - music.fade_in_from_pos(1, 10_000, 100.0)); + music.fade_in_from_pos(1, 10_000, 100.0)); timer.delay(5_000); sdl2::mixer::Music::halt(); timer.delay(1_000); println!("quitting sdl"); + + Ok(()) } diff --git a/examples/mouse-state.rs b/examples/mouse-state.rs index 6365d5c5..785345ac 100644 --- a/examples/mouse-state.rs +++ b/examples/mouse-state.rs @@ -5,16 +5,16 @@ use sdl2::keyboard::Keycode; use std::collections::HashSet; use std::time::Duration; -pub fn main() { - let sdl_context = sdl2::init().unwrap(); - let video_subsystem = sdl_context.video().unwrap(); +pub fn main() -> Result<(), String> { + let sdl_context = sdl2::init()?; + let video_subsystem = sdl_context.video()?; let _window = video_subsystem.window("Mouse", 800, 600) .position_centered() .build() - .unwrap(); + .map_err(|e| e.to_string())?; - let mut events = sdl_context.event_pump().unwrap(); + let mut events = sdl_context.event_pump()?; let mut prev_buttons = HashSet::new(); @@ -45,4 +45,6 @@ pub fn main() { std::thread::sleep(Duration::from_millis(100)); } + + Ok(()) } diff --git a/examples/no-renderer.rs b/examples/no-renderer.rs index 3c94bfe2..a67b09d5 100644 --- a/examples/no-renderer.rs +++ b/examples/no-renderer.rs @@ -19,8 +19,8 @@ enum Gradient { White } -fn set_window_gradient(window: &mut Window, event_pump: &sdl2::EventPump, gradient: Gradient) { - let mut surface = window.surface(event_pump).unwrap(); +fn set_window_gradient(window: &mut Window, event_pump: &sdl2::EventPump, gradient: Gradient) -> Result<(), String> { + let mut surface = window.surface(event_pump)?; for i in 0 .. (WINDOW_WIDTH / 4) { let c : u8 = 255 - (i as u8); let i = i as i32; @@ -31,9 +31,9 @@ fn set_window_gradient(window: &mut Window, event_pump: &sdl2::EventPump, gradie Gradient::Blue => Color::RGB(0, 0, c), Gradient::White => Color::RGB(c, c, c), }; - surface.fill_rect(Rect::new(i*4, 0, 4, WINDOW_HEIGHT), color).unwrap(); + surface.fill_rect(Rect::new(i*4, 0, 4, WINDOW_HEIGHT), color)?; } - surface.finish().unwrap(); + surface.finish() } fn next_gradient(gradient: Gradient) -> Gradient { @@ -47,17 +47,17 @@ fn next_gradient(gradient: Gradient) -> Gradient { } } -pub fn main() { - let sdl_context = sdl2::init().unwrap(); - let video_subsystem = sdl_context.video().unwrap(); - +pub fn main() -> Result<(), String> { + let sdl_context = sdl2::init()?; + let video_subsystem = sdl_context.video()?; + let mut window = video_subsystem.window("rust-sdl2 demo: No Renderer", WINDOW_WIDTH, WINDOW_HEIGHT) .position_centered() .build() - .unwrap(); - let mut event_pump = sdl_context.event_pump().unwrap(); + .map_err(|e| e.to_string())?; + let mut event_pump = sdl_context.event_pump()?; let mut current_gradient = Gradient::Red; - set_window_gradient(&mut window, &event_pump, current_gradient); + set_window_gradient(&mut window, &event_pump, current_gradient)?; 'running: loop { let mut keypress : bool = false; for event in event_pump.poll_iter() { @@ -73,8 +73,10 @@ pub fn main() { } if keypress { current_gradient = next_gradient(current_gradient); - set_window_gradient(&mut window, &event_pump, current_gradient); + set_window_gradient(&mut window, &event_pump, current_gradient)?; } ::std::thread::sleep(Duration::new(0, 1_000_000_000u32 / 60)); } + + Ok(()) } diff --git a/examples/relative-mouse-state.rs b/examples/relative-mouse-state.rs index 94f81c5f..b02525bf 100644 --- a/examples/relative-mouse-state.rs +++ b/examples/relative-mouse-state.rs @@ -5,16 +5,16 @@ use sdl2::mouse::MouseButton; use sdl2::keyboard::Keycode; use std::time::Duration; -pub fn main() { - let sdl_context = sdl2::init().unwrap(); - let video_subsystem = sdl_context.video().unwrap(); +pub fn main() -> Result<(), String> { + let sdl_context = sdl2::init()?; + let video_subsystem = sdl_context.video()?; let _window = video_subsystem.window("Mouse", 800, 600) .position_centered() .build() - .unwrap(); + .map_err(|e| e.to_string())?; - let mut events = sdl_context.event_pump().unwrap(); + let mut events = sdl_context.event_pump()?; let mut state; 'running: loop { @@ -35,4 +35,6 @@ pub fn main() { std::thread::sleep(Duration::from_millis(100)); } + + Ok(()) } diff --git a/examples/renderer-target.rs b/examples/renderer-target.rs index b1ff1909..01fe59ab 100644 --- a/examples/renderer-target.rs +++ b/examples/renderer-target.rs @@ -5,24 +5,23 @@ use sdl2::keyboard::Keycode; use sdl2::pixels::{Color, PixelFormatEnum}; use sdl2::rect::{Point, Rect}; -fn main() { - let sdl_context = sdl2::init().unwrap(); - let video_subsystem = sdl_context.video().unwrap(); +fn main() -> Result<(), String> { + let sdl_context = sdl2::init()?; + let video_subsystem = sdl_context.video()?; let window = video_subsystem .window("rust-sdl2 resource-manager demo", 800, 600) .position_centered() .build() - .unwrap(); - let mut canvas = window.into_canvas().software().build().unwrap(); + .map_err(|e| e.to_string())?; + let mut canvas = window.into_canvas().software().build().map_err(|e| e.to_string())?; let creator = canvas.texture_creator(); - let mut texture = creator - .create_texture_target(PixelFormatEnum::RGBA8888, 400, 300) - .unwrap(); + let mut texture = creator.create_texture_target(PixelFormatEnum::RGBA8888, 400, 300) + .map_err(|e| e.to_string())?; let mut angle = 0.0; 'mainloop: loop { - for event in sdl_context.event_pump().unwrap().poll_iter() { + for event in sdl_context.event_pump()?.poll_iter() { match event { Event::KeyDown { keycode: Some(Keycode::Escape), .. } | Event::Quit { .. } => break 'mainloop, @@ -33,20 +32,21 @@ fn main() { canvas.with_texture_canvas(&mut texture, |texture_canvas| { texture_canvas.clear(); texture_canvas.set_draw_color(Color::RGBA(255, 0, 0, 255)); - texture_canvas.fill_rect(Rect::new(0, 0, 400, 300)).unwrap(); - }).unwrap(); + texture_canvas.fill_rect(Rect::new(0, 0, 400, 300)).expect("could not fill rect"); + }).map_err(|e| e.to_string())?; canvas.set_draw_color(Color::RGBA(0, 0, 0, 255)); let dst = Some(Rect::new(0, 0, 400, 300)); canvas.clear(); - canvas - .copy_ex(&texture, - None, - dst, - angle, - Some(Point::new(400, 300)), - false, - false) - .unwrap(); + canvas.copy_ex(&texture, + None, + dst, + angle, + Some(Point::new(400, 300)), + false, + false + )?; canvas.present(); } + + Ok(()) } diff --git a/examples/renderer-texture.rs b/examples/renderer-texture.rs index 15559966..c6d69814 100644 --- a/examples/renderer-texture.rs +++ b/examples/renderer-texture.rs @@ -5,21 +5,21 @@ use sdl2::rect::Rect; use sdl2::event::Event; use sdl2::keyboard::Keycode; -pub fn main() { - let sdl_context = sdl2::init().unwrap(); - let video_subsystem = sdl_context.video().unwrap(); +pub fn main() -> Result<(), String> { + let sdl_context = sdl2::init()?; + let video_subsystem = sdl_context.video()?; let window = video_subsystem.window("rust-sdl2 demo: Video", 800, 600) .position_centered() .opengl() .build() - .unwrap(); + .map_err(|e| e.to_string())?; - let mut canvas = window.into_canvas().build().unwrap(); + let mut canvas = window.into_canvas().build().map_err(|e| e.to_string())?; let texture_creator = canvas.texture_creator(); - let mut texture = texture_creator.create_texture_streaming( - PixelFormatEnum::RGB24, 256, 256).unwrap(); + let mut texture = texture_creator.create_texture_streaming(PixelFormatEnum::RGB24, 256, 256) + .map_err(|e| e.to_string())?; // Create a red-green gradient texture.with_lock(None, |buffer: &mut [u8], pitch: usize| { for y in 0..256 { @@ -30,20 +30,20 @@ pub fn main() { buffer[offset + 2] = 0; } } - }).unwrap(); + })?; canvas.clear(); - canvas.copy(&texture, None, Some(Rect::new(100, 100, 256, 256))).unwrap(); + canvas.copy(&texture, None, Some(Rect::new(100, 100, 256, 256)))?; canvas.copy_ex(&texture, None, - Some(Rect::new(450, 100, 256, 256)), 30.0, None, false, false).unwrap(); + Some(Rect::new(450, 100, 256, 256)), 30.0, None, false, false)?; canvas.present(); - let mut event_pump = sdl_context.event_pump().unwrap(); + let mut event_pump = sdl_context.event_pump()?; 'running: loop { for event in event_pump.poll_iter() { match event { - Event::Quit {..} + Event::Quit {..} | Event::KeyDown { keycode: Some(Keycode::Escape), .. } => { break 'running }, @@ -52,4 +52,6 @@ pub fn main() { } // The rest of the game loop goes here... } + + Ok(()) } diff --git a/examples/renderer-yuv.rs b/examples/renderer-yuv.rs index 9ba10037..c7b7c34a 100644 --- a/examples/renderer-yuv.rs +++ b/examples/renderer-yuv.rs @@ -5,21 +5,21 @@ use sdl2::rect::Rect; use sdl2::event::Event; use sdl2::keyboard::Keycode; -pub fn main() { - let sdl_context = sdl2::init().unwrap(); - let video_subsystem = sdl_context.video().unwrap(); +pub fn main() -> Result<(), String> { + let sdl_context = sdl2::init()?; + let video_subsystem = sdl_context.video()?; let window = video_subsystem.window("rust-sdl2 demo: Video", 800, 600) .position_centered() .opengl() .build() - .unwrap(); + .map_err(|e| e.to_string())?; - let mut canvas = window.into_canvas().build().unwrap(); + let mut canvas = window.into_canvas().build().map_err(|e| e.to_string())?; let texture_creator = canvas.texture_creator(); - let mut texture = texture_creator.create_texture_streaming( - PixelFormatEnum::IYUV, 256, 256).unwrap(); + let mut texture = texture_creator.create_texture_streaming(PixelFormatEnum::IYUV, 256, 256) + .map_err(|e| e.to_string())?; // Create a U-V gradient texture.with_lock(None, |buffer: &mut [u8], pitch: usize| { // `pitch` is the width of the Y component @@ -47,13 +47,13 @@ pub fn main() { buffer[v_offset] = (y*2) as u8; } } - }).unwrap(); + })?; canvas.clear(); - canvas.copy(&texture, None, Some(Rect::new(100, 100, 256, 256))).unwrap(); + canvas.copy(&texture, None, Some(Rect::new(100, 100, 256, 256)))?; canvas.present(); - let mut event_pump = sdl_context.event_pump().unwrap(); + let mut event_pump = sdl_context.event_pump()?; 'running: loop { for event in event_pump.poll_iter() { @@ -66,4 +66,6 @@ pub fn main() { } // The rest of the game loop goes here... } + + Ok(()) } diff --git a/examples/resource-manager.rs b/examples/resource-manager.rs index 9fc63714..d4b627b4 100644 --- a/examples/resource-manager.rs +++ b/examples/resource-manager.rs @@ -13,7 +13,7 @@ use std::collections::HashMap; use std::hash::Hash; use std::rc::Rc; -fn main() { +fn main() -> Result<(), String> { let args: Vec<_> = env::args().collect(); if args.len() < 3 { @@ -22,16 +22,16 @@ fn main() { let image_path = &args[1]; let font_path = &args[2]; - let sdl_context = sdl2::init().unwrap(); - let video_subsystem = sdl_context.video().unwrap(); - let font_context = sdl2::ttf::init().unwrap(); - let _image_context = sdl2::image::init(InitFlag::PNG | InitFlag::JPG).unwrap(); + let sdl_context = sdl2::init()?; + let video_subsystem = sdl_context.video()?; + let font_context = sdl2::ttf::init().map_err(|e| e.to_string())?; + let _image_context = sdl2::image::init(InitFlag::PNG | InitFlag::JPG)?; let window = video_subsystem .window("rust-sdl2 resource-manager demo", 800, 600) .position_centered() .build() - .unwrap(); - let mut canvas = window.into_canvas().software().build().unwrap(); + .map_err(|e| e.to_string())?; + let mut canvas = window.into_canvas().software().build().map_err(|e| e.to_string())?; let texture_creator = canvas.texture_creator(); let mut texture_manager = TextureManager::new(&texture_creator); let mut font_manager = FontManager::new(&font_context); @@ -41,7 +41,7 @@ fn main() { }; 'mainloop: loop { - for event in sdl_context.event_pump().unwrap().poll_iter() { + for event in sdl_context.event_pump()?.poll_iter() { match event { Event::KeyDown { keycode: Some(Keycode::Escape), .. } | Event::Quit { .. } => break 'mainloop, @@ -49,25 +49,25 @@ fn main() { } } // will load the image texture + font only once - let texture = texture_manager.load(image_path).unwrap(); - let font = font_manager.load(&details).unwrap(); + let texture = texture_manager.load(image_path)?; + let font = font_manager.load(&details)?; // not recommended to create a texture from the font each iteration // but it is the simplest thing to do for this example let surface = font.render("Hello Rust!") - .blended(Color::RGBA(255, 0, 0, 255)) - .unwrap(); + .blended(Color::RGBA(255, 0, 0, 255)).map_err(|e| e.to_string())?; let font_texture = texture_creator - .create_texture_from_surface(&surface) - .unwrap(); + .create_texture_from_surface(&surface).map_err(|e| e.to_string())?; //draw all canvas.clear(); - canvas.copy(&texture, None, None).unwrap(); - canvas.copy(&font_texture, None, None).unwrap(); + canvas.copy(&texture, None, None)?; + canvas.copy(&font_texture, None, None)?; canvas.present(); } } + + Ok(()) } type TextureManager<'l, T> = ResourceManager<'l, String, Texture<'l>, TextureCreator>; diff --git a/examples/ttf-demo.rs b/examples/ttf-demo.rs index 5d200f8e..5b429eb0 100644 --- a/examples/ttf-demo.rs +++ b/examples/ttf-demo.rs @@ -43,28 +43,29 @@ fn get_centered_rect(rect_width: u32, rect_height: u32, cons_width: u32, cons_he rect!(cx, cy, w, h) } -fn run(font_path: &Path) { - let sdl_context = sdl2::init().unwrap(); - let video_subsys = sdl_context.video().unwrap(); - let ttf_context = sdl2::ttf::init().unwrap(); +fn run(font_path: &Path) -> Result<(), String> { + let sdl_context = sdl2::init()?; + let video_subsys = sdl_context.video()?; + let ttf_context = sdl2::ttf::init().map_err(|e| e.to_string())?; let window = video_subsys.window("SDL2_TTF Example", SCREEN_WIDTH, SCREEN_HEIGHT) .position_centered() .opengl() .build() - .unwrap(); + .map_err(|e| e.to_string())?; - let mut canvas = window.into_canvas().build().unwrap(); + let mut canvas = window.into_canvas().build().map_err(|e| e.to_string())?; let texture_creator = canvas.texture_creator(); // Load a font - let mut font = ttf_context.load_font(font_path, 128).unwrap(); + let mut font = ttf_context.load_font(font_path, 128)?; font.set_style(sdl2::ttf::FontStyle::BOLD); // render a surface, and convert it to a texture bound to the canvas let surface = font.render("Hello Rust!") - .blended(Color::RGBA(255, 0, 0, 255)).unwrap(); - let texture = texture_creator.create_texture_from_surface(&surface).unwrap(); + .blended(Color::RGBA(255, 0, 0, 255)).map_err(|e| e.to_string())?; + let texture = texture_creator.create_texture_from_surface(&surface) + .map_err(|e| e.to_string())?; canvas.set_draw_color(Color::RGBA(195, 217, 255, 255)); canvas.clear(); @@ -75,11 +76,11 @@ fn run(font_path: &Path) { let padding = 64; let target = get_centered_rect(width, height, SCREEN_WIDTH - padding, SCREEN_HEIGHT - padding); - canvas.copy(&texture, None, Some(target)).unwrap(); + canvas.copy(&texture, None, Some(target))?; canvas.present(); 'mainloop: loop { - for event in sdl_context.event_pump().unwrap().poll_iter() { + for event in sdl_context.event_pump()?.poll_iter() { match event { Event::KeyDown {keycode: Some(Keycode::Escape), ..} | Event::Quit {..} => break 'mainloop, @@ -87,9 +88,11 @@ fn run(font_path: &Path) { } } } + + Ok(()) } -fn main() { +fn main() -> Result<(), String> { let args: Vec<_> = env::args().collect(); println!("linked sdl2_ttf: {}", sdl2::ttf::get_linked_version()); @@ -98,6 +101,8 @@ fn main() { println!("Usage: ./demo font.[ttf|ttc|fon]") } else { let path: &Path = Path::new(&args[1]); - run(path); + run(path)?; } + + Ok(()) } diff --git a/examples/window-properties.rs b/examples/window-properties.rs index 4f5b9943..b69cccc7 100644 --- a/examples/window-properties.rs +++ b/examples/window-properties.rs @@ -4,21 +4,21 @@ use sdl2::pixels::Color; use sdl2::event::Event; use sdl2::keyboard::Keycode; -pub fn main() { - let sdl_context = sdl2::init().unwrap(); - let video_subsystem = sdl_context.video().unwrap(); +pub fn main() -> Result<(), String> { + let sdl_context = sdl2::init()?; + let video_subsystem = sdl_context.video()?; let window = video_subsystem .window("rust-sdl2 demo: Window", 800, 600) .resizable() .build() - .unwrap(); + .map_err(|e| e.to_string())?; - let mut canvas = window.into_canvas().present_vsync().build().unwrap(); + let mut canvas = window.into_canvas().present_vsync().build().map_err(|e| e.to_string())?; let mut tick = 0; - let mut event_pump = sdl_context.event_pump().unwrap(); + let mut event_pump = sdl_context.event_pump().map_err(|e| e.to_string())?; 'running: loop { for event in event_pump.poll_iter() { @@ -41,7 +41,7 @@ pub fn main() { size.0, size.1, tick); - window.set_title(&title).unwrap(); + window.set_title(&title).map_err(|e| e.to_string())?; tick += 1; } @@ -50,4 +50,6 @@ pub fn main() { canvas.clear(); canvas.present(); } + + Ok(()) }