diff --git a/CHANGELOG.md b/CHANGELOG.md index 4502d959f29..1dd54ffe742 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,8 @@ - On X11, `Window::hidpi_factor` returns values from XRandR rather than the inaccurate values previously queried from the core protocol. - On X11, the primary monitor is detected correctly even when using versions of XRandR less than 1.5. - `MonitorId` now implements `Debug`. +- Added `WindowBuilderExt::with_resize_increments` to macOS. +- **Breaking:** On X11, `WindowBuilderExt::with_resize_increments` and `WindowBuilderExt::with_base_size` on now take `u32` values rather than `i32`. # Version 0.14.0 (2018-05-09) diff --git a/src/os/macos.rs b/src/os/macos.rs index 19c6331a25a..6f57e90a18b 100644 --- a/src/os/macos.rs +++ b/src/os/macos.rs @@ -78,6 +78,8 @@ pub trait WindowBuilderExt { fn with_titlebar_hidden(self, titlebar_hidden: bool) -> WindowBuilder; fn with_titlebar_buttons_hidden(self, titlebar_buttons_hidden: bool) -> WindowBuilder; fn with_fullsize_content_view(self, fullsize_content_view: bool) -> WindowBuilder; + /// Build window with `resizeIncrements` property. + fn with_resize_increments(self, width_inc: u32, height_inc: u32) -> WindowBuilder; } impl WindowBuilderExt for WindowBuilder { @@ -129,6 +131,12 @@ impl WindowBuilderExt for WindowBuilder { self.platform_specific.fullsize_content_view = fullsize_content_view; self } + + #[inline] + fn with_resize_increments(mut self, width_inc: u32, height_inc: u32) -> WindowBuilder { + self.platform_specific.resize_increments = Some((width_inc, height_inc)); + self + } } /// Additional methods on `MonitorId` that are specific to MacOS. diff --git a/src/os/unix.rs b/src/os/unix.rs index 2013c654256..a4a8faf3514 100644 --- a/src/os/unix.rs +++ b/src/os/unix.rs @@ -220,13 +220,13 @@ impl WindowBuilderExt for WindowBuilder { } #[inline] - fn with_resize_increments(mut self, width_inc: i32, height_inc: i32) -> WindowBuilder { + fn with_resize_increments(mut self, width_inc: u32, height_inc: u32) -> WindowBuilder { self.platform_specific.resize_increments = Some((width_inc, height_inc)); self } #[inline] - fn with_base_size(mut self, base_width: i32, base_height: i32) -> WindowBuilder { + fn with_base_size(mut self, base_width: u32, base_height: u32) -> WindowBuilder { self.platform_specific.base_size = Some((base_width, base_height)); self } diff --git a/src/platform/linux/mod.rs b/src/platform/linux/mod.rs index 1e77133719d..fb72894ff89 100644 --- a/src/platform/linux/mod.rs +++ b/src/platform/linux/mod.rs @@ -42,8 +42,8 @@ const BACKEND_PREFERENCE_ENV_VAR: &str = "WINIT_UNIX_BACKEND"; pub struct PlatformSpecificWindowBuilderAttributes { pub visual_infos: Option, pub screen_id: Option, - pub resize_increments: Option<(i32, i32)>, - pub base_size: Option<(i32, i32)>, + pub resize_increments: Option<(u32, u32)>, + pub base_size: Option<(u32, u32)>, } lazy_static!( diff --git a/src/platform/macos/window.rs b/src/platform/macos/window.rs index 1a1c168ef32..b62417fecd6 100644 --- a/src/platform/macos/window.rs +++ b/src/platform/macos/window.rs @@ -488,6 +488,7 @@ pub struct PlatformSpecificWindowBuilderAttributes { pub titlebar_hidden: bool, pub titlebar_buttons_hidden: bool, pub fullsize_content_view: bool, + pub resize_increments: Option<(u32, u32)>, } pub struct Window2 { @@ -777,6 +778,13 @@ impl Window2 { if pl_attrs.movable_by_window_background { window.setMovableByWindowBackground_(YES); } + + if let Some((x, y)) = pl_attrs.resize_increments { + if x >= 1 && y >= 1 { + let size = NSSize::new(x as _, y as _); + window.setResizeIncrements_(size); + } + } if !attrs.decorations { window.setTitleVisibility_(appkit::NSWindowTitleVisibility::NSWindowTitleHidden);