OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #import "chrome/browser/ui/cocoa/tabs/tab_window_controller.h" | 5 #import "chrome/browser/ui/cocoa/tabs/tab_window_controller.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #import "chrome/browser/ui/cocoa/browser_window_layout.h" | 8 #import "chrome/browser/ui/cocoa/browser_window_layout.h" |
9 #import "chrome/browser/ui/cocoa/fast_resize_view.h" | 9 #import "chrome/browser/ui/cocoa/fast_resize_view.h" |
10 #import "chrome/browser/ui/cocoa/framed_browser_window.h" | 10 #import "chrome/browser/ui/cocoa/framed_browser_window.h" |
11 #import "chrome/browser/ui/cocoa/tabs/tab_strip_background_view.h" | |
11 #import "chrome/browser/ui/cocoa/tabs/tab_strip_view.h" | 12 #import "chrome/browser/ui/cocoa/tabs/tab_strip_view.h" |
12 #import "chrome/browser/ui/cocoa/themed_window.h" | 13 #import "chrome/browser/ui/cocoa/themed_window.h" |
13 #import "chrome/browser/ui/cocoa/version_independent_window.h" | 14 #import "chrome/browser/ui/cocoa/version_independent_window.h" |
14 #import "ui/base/cocoa/focus_tracker.h" | 15 #import "ui/base/cocoa/focus_tracker.h" |
15 #include "ui/base/theme_provider.h" | 16 #include "ui/base/theme_provider.h" |
16 | 17 |
17 @interface TabWindowController(PRIVATE) | 18 @interface TabWindowController(PRIVATE) |
18 - (void)setUseOverlay:(BOOL)useOverlay; | 19 - (void)setUseOverlay:(BOOL)useOverlay; |
19 @end | 20 @end |
20 | 21 |
(...skipping 24 matching lines...) Expand all Loading... | |
45 | 46 |
46 @end | 47 @end |
47 | 48 |
48 @implementation TabWindowController | 49 @implementation TabWindowController |
49 | 50 |
50 - (id)initTabWindowControllerWithTabStrip:(BOOL)hasTabStrip { | 51 - (id)initTabWindowControllerWithTabStrip:(BOOL)hasTabStrip { |
51 NSRect contentRect = NSMakeRect(60, 229, 750, 600); | 52 NSRect contentRect = NSMakeRect(60, 229, 750, 600); |
52 base::scoped_nsobject<FramedBrowserWindow> window( | 53 base::scoped_nsobject<FramedBrowserWindow> window( |
53 [[FramedBrowserWindow alloc] initWithContentRect:contentRect | 54 [[FramedBrowserWindow alloc] initWithContentRect:contentRect |
54 hasTabStrip:hasTabStrip]); | 55 hasTabStrip:hasTabStrip]); |
55 [self moveContentViewToBack:[window contentView]]; | |
56 [window setReleasedWhenClosed:YES]; | 56 [window setReleasedWhenClosed:YES]; |
57 [window setAutorecalculatesKeyViewLoop:YES]; | 57 [window setAutorecalculatesKeyViewLoop:YES]; |
58 | 58 |
59 if ((self = [super initWithWindow:window])) { | 59 if ((self = [super initWithWindow:window])) { |
60 [[self window] setDelegate:self]; | 60 [[self window] setDelegate:self]; |
61 | 61 |
62 tabContentArea_.reset([[FastResizeView alloc] initWithFrame: | 62 tabContentArea_.reset([[FastResizeView alloc] initWithFrame: |
63 NSMakeRect(0, 0, 750, 600)]); | 63 NSMakeRect(0, 0, 750, 600)]); |
64 [tabContentArea_ setAutoresizingMask:NSViewWidthSizable | | 64 [tabContentArea_ setAutoresizingMask:NSViewWidthSizable | |
65 NSViewHeightSizable]; | 65 NSViewHeightSizable]; |
66 [[[self window] contentView] addSubview:tabContentArea_]; | 66 [[[self window] contentView] addSubview:tabContentArea_]; |
67 | 67 |
68 // tabStripBackgroundView_ draws the theme image behind the tab strip area. | |
69 // When making a tab dragging window (setUseOverlay:), this view stays in | |
70 // the parent window so that it can be translucent, while the tab strip view | |
71 // moves to the child window and stays opaque. | |
72 NSView* windowView = [window cr_windowView]; | |
73 tabStripBackgroundView_.reset([[TabStripBackgroundView alloc] | |
74 initWithFrame:NSMakeRect(0, | |
75 NSMaxY([windowView bounds]) - | |
76 kBrowserFrameViewPaintHeight, | |
77 NSWidth([windowView bounds]), | |
78 kBrowserFrameViewPaintHeight)]); | |
79 [tabStripBackgroundView_ | |
80 setAutoresizingMask:NSViewWidthSizable | NSViewMinYMargin]; | |
81 [windowView addSubview:tabStripBackgroundView_ | |
82 positioned:NSWindowBelow | |
83 relativeTo:nil]; | |
84 | |
85 [self moveContentViewToBack:[window contentView]]; | |
86 | |
68 tabStripView_.reset([[TabStripView alloc] | 87 tabStripView_.reset([[TabStripView alloc] |
69 initWithFrame:NSMakeRect(0, 0, 750, chrome::kTabStripHeight)]); | 88 initWithFrame:NSMakeRect(0, 0, 750, chrome::kTabStripHeight)]); |
70 [tabStripView_ setAutoresizingMask:NSViewWidthSizable | | 89 [tabStripView_ setAutoresizingMask:NSViewWidthSizable | |
71 NSViewMinYMargin]; | 90 NSViewMinYMargin]; |
72 if (hasTabStrip) | 91 if (hasTabStrip) |
73 [self insertTabStripView:tabStripView_ intoWindow:[self window]]; | 92 [self insertTabStripView:tabStripView_ intoWindow:[self window]]; |
74 } | 93 } |
75 return self; | 94 return self; |
76 } | 95 } |
77 | 96 |
97 - (NSView*)tabStripBackgroundView { | |
98 return tabStripBackgroundView_; | |
99 } | |
100 | |
78 - (TabStripView*)tabStripView { | 101 - (TabStripView*)tabStripView { |
79 return tabStripView_; | 102 return tabStripView_; |
80 } | 103 } |
81 | 104 |
82 - (FastResizeView*)tabContentArea { | 105 - (FastResizeView*)tabContentArea { |
83 return tabContentArea_; | 106 return tabContentArea_; |
84 } | 107 } |
85 | 108 |
86 - (void)removeOverlay { | 109 - (void)removeOverlay { |
87 [self setUseOverlay:NO]; | 110 [self setUseOverlay:NO]; |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
282 // drag is complete. This prevents a window (and its overlay) from going away | 305 // drag is complete. This prevents a window (and its overlay) from going away |
283 // during a drag. | 306 // during a drag. |
284 - (void)deferPerformClose { | 307 - (void)deferPerformClose { |
285 closeDeferred_ = YES; | 308 closeDeferred_ = YES; |
286 } | 309 } |
287 | 310 |
288 - (void)moveContentViewToBack:(NSView*)cv { | 311 - (void)moveContentViewToBack:(NSView*)cv { |
289 base::scoped_nsobject<NSView> contentView([cv retain]); | 312 base::scoped_nsobject<NSView> contentView([cv retain]); |
290 NSView* superview = [contentView superview]; | 313 NSView* superview = [contentView superview]; |
291 [contentView removeFromSuperview]; | 314 [contentView removeFromSuperview]; |
292 [superview addSubview:contentView positioned:NSWindowBelow relativeTo:nil]; | 315 [superview addSubview:contentView |
316 positioned:NSWindowAbove | |
317 relativeTo:tabStripBackgroundView_]; | |
erikchen
2014/09/29 23:23:32
This doesn't look right.
If tabStripBackgroundView
Andre
2014/09/30 03:57:38
Good call.
Please see latest patch for the fix.
| |
293 } | 318 } |
294 | 319 |
295 - (void)insertTabStripView:(NSView*)tabStripView intoWindow:(NSWindow*)window { | 320 - (void)insertTabStripView:(NSView*)tabStripView intoWindow:(NSWindow*)window { |
296 NSView* contentParent = [window cr_windowView]; | 321 NSView* contentParent = [window cr_windowView]; |
297 if (contentParent == [[window contentView] superview]) { | 322 if (contentParent == [[window contentView] superview]) { |
298 // Add the tab strip directly above the content view, if they are siblings. | 323 // Add the tab strip directly above the content view, if they are siblings. |
299 [contentParent addSubview:tabStripView | 324 [contentParent addSubview:tabStripView |
300 positioned:NSWindowAbove | 325 positioned:NSWindowAbove |
301 relativeTo:[window contentView]]; | 326 relativeTo:[window contentView]]; |
302 } else { | 327 } else { |
303 [contentParent addSubview:tabStripView]; | 328 [contentParent addSubview:tabStripView]; |
304 } | 329 } |
305 } | 330 } |
306 | 331 |
307 // Called when the size of the window content area has changed. Override to | 332 // Called when the size of the window content area has changed. Override to |
308 // position specific views. Base class implementation does nothing. | 333 // position specific views. Base class implementation does nothing. |
309 - (void)layoutSubviews { | 334 - (void)layoutSubviews { |
310 NOTIMPLEMENTED(); | 335 NOTIMPLEMENTED(); |
311 } | 336 } |
312 | 337 |
313 @end | 338 @end |
OLD | NEW |