mirror of
https://github.com/italicsjenga/winit-sonoma-fix.git
synced 2024-12-23 22:01:31 +11:00
Add a WindowBuilder::with_window_resize_callback
method.
This allows for passing the window_resize_callback fn during the window building stage. More importantly, this allows setting the callback without the need for mutable access to the Window, making it possible to set the callback in the downstream glium crate. This may solve tomaka/glium#1232 for most folk.
This commit is contained in:
parent
97da37ef04
commit
eb18b3d8b6
|
@ -12,9 +12,11 @@ fn resize_callback(width: u32, height: u32) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let mut window = winit::WindowBuilder::new().build().unwrap();
|
let window = winit::WindowBuilder::new()
|
||||||
window.set_title("A fantastic window!");
|
.with_title("A fantastic window!")
|
||||||
window.set_window_resize_callback(Some(resize_callback as fn(u32, u32)));
|
.with_window_resize_callback(resize_callback)
|
||||||
|
.build()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
for event in window.wait_events() {
|
for event in window.wait_events() {
|
||||||
println!("{:?}", event);
|
println!("{:?}", event);
|
||||||
|
|
|
@ -107,6 +107,10 @@ pub struct WindowBuilder {
|
||||||
|
|
||||||
/// Platform-specific configuration.
|
/// Platform-specific configuration.
|
||||||
platform_specific: platform::PlatformSpecificWindowBuilderAttributes,
|
platform_specific: platform::PlatformSpecificWindowBuilderAttributes,
|
||||||
|
|
||||||
|
/// A function called upon resizing, necessary to receive resize events on Mac and possibly
|
||||||
|
/// other systems.
|
||||||
|
window_resize_callback: Option<fn(u32, u32)>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Error that can happen while creating a window or a headless renderer.
|
/// Error that can happen while creating a window or a headless renderer.
|
||||||
|
|
|
@ -18,6 +18,7 @@ impl WindowBuilder {
|
||||||
WindowBuilder {
|
WindowBuilder {
|
||||||
window: Default::default(),
|
window: Default::default(),
|
||||||
platform_specific: Default::default(),
|
platform_specific: Default::default(),
|
||||||
|
window_resize_callback: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,6 +94,15 @@ impl WindowBuilder {
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Provides a resize callback that is called by Mac (and potentially other
|
||||||
|
/// operating systems) during resize operations. This can be used to repaint
|
||||||
|
/// during window resizing.
|
||||||
|
#[inline]
|
||||||
|
pub fn with_window_resize_callback(mut self, cb: fn(u32, u32)) -> WindowBuilder {
|
||||||
|
self.window_resize_callback = Some(cb);
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
/// Builds the window.
|
/// Builds the window.
|
||||||
///
|
///
|
||||||
/// Error should be very rare and only occur in case of permission denied, incompatible system,
|
/// Error should be very rare and only occur in case of permission denied, incompatible system,
|
||||||
|
@ -109,7 +119,14 @@ impl WindowBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
// building
|
// building
|
||||||
platform::Window::new(&self.window, &self.platform_specific).map(|w| Window { window: w })
|
let mut w = try!(platform::Window::new(&self.window, &self.platform_specific));
|
||||||
|
|
||||||
|
// a window resize callback was given
|
||||||
|
if let Some(callback) = self.window_resize_callback {
|
||||||
|
w.set_window_resize_callback(Some(callback));
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(Window { window: w })
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Builds the window.
|
/// Builds the window.
|
||||||
|
|
Loading…
Reference in a new issue