Index: ui/gfx/mac/nswindow_frame_controls.mm |
diff --git a/ui/gfx/mac/nswindow_frame_controls.mm b/ui/gfx/mac/nswindow_frame_controls.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..34f7d266516c823bc53ea6f612eee9dc22446057 |
--- /dev/null |
+++ b/ui/gfx/mac/nswindow_frame_controls.mm |
@@ -0,0 +1,63 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#import "ui/gfx/mac/nswindow_frame_controls.h" |
+ |
+#import "base/mac/mac_util.h" |
+#import "base/mac/sdk_forward_declarations.h" |
+#include "ui/gfx/geometry/size.h" |
+ |
+namespace { |
+ |
+// The value used to represent an unbounded width or height. |
+const int kUnboundedSize = 0; |
+ |
+void SetResizableStyleMask(NSWindow* window, bool resizable) { |
+ NSUInteger style_mask = [window styleMask]; |
+ if (resizable) |
+ style_mask |= NSResizableWindowMask; |
+ else |
+ style_mask &= ~NSResizableWindowMask; |
+ [window setStyleMask:style_mask]; |
+} |
+ |
+} // namespace |
+ |
+namespace gfx { |
+ |
+void SetNSWindowCanFullscreen(NSWindow* window, bool allow_fullscreen) { |
+ NSWindowCollectionBehavior behavior = [window collectionBehavior]; |
+ if (allow_fullscreen) |
+ behavior |= NSWindowCollectionBehaviorFullScreenPrimary; |
+ else |
+ behavior &= ~NSWindowCollectionBehaviorFullScreenPrimary; |
+ [window setCollectionBehavior:behavior]; |
+} |
+ |
+void ApplyNSWindowSizeConstraints(NSWindow* window, |
+ const gfx::Size& min_size, |
+ const gfx::Size& max_size, |
+ bool can_resize, |
+ bool can_fullscreen) { |
+ [window setContentMinSize:NSMakeSize(min_size.width(), min_size.height())]; |
+ |
+ CGFloat max_width = |
+ max_size.width() == kUnboundedSize ? CGFLOAT_MAX : max_size.width(); |
+ CGFloat max_height = |
+ max_size.height() == kUnboundedSize ? CGFLOAT_MAX : max_size.height(); |
+ [window setContentMaxSize:NSMakeSize(max_width, max_height)]; |
+ |
+ SetResizableStyleMask(window, can_resize); |
+ [window setShowsResizeIndicator:can_resize]; |
+ |
+ // Set the window to participate in Lion Fullscreen mode. Setting this flag |
+ // has no effect on Snow Leopard or earlier. UI controls for fullscreen are |
+ // only shown for windows that have unbounded size. |
+ if (base::mac::IsOSLionOrLater()) |
+ SetNSWindowCanFullscreen(window, can_fullscreen); |
+ |
+ [[window standardWindowButton:NSWindowZoomButton] setEnabled:can_fullscreen]; |
+} |
+ |
+} // namespace gfx |