mirror of
https://github.com/encounter/rust-sdl2.git
synced 2026-07-10 21:18:41 -07:00
Replaced all calls to unwrap() in examples with either the ? operator or expect
This commit is contained in:
+15
-12
@@ -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(())
|
||||
}
|
||||
|
||||
@@ -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(())
|
||||
}
|
||||
|
||||
@@ -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(())
|
||||
}
|
||||
|
||||
@@ -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(())
|
||||
}
|
||||
|
||||
@@ -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(())
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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(())
|
||||
}
|
||||
|
||||
@@ -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
@@ -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,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
@@ -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
@@ -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
@@ -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(())
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
@@ -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(())
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
Reference in New Issue
Block a user