Skip to content

Commit a58cfcb

Browse files
Make {Window, RenderWindow}::new() return Self instead of Option<Self>
The only times window creation can return null is on allocation failure. At any other time, SFML terminates before we can do anything with the window.
1 parent 8e72885 commit a58cfcb

14 files changed

+21
-44
lines changed

examples/borrowed-resources.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ fn main() {
99
let mut window = RenderWindow::new(VideoMode::new(800, 600, 32),
1010
"Borrowed resources",
1111
style::CLOSE,
12-
&Default::default())
13-
.unwrap();
12+
&Default::default());
1413
window.set_vertical_sync_enabled(true);
1514

1615
// Create a new texture. (Hey Frank!)

examples/custom-drawable.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,7 @@ fn main() {
4444
let mut window = RenderWindow::new(VideoMode::new(800, 600, 32),
4545
"Custom drawable",
4646
style::CLOSE,
47-
&Default::default())
48-
.unwrap();
47+
&Default::default());
4948
window.set_vertical_sync_enabled(true);
5049

5150
let bullet = Bullet::new();

examples/custom-shape.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@ fn main() {
2626
let mut window = RenderWindow::new(VideoMode::new(800, 600, 32),
2727
"Custom shape",
2828
style::CLOSE,
29-
&Default::default())
30-
.unwrap();
29+
&Default::default());
3130
window.set_vertical_sync_enabled(true);
3231

3332
let mut shape = CustomShape::new(Box::new(TriangleShape));

examples/mouse.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@ fn main() {
88
let mut window = RenderWindow::new(VideoMode::new(800, 600, 32),
99
"Mouse events",
1010
style::CLOSE,
11-
&Default::default())
12-
.unwrap();
11+
&Default::default());
1312
window.set_mouse_cursor_visible(false);
1413
window.set_framerate_limit(60);
1514

examples/pong.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,7 @@ fn main() {
3131
let mut window = RenderWindow::new(VideoMode::new(game_width, game_height, 32),
3232
"SFML Pong",
3333
style::CLOSE,
34-
&context_settings)
35-
.unwrap();
34+
&context_settings);
3635
window.set_vertical_sync_enabled(true);
3736

3837
// Load the sounds used in the game

examples/shader.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -238,8 +238,7 @@ fn main() {
238238
let mut window = RenderWindow::new(VideoMode::new(800, 600, 32),
239239
"SFML Shader",
240240
style::TITLEBAR | style::CLOSE,
241-
&Default::default())
242-
.unwrap();
241+
&Default::default());
243242
window.set_vertical_sync_enabled(true);
244243
let font = Font::from_file("resources/sansation.ttf").unwrap();
245244
let bg = Texture::from_file("resources/background.jpg").unwrap();

examples/unicode-text-entry.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ fn main() {
77
let mut window = RenderWindow::new(VideoMode::new(800, 600, 32),
88
"◢◤ Unicode text entry ◥◣",
99
style::CLOSE,
10-
&Default::default())
11-
.unwrap();
10+
&Default::default());
1211

1312
let font = Font::from_file("resources/sansation.ttf").unwrap();
1413
let mut string = String::from("This text can be edited.\nTry it!");

examples/vertex-arrays.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@ fn main() {
88
let mut window = RenderWindow::new(VideoMode::new(800, 600, 32),
99
"SFML VertexArray accessors Example",
1010
style::CLOSE,
11-
&Default::default())
12-
.unwrap();
11+
&Default::default());
1312
window.set_vertical_sync_enabled(true);
1413

1514
let mut vertex_array = VertexArray::new();

src/graphics/render_window.rs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,11 @@ impl RenderWindow {
4545
/// * title - Title of the render window
4646
/// * style - Window style
4747
/// * settings - Additional settings for the underlying OpenGL context
48-
///
49-
/// Return Some(RenderWindow) or None
5048
pub fn new(mode: VideoMode,
5149
title: &str,
5250
style: Style,
5351
settings: &ContextSettings)
54-
-> Option<RenderWindow> {
52+
-> RenderWindow {
5553
let utf32 = ::unicode_conv::str_to_csfml(title);
5654
let sf_render_win: *mut ffi::sfRenderWindow =
5755
unsafe {
@@ -60,11 +58,8 @@ impl RenderWindow {
6058
style.bits(),
6159
&settings.raw())
6260
};
63-
if sf_render_win.is_null() {
64-
None
65-
} else {
66-
Some(RenderWindow { render_window: sf_render_win })
67-
}
61+
assert!(!sf_render_win.is_null(), "Failed to create RenderWindow");
62+
RenderWindow { render_window: sf_render_win }
6863
}
6964

7065
/// Change a render window's icon

src/lib.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
//!
1717
//! Here is a short example, draw a circle shape and display it.
1818
//!
19-
//! ```ignore
19+
//! ```no_run
2020
//! extern crate sfml;
2121
//!
2222
//! use sfml::system::Vector2f;
@@ -28,8 +28,7 @@
2828
//! let mut window = RenderWindow::new(VideoMode::new(800, 600, 32),
2929
//! "SFML Example",
3030
//! style::CLOSE,
31-
//! &ContextSettings::default())
32-
//! .unwrap();
31+
//! &ContextSettings::default());
3332
//!
3433
//! // Create a CircleShape
3534
//! let mut circle = CircleShape::new();
@@ -50,7 +49,7 @@
5049
//! // Draw the shape
5150
//! window.draw(&circle);
5251
//! // Display things on screen
53-
//! window.display()
52+
//! window.display();
5453
//! }
5554
//! }
5655
//!

src/window/context.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ fn test_settings() {
6464
use std::thread;
6565
let video_mode = VideoMode::new(32, 32, 32);
6666

67-
let window = Window::new(video_mode, "test", Default::default(), &Default::default()).unwrap();
67+
let window = Window::new(video_mode, "test", Default::default(), &Default::default());
6868
let win_settings = window.settings();
6969
thread::spawn(move || {
7070
let context = Context::new();

src/window/event.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use window::joystick::Axis;
2020
/// # let mut window = Window::new(VideoMode::new(32, 32, 32),
2121
/// # "test",
2222
/// # style::CLOSE,
23-
/// # &Default::default()).unwrap();
23+
/// # &Default::default());
2424
/// # fn do_something_with_the_new_size(_x: u32, _y: u32) {}
2525
/// while let Some(event) = window.poll_event() {
2626
/// match event {

src/window/video_mode.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ use ext::sf_bool_ext::SfBoolExt;
4040
/// let _window = Window::new(VideoMode::new(1024, 768, desktop.bits_per_pixel),
4141
/// "SFML window",
4242
/// style::CLOSE,
43-
/// &Default::default()).unwrap();
43+
/// &Default::default());
4444
/// ```
4545
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Debug, Copy)]
4646
pub struct VideoMode {

src/window/window.rs

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ use ext;
3232
/// let mut window = Window::new(VideoMode::new(800, 600, 32),
3333
/// "SFML window",
3434
/// style::CLOSE,
35-
/// &Default::default()).unwrap();
35+
/// &Default::default());
3636
/// // Limit the framerate to 60 frames per second (this step is optional)
3737
/// window.set_framerate_limit(60);
3838
///
@@ -84,25 +84,16 @@ impl Window {
8484
/// * title - Title of the window
8585
/// * style - Window style
8686
/// * settings - Additional settings for the underlying OpenGL context
87-
///
88-
/// Return Some(Window) or None
89-
pub fn new(mode: VideoMode,
90-
title: &str,
91-
style: Style,
92-
settings: &ContextSettings)
93-
-> Option<Window> {
87+
pub fn new(mode: VideoMode, title: &str, style: Style, settings: &ContextSettings) -> Window {
9488
let utf32 = ::unicode_conv::str_to_csfml(title);
9589
let sf_win: *mut ffi::sfWindow = unsafe {
9690
ffi::sfWindow_createUnicode(mode.raw(),
9791
utf32.as_ptr() as _,
9892
style.bits(),
9993
&settings.raw())
10094
};
101-
if sf_win.is_null() {
102-
None
103-
} else {
104-
Some(Window { window: sf_win })
105-
}
95+
assert!(!sf_win.is_null(), "Failed to create Window");
96+
Window { window: sf_win }
10697
}
10798

10899
/// Return an iterator over all the event currently in the events queue.

0 commit comments

Comments
 (0)