diff --git a/Cargo.toml b/Cargo.toml index 02eb93ec..16221eb6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,7 +26,7 @@ objc = "0.2" [target.'cfg(target_os = "macos")'.dependencies] objc = "0.2" cgl = "0.1" -cocoa = "0.5.0" +cocoa = "0.5.1" core-foundation = "0" core-graphics = "0.4" diff --git a/src/platform/macos/mod.rs b/src/platform/macos/mod.rs index 2ed0e895..68d2a35a 100644 --- a/src/platform/macos/mod.rs +++ b/src/platform/macos/mod.rs @@ -13,8 +13,8 @@ use objc::declare::ClassDecl; use cocoa::base::{id, nil}; use cocoa::foundation::{NSAutoreleasePool, NSDate, NSDefaultRunLoopMode, NSPoint, NSRect, NSSize, - NSString, NSUInteger}; -use cocoa::appkit::{self, NSApplication, NSEvent, NSView, NSWindow}; + NSString, NSUInteger, NSArray}; +use cocoa::appkit::{self, NSApplication, NSEvent, NSView, NSWindow, NSLayoutConstraint, NSLayoutDimension}; use core_graphics::display::{CGAssociateMouseAndMouseCursorPosition, CGMainDisplayID, CGDisplayPixelsHigh, CGWarpMouseCursorPosition}; @@ -269,10 +269,6 @@ impl Window { pl_attribs: &PlatformSpecificWindowBuilderAttributes) -> Result<Window, CreationError> { - // not implemented - assert!(win_attribs.min_dimensions.is_none()); - assert!(win_attribs.max_dimensions.is_none()); - // let app = match Window::create_app() { let app = match Window::create_app(pl_attribs.activation_policy) { Some(app) => app, @@ -300,6 +296,24 @@ impl Window { } else { window.makeKeyWindow(); } + + let mut constraints = vec![]; + if let Some((width, height)) = win_attribs.min_dimensions { + constraints.extend_from_slice(&[ + view.widthAnchor().constraintGreaterThanOrEqualToConstant(width.into()), + view.heightAnchor().constraintGreaterThanOrEqualToConstant(height.into()), + ]); + } + if let Some((width, height)) = win_attribs.max_dimensions { + constraints.extend_from_slice(&[ + view.widthAnchor().constraintLessThanOrEqualToConstant(width.into()), + view.heightAnchor().constraintLessThanOrEqualToConstant(height.into()), + ]); + } + if !constraints.is_empty() { + let constraints_nsarray = NSArray::arrayWithObjects(nil, &constraints); + NSLayoutConstraint::activateConstraints(nil, constraints_nsarray); + } } let ds = DelegateState {