1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CHROME_BROWSER_UI_COCOA_VERSION_INDEPENDENT_WINDOW_H_
6 #define CHROME_BROWSER_UI_COCOA_VERSION_INDEPENDENT_WINDOW_H_
8 #import "chrome/browser/ui/cocoa/chrome_event_processing_window.h"
10 #include "base/mac/scoped_nsobject.h"
12 @interface
NSWindow (VersionIndependentWindow
)
14 // Returns the NSView closest to the root of the NSView hierarchy that is
15 // eligible for adding subviews.
16 // The frame of the view in screen coordinates is coincident with the window's
17 // frame in screen coordinates.
18 - (NSView
*)cr_windowView
;
22 // In OSX 10.10, adding subviews to the root view for the NSView hierarchy
23 // produces warnings. To eliminate the warnings, we resize the contentView to
24 // fill the window, and add subviews to that. When this class is used on OSX
25 // 10.9 and lower, subviews are added directly to the root view, and the
26 // contentView is not resized.
27 // http://crbug.com/380412
29 // For code to be 10.9 and 10.10 compatible, views should be added to [window
30 // cr_windowView] instead of [[window contentView] superview].
32 // If the window does not have a titlebar, then its contentView already has the
33 // same size as the window. In this case, this class has no effect.
35 // This class currently does not support changing the window's style after the
36 // window has been initialized.
38 // Since the contentView's size varies between OSes, several NSWindow methods
39 // are no longer well defined.
41 // - setContentMinSize:
42 // - setContentMaxSize:
43 // - setContentAspectRatio:
44 // The implementation of this class on OSX 10.10 uses a hacked subclass of
45 // NSView. It currently does not support the above 4 methods.
46 @interface VersionIndependentWindow
: ChromeEventProcessingWindow
{
48 // Holds the view that replaces [window contentView]. This view's size is the
49 // same as the window's size.
50 // Empty on 10.9 and lower, or if there is no titlebar.
51 base::scoped_nsobject
<NSView
> chromeWindowView_
;
54 // Designated initializer.
55 - (instancetype
)initWithContentRect
:(NSRect
)contentRect
56 styleMask
:(NSUInteger
)windowStyle
57 backing
:(NSBackingStoreType
)bufferingType
58 defer
:(BOOL
)deferCreation
;
62 #endif // CHROME_BROWSER_UI_COCOA_VERSION_INDEPENDENT_WINDOW_H_