aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md10
-rw-r--r--examples/cursor.rs33
-rw-r--r--examples/fullscreen.rs9
-rw-r--r--examples/grabbing.rs46
-rw-r--r--examples/multiwindow.rs7
-rw-r--r--examples/transparent.rs9
-rw-r--r--examples/vsync.rs48
-rw-r--r--examples/window.rs9
-rw-r--r--src/api/caca/mod.rs4
-rw-r--r--src/api/cocoa/mod.rs8
-rw-r--r--src/api/emscripten/mod.rs5
-rw-r--r--src/api/wayland/mod.rs5
-rw-r--r--src/api/win32/init.rs1
-rw-r--r--src/api/win32/mod.rs33
-rw-r--r--src/api/x11/window.rs8
-rw-r--r--src/platform/linux/api_dispatch.rs7
-rw-r--r--src/window.rs6
17 files changed, 72 insertions, 176 deletions
diff --git a/README.md b/README.md
index 8765f37..9ca5757 100644
--- a/README.md
+++ b/README.md
@@ -49,12 +49,14 @@ fn main() {
gl::ClearColor(0.0, 1.0, 0.0, 1.0);
}
- while !window.is_closed() {
- window.wait_events();
-
+ for event in window.wait_events() {
unsafe { gl::Clear(gl::COLOR_BUFFER_BIT) };
-
window.swap_buffers();
+
+ match event {
+ glutin::Event::Closed => break,
+ _ => ()
+ }
}
}
```
diff --git a/examples/cursor.rs b/examples/cursor.rs
index 8b0d818..d15deff 100644
--- a/examples/cursor.rs
+++ b/examples/cursor.rs
@@ -25,25 +25,22 @@ fn main() {
let cursors = [MouseCursor::Default, MouseCursor::Crosshair, MouseCursor::Hand, MouseCursor::Arrow, MouseCursor::Move, MouseCursor::Text, MouseCursor::Wait, MouseCursor::Help, MouseCursor::Progress, MouseCursor::NotAllowed, MouseCursor::ContextMenu, MouseCursor::NoneCursor, MouseCursor::Cell, MouseCursor::VerticalText, MouseCursor::Alias, MouseCursor::Copy, MouseCursor::NoDrop, MouseCursor::Grab, MouseCursor::Grabbing, MouseCursor::AllScroll, MouseCursor::ZoomIn, MouseCursor::ZoomOut, MouseCursor::EResize, MouseCursor::NResize, MouseCursor::NeResize, MouseCursor::NwResize, MouseCursor::SResize, MouseCursor::SeResize, MouseCursor::SwResize, MouseCursor::WResize, MouseCursor::EwResize, MouseCursor::NsResize, MouseCursor::NeswResize, MouseCursor::NwseResize, MouseCursor::ColResize, MouseCursor::RowResize];
let mut cursor_idx = 0;
- while !window.is_closed() {
+ for event in window.wait_events() {
+ match event {
+ Event::KeyboardInput(ElementState::Pressed, _, _) => {
+ println!("Setting cursor to \"{:?}\"", cursors[cursor_idx]);
+ window.set_cursor(cursors[cursor_idx]);
+ if cursor_idx < cursors.len() - 1 {
+ cursor_idx += 1;
+ } else {
+ cursor_idx = 0;
+ }
+ },
+ Event::Closed => break,
+ _ => (),
+ }
+
context.draw_frame((0.0, 1.0, 0.0, 1.0));
window.swap_buffers();
-
- for event in window.wait_events() {
- match event {
- Event::KeyboardInput(ElementState::Pressed, _, _) => {
- println!("Setting cursor to \"{:?}\"", cursors[cursor_idx]);
- window.set_cursor(cursors[cursor_idx]);
- if cursor_idx < cursors.len() - 1 {
- cursor_idx += 1;
- } else {
- cursor_idx = 0;
- }
- },
- _ => (),
- }
-
- }
-
}
}
diff --git a/examples/fullscreen.rs b/examples/fullscreen.rs
index 246a162..707fd7d 100644
--- a/examples/fullscreen.rs
+++ b/examples/fullscreen.rs
@@ -46,10 +46,15 @@ fn main() {
let context = support::load(&window);
- while !window.is_closed() {
+ for event in window.wait_events() {
context.draw_frame((0.0, 1.0, 0.0, 1.0));
window.swap_buffers();
- println!("{:?}", window.wait_events().next());
+ println!("{:?}", event);
+
+ match event {
+ glutin::Event::Closed => break,
+ _ => ()
+ }
}
}
diff --git a/examples/grabbing.rs b/examples/grabbing.rs
index 738a939..a0a8fda 100644
--- a/examples/grabbing.rs
+++ b/examples/grabbing.rs
@@ -23,33 +23,29 @@ fn main() {
let context = support::load(&window);
let mut grabbed = false;
- while !window.is_closed() {
+ for event in window.poll_events() {
+ match event {
+ Event::KeyboardInput(ElementState::Pressed, _, _) => {
+ if grabbed {
+ grabbed = false;
+ window.set_cursor_state(glutin::CursorState::Normal)
+ .ok().expect("could not ungrab mouse cursor");
+ } else {
+ grabbed = true;
+ window.set_cursor_state(glutin::CursorState::Grab)
+ .ok().expect("could not grab mouse cursor");
+ }
+ },
+
+ a @ Event::MouseMoved(_) => {
+ println!("{:?}", a);
+ },
+
+ _ => (),
+ }
+
context.draw_frame((0.0, 1.0, 0.0, 1.0));
window.swap_buffers();
-
- for event in window.poll_events() {
- match event {
- Event::KeyboardInput(ElementState::Pressed, _, _) => {
- if grabbed {
- grabbed = false;
- window.set_cursor_state(glutin::CursorState::Normal)
- .ok().expect("could not ungrab mouse cursor");
- } else {
- grabbed = true;
- window.set_cursor_state(glutin::CursorState::Grab)
- .ok().expect("could not grab mouse cursor");
- }
- },
-
- a @ Event::MouseMoved(_) => {
- println!("{:?}", a);
- },
-
- _ => (),
- }
-
- }
-
}
}
diff --git a/examples/multiwindow.rs b/examples/multiwindow.rs
index 503e0a0..074fe14 100644
--- a/examples/multiwindow.rs
+++ b/examples/multiwindow.rs
@@ -43,10 +43,13 @@ fn run(window: glutin::Window, color: (f32, f32, f32, f32)) {
let context = support::load(&window);
- while !window.is_closed() {
+ for event in window.wait_events() {
context.draw_frame(color);
window.swap_buffers();
- window.wait_events().next();
+ match event {
+ glutin::Event::Closed => break,
+ _ => ()
+ }
}
}
diff --git a/examples/transparent.rs b/examples/transparent.rs
index 01c084a..fa6a8de 100644
--- a/examples/transparent.rs
+++ b/examples/transparent.rs
@@ -31,10 +31,15 @@ fn main() {
let context = support::load(&window);
- while !window.is_closed() {
+ for event in window.wait_events() {
context.draw_frame((0.0, 0.0, 0.0, 0.0));
window.swap_buffers();
- println!("{:?}", window.wait_events().next());
+ println!("{:?}", event);
+
+ match event {
+ glutin::Event::Closed => break,
+ _ => ()
+ }
}
}
diff --git a/examples/vsync.rs b/examples/vsync.rs
deleted file mode 100644
index 4ae2598..0000000
--- a/examples/vsync.rs
+++ /dev/null
@@ -1,48 +0,0 @@
-#[cfg(target_os = "android")]
-#[macro_use]
-extern crate android_glue;
-
-extern crate clock_ticks;
-extern crate glutin;
-
-mod support;
-
-#[cfg(target_os = "android")]
-android_start!(main);
-
-#[cfg(not(feature = "window"))]
-fn main() { println!("This example requires glutin to be compiled with the `window` feature"); }
-
-#[cfg(feature = "window")]
-fn resize_callback(width: u32, height: u32) {
- println!("Window resized to {}x{}", width, height);
-}
-
-#[cfg(feature = "window")]
-fn main() {
- println!("Vsync example. This example may panic if your driver or your system forces \
- you out of vsync. This is intended when `build_strict` is used.");
-
- let mut window = glutin::WindowBuilder::new().with_gl_profile(glutin::GlProfile::Compatibility)
- .with_vsync()
- .build_strict().unwrap();
- window.set_window_resize_callback(Some(resize_callback as fn(u32, u32)));
- unsafe { window.make_current() };
-
- let context = support::load(&window);
-
- while !window.is_closed() {
- let before = clock_ticks::precise_time_ns();
-
- context.draw_frame((0.0, 1.0, 0.0, 1.0));
- window.swap_buffers();
-
- for ev in window.poll_events() {
- println!("{:?}", ev);
- }
-
- let after = clock_ticks::precise_time_ns();
- println!("Vsync example - Time of previous frame: {}ms",
- (after - before) as f32 / 1000000.0);
- }
-}
diff --git a/examples/window.rs b/examples/window.rs
index d4e1a8d..f686a51 100644
--- a/examples/window.rs
+++ b/examples/window.rs
@@ -28,10 +28,15 @@ fn main() {
let context = support::load(&window);
- while !window.is_closed() {
+ for event in window.wait_events() {
context.draw_frame((0.0, 1.0, 0.0, 1.0));
window.swap_buffers();
- println!("{:?}", window.wait_events().next());
+ println!("{:?}", event);
+
+ match event {
+ glutin::Event::Closed => break,
+ _ => ()
+ }
}
}
diff --git a/src/api/caca/mod.rs b/src/api/caca/mod.rs
index 06a6931..953ce7d 100644
--- a/src/api/caca/mod.rs
+++ b/src/api/caca/mod.rs
@@ -129,10 +129,6 @@ impl Window {
})
}
- pub fn is_closed(&self) -> bool {
- false
- }
-
pub fn set_title(&self, title: &str) {
}
diff --git a/src/api/cocoa/mod.rs b/src/api/cocoa/mod.rs
index ba5710d..de24c2b 100644
--- a/src/api/cocoa/mod.rs
+++ b/src/api/cocoa/mod.rs
@@ -59,7 +59,6 @@ static mut win_pressed: bool = false;
static mut alt_pressed: bool = false;
struct DelegateState {
- is_closed: bool,
context: IdRef,
view: IdRef,
window: IdRef,
@@ -83,8 +82,6 @@ impl WindowDelegate {
unsafe {
let state: *mut libc::c_void = *this.get_ivar("glutinState");
let state = state as *mut DelegateState;
- (*state).is_closed = true;
-
(*state).pending_events.lock().unwrap().push_back(Closed);
}
YES
@@ -366,7 +363,6 @@ impl Window {
}
let ds = DelegateState {
- is_closed: false,
context: context.clone(),
view: view.clone(),
window: window.clone(),
@@ -588,10 +584,6 @@ impl Window {
}
}
- pub fn is_closed(&self) -> bool {
- self.delegate.state.is_closed
- }
-
pub fn set_title(&self, title: &str) {
unsafe {
let title = IdRef::new(NSString::alloc(nil).init_str(title));
diff --git a/src/api/emscripten/mod.rs b/src/api/emscripten/mod.rs
index 48b31a9..9d4bb56 100644
--- a/src/api/emscripten/mod.rs
+++ b/src/api/emscripten/mod.rs
@@ -108,11 +108,6 @@ impl Window {
})
}
- pub fn is_closed(&self) -> bool {
- use std::ptr;
- unsafe { ffi::emscripten_is_webgl_context_lost(ptr::null()) != 0 }
- }
-
pub fn set_title(&self, _title: &str) {
}
diff --git a/src/api/wayland/mod.rs b/src/api/wayland/mod.rs
index b9bfa18..95996ca 100644
--- a/src/api/wayland/mod.rs
+++ b/src/api/wayland/mod.rs
@@ -184,11 +184,6 @@ impl Window {
})
}
- pub fn is_closed(&self) -> bool {
- // TODO
- false
- }
-
pub fn set_title(&self, title: &str) {
let ctitle = CString::new(title).unwrap();
self.shell_surface.set_title(&ctitle);
diff --git a/src/api/win32/init.rs b/src/api/win32/init.rs
index f46c395..7cb5433 100644
--- a/src/api/win32/init.rs
+++ b/src/api/win32/init.rs
@@ -257,7 +257,6 @@ unsafe fn init(title: Vec<u16>, builder: BuilderAttribs<'static>,
window: real_window,
context: context,
events_receiver: events_receiver,
- is_closed: AtomicBool::new(false),
cursor_state: cursor_state,
})
}
diff --git a/src/api/win32/mod.rs b/src/api/win32/mod.rs
index af339c5..5b0339a 100644
--- a/src/api/win32/mod.rs
+++ b/src/api/win32/mod.rs
@@ -47,9 +47,6 @@ pub struct Window {
/// Receiver for the events dispatched by the window callback.
events_receiver: Receiver<Event>,
- /// True if a `Closed` event has been received.
- is_closed: AtomicBool,
-
/// The current cursor state.
cursor_state: Arc<Mutex<CursorState>>,
}
@@ -98,12 +95,6 @@ impl Window {
}
/// See the docs in the crate root file.
- pub fn is_closed(&self) -> bool {
- use std::sync::atomic::Ordering::Relaxed;
- self.is_closed.load(Relaxed)
- }
-
- /// See the docs in the crate root file.
///
/// Calls SetWindowText on the HWND.
pub fn set_title(&self, text: &str) {
@@ -366,17 +357,7 @@ impl<'a> Iterator for PollEventsIterator<'a> {
type Item = Event;
fn next(&mut self) -> Option<Event> {
- use events::Event::Closed;
-
- match self.window.events_receiver.try_recv() {
- Ok(Closed) => {
- use std::sync::atomic::Ordering::Relaxed;
- self.window.is_closed.store(true, Relaxed);
- Some(Closed)
- },
- Ok(ev) => Some(ev),
- Err(_) => None
- }
+ self.window.events_receiver.try_recv().ok()
}
}
@@ -388,17 +369,7 @@ impl<'a> Iterator for WaitEventsIterator<'a> {
type Item = Event;
fn next(&mut self) -> Option<Event> {
- use events::Event::Closed;
-
- match self.window.events_receiver.recv() {
- Ok(Closed) => {
- use std::sync::atomic::Ordering::Relaxed;
- self.window.is_closed.store(true, Relaxed);
- Some(Closed)
- },
- Ok(ev) => Some(ev),
- Err(_) => None
- }
+ self.window.events_receiver.recv().ok()
}
}
diff --git a/src/api/x11/window.rs b/src/api/x11/window.rs
index ba0fe52..41b74f5 100644
--- a/src/api/x11/window.rs
+++ b/src/api/x11/window.rs
@@ -263,9 +263,10 @@ impl<'a> Iterator for WaitEventsIterator<'a> {
type Item = Event;
fn next(&mut self) -> Option<Event> {
+ use std::sync::atomic::Ordering::Relaxed;
use std::mem;
- while !self.window.is_closed() {
+ while !self.window.is_closed.load(Relaxed) {
if let Some(ev) = self.window.pending_events.lock().unwrap().pop_front() {
return Some(ev);
}
@@ -596,11 +597,6 @@ impl Window {
Ok(window)
}
- pub fn is_closed(&self) -> bool {
- use std::sync::atomic::Ordering::Relaxed;
- self.is_closed.load(Relaxed)
- }
-
pub fn set_title(&self, title: &str) {
with_c_str(title, |title| unsafe {
(self.x.display.xlib.XStoreName)(self.x.display.display, self.x.window, title);
diff --git a/src/platform/linux/api_dispatch.rs b/src/platform/linux/api_dispatch.rs
index d04a1fb..795b89f 100644
--- a/src/platform/linux/api_dispatch.rs
+++ b/src/platform/linux/api_dispatch.rs
@@ -154,13 +154,6 @@ impl Window {
}
}
- pub fn is_closed(&self) -> bool {
- match self {
- &Window::X(ref w) => w.is_closed(),
- &Window::Wayland(ref w) => w.is_closed()
- }
- }
-
pub fn set_title(&self, title: &str) {
match self {
&Window::X(ref w) => w.set_title(title),
diff --git a/src/window.rs b/src/window.rs
index 578c237..b42a16f 100644
--- a/src/window.rs
+++ b/src/window.rs
@@ -224,12 +224,6 @@ impl Window {
builder.build()
}
- /// Returns true if the window has previously been closed by the user.
- #[inline]
- pub fn is_closed(&self) -> bool {
- self.window.is_closed()
- }
-
/// Modifies the title of the window.
///
/// This is a no-op if the window has already been closed.