Replaced all calls to unwrap() in examples with either the ? operator or expect

This commit is contained in:
Sunjay Varma
2019-01-13 22:49:05 +01:00
committed by Cobrand
parent 279f6a6500
commit 37cf5f76ac
27 changed files with 404 additions and 388 deletions
+15 -12
View File
@@ -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(())
}
+19 -13
View File
@@ -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<i16> {
fn record(audio_subsystem: &AudioSubsystem, desired_spec: &AudioSpecDesired) -> Result<Vec<i16>, 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<i16>) {
fn replay_recorded_vec(audio_subsystem: &AudioSubsystem, desired_spec: &AudioSpecDesired, recorded_vec: Vec<i16>) -> 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(())
}
+11 -9
View File
@@ -13,20 +13,20 @@ fn gen_wave(bytes_to_write: i32) -> Vec<i16> {
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::<i16, _>(None, &desired_spec).unwrap();
let device = audio_subsystem.open_queue::<i16, _>(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(())
}
+6 -4
View File
@@ -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(())
}
+6 -4
View File
@@ -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(())
}
+6 -4
View File
@@ -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(())
}
+18 -20
View File
@@ -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(())
}
+8 -6
View File
@@ -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(())
}
+28 -36
View File
@@ -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(())
}
+29 -23
View File
@@ -126,15 +126,13 @@ mod game_of_life {
}
#[cfg(feature = "unsafe_textures")]
fn dummy_texture<'a>(canvas: &mut Canvas<Window>) -> (Texture, Texture) {
fn dummy_texture<'a>(canvas: &mut Canvas<Window>) -> 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<Window>) -> (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<Window>) -> (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<Window>) -> (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"))]
+29 -22
View File
@@ -115,15 +115,13 @@ mod game_of_life {
}
}
fn dummy_texture<'a>(canvas: &mut Canvas<Window>, texture_creator: &'a TextureCreator<WindowContext>) -> (Texture<'a>, Texture<'a>) {
fn dummy_texture<'a>(canvas: &mut Canvas<Window>, texture_creator: &'a TextureCreator<WindowContext>) -> 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<Window>, 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<Window>, 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<Window>, 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(())
}
+9 -8
View File
@@ -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(())
}
+22 -29
View File
@@ -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(())
}
+15 -14
View File
@@ -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(())
}
+22 -31
View File
@@ -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(())
}
+7 -5
View File
@@ -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(())
}
+13 -18
View File
@@ -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(())
}
+24 -30
View File
@@ -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(())
}
+7 -5
View File
@@ -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(())
}
+14 -12
View File
@@ -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(())
}

Some files were not shown because too many files have changed in this diff Show More