Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/cocoa/browser_window_controller_private.h" | 5 #import "chrome/browser/cocoa/browser_window_controller_private.h" |
| 6 | 6 |
| 7 #include "base/mac_util.h" | 7 #include "base/mac_util.h" |
| 8 #import "base/scoped_nsobject.h" | 8 #import "base/scoped_nsobject.h" |
| 9 #include "chrome/browser/browser.h" | 9 #include "chrome/browser/browser.h" |
| 10 #include "chrome/browser/browser_list.h" | 10 #include "chrome/browser/browser_list.h" |
| 11 #include "chrome/browser/browser_process.h" | 11 #include "chrome/browser/browser_process.h" |
| 12 #include "chrome/browser/browser_theme_provider.h" | 12 #include "chrome/browser/browser_theme_provider.h" |
| 13 #import "chrome/browser/cocoa/chrome_browser_window.h" | 13 #import "chrome/browser/cocoa/chrome_browser_window.h" |
| 14 #import "chrome/browser/cocoa/fast_resize_view.h" | 14 #import "chrome/browser/cocoa/fast_resize_view.h" |
| 15 #import "chrome/browser/cocoa/find_bar_cocoa_controller.h" | 15 #import "chrome/browser/cocoa/find_bar_cocoa_controller.h" |
| 16 #import "chrome/browser/cocoa/floating_bar_backing_view.h" | 16 #import "chrome/browser/cocoa/floating_bar_backing_view.h" |
| 17 #import "chrome/browser/cocoa/fullscreen_controller.h" | 17 #import "chrome/browser/cocoa/fullscreen_controller.h" |
| 18 #import "chrome/browser/cocoa/side_tabs_toolbar_controller.h" | |
| 18 #import "chrome/browser/cocoa/tab_strip_controller.h" | 19 #import "chrome/browser/cocoa/tab_strip_controller.h" |
| 19 #import "chrome/browser/cocoa/tab_strip_view.h" | 20 #import "chrome/browser/cocoa/tab_strip_view.h" |
| 20 #import "chrome/browser/cocoa/toolbar_controller.h" | 21 #import "chrome/browser/cocoa/toolbar_controller.h" |
| 21 #include "chrome/browser/pref_service.h" | 22 #include "chrome/browser/pref_service.h" |
| 22 #include "chrome/browser/profile.h" | 23 #include "chrome/browser/profile.h" |
| 23 #include "chrome/browser/renderer_host/render_widget_host_view.h" | 24 #include "chrome/browser/renderer_host/render_widget_host_view.h" |
| 24 #include "chrome/browser/tab_contents/tab_contents.h" | 25 #include "chrome/browser/tab_contents/tab_contents.h" |
| 25 #include "chrome/browser/tab_contents/tab_contents_view.h" | 26 #include "chrome/browser/tab_contents/tab_contents_view.h" |
| 26 #include "chrome/common/pref_names.h" | 27 #include "chrome/common/pref_names.h" |
| 27 | 28 |
| 28 | 29 |
| 29 namespace { | 30 namespace { |
| 30 | 31 |
| 31 // Space between the incognito badge and the right edge of the window. | 32 // Space between the incognito badge and the right edge of the window. |
| 32 const CGFloat kIncognitoBadgeOffset = 4; | 33 const CGFloat kIncognitoBadgeOffset = 4; |
| 33 | 34 |
| 34 // Insets for the location bar, used when the full toolbar is hidden. | 35 // Insets for the location bar, used when the full toolbar is hidden. |
| 35 // TODO(viettrungluu): We can argue about the "correct" insetting; I like the | 36 // TODO(viettrungluu): We can argue about the "correct" insetting; I like the |
| 36 // following best, though arguably 0 inset is better/more correct. | 37 // following best, though arguably 0 inset is better/more correct. |
| 37 const CGFloat kLocBarLeftRightInset = 1; | 38 const CGFloat kLocBarLeftRightInset = 1; |
| 38 const CGFloat kLocBarTopInset = 0; | 39 const CGFloat kLocBarTopInset = 0; |
| 39 const CGFloat kLocBarBottomInset = 1; | 40 const CGFloat kLocBarBottomInset = 1; |
| 40 | 41 |
| 41 } // end namespace | 42 } // end namespace |
| 42 | 43 |
| 43 | 44 |
| 44 @implementation BrowserWindowController(Private) | 45 @implementation BrowserWindowController(Private) |
| 45 | 46 |
| 47 - (BOOL)useVerticalTabs { | |
| 48 return browser_->tabstrip_model()->delegate()->UseVerticalTabs(); | |
| 49 } | |
| 50 | |
| 46 - (void)saveWindowPositionIfNeeded { | 51 - (void)saveWindowPositionIfNeeded { |
| 47 if (browser_ != BrowserList::GetLastActive()) | 52 if (browser_ != BrowserList::GetLastActive()) |
| 48 return; | 53 return; |
| 49 | 54 |
| 50 if (!g_browser_process || !g_browser_process->local_state() || | 55 if (!g_browser_process || !g_browser_process->local_state() || |
| 51 !browser_->ShouldSaveWindowPlacement()) | 56 !browser_->ShouldSaveWindowPlacement()) |
| 52 return; | 57 return; |
| 53 | 58 |
| 54 [self saveWindowPositionToPrefs:g_browser_process->local_state()]; | 59 [self saveWindowPositionToPrefs:g_browser_process->local_state()]; |
| 55 } | 60 } |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 129 } | 134 } |
| 130 | 135 |
| 131 - (void)layoutSubviews { | 136 - (void)layoutSubviews { |
| 132 // With the exception of the tab strip, the subviews which we lay out are | 137 // With the exception of the tab strip, the subviews which we lay out are |
| 133 // subviews of the content view, so we mainly work in the content view's | 138 // subviews of the content view, so we mainly work in the content view's |
| 134 // coordinate system. Note, however, that the content view's coordinate system | 139 // coordinate system. Note, however, that the content view's coordinate system |
| 135 // and the window's base coordinate system should coincide. | 140 // and the window's base coordinate system should coincide. |
| 136 NSWindow* window = [self window]; | 141 NSWindow* window = [self window]; |
| 137 NSView* contentView = [window contentView]; | 142 NSView* contentView = [window contentView]; |
| 138 NSRect contentBounds = [contentView bounds]; | 143 NSRect contentBounds = [contentView bounds]; |
| 144 CGFloat minX = NSMinX(contentBounds); | |
| 139 CGFloat minY = NSMinY(contentBounds); | 145 CGFloat minY = NSMinY(contentBounds); |
| 140 CGFloat width = NSWidth(contentBounds); | 146 CGFloat width = NSWidth(contentBounds); |
| 141 | 147 |
| 142 // Suppress title drawing if necessary. | 148 // Suppress title drawing if necessary. |
| 143 if ([window respondsToSelector:@selector(setShouldHideTitle:)]) | 149 if ([window respondsToSelector:@selector(setShouldHideTitle:)]) |
| 144 [(id)window setShouldHideTitle:![self hasTitleBar]]; | 150 [(id)window setShouldHideTitle:![self hasTitleBar]]; |
| 145 | 151 |
| 146 BOOL isFullscreen = [self isFullscreen]; | 152 BOOL isFullscreen = [self isFullscreen]; |
| 147 CGFloat floatingBarHeight = [self floatingBarHeight]; | 153 CGFloat floatingBarHeight = [self floatingBarHeight]; |
| 148 // In fullscreen mode, |yOffset| accounts for the sliding position of the | 154 // In fullscreen mode, |yOffset| accounts for the sliding position of the |
| 149 // floating bar and the extra offset needed to dodge the menu bar. | 155 // floating bar and the extra offset needed to dodge the menu bar. |
| 150 CGFloat yOffset = isFullscreen ? | 156 CGFloat yOffset = isFullscreen ? |
| 151 (floor((1 - floatingBarShownFraction_) * floatingBarHeight) - | 157 (floor((1 - floatingBarShownFraction_) * floatingBarHeight) - |
| 152 [fullscreenController_ floatingBarVerticalOffset]) : 0; | 158 [fullscreenController_ floatingBarVerticalOffset]) : 0; |
| 153 CGFloat maxY = NSMaxY(contentBounds) + yOffset; | 159 CGFloat maxY = NSMaxY(contentBounds) + yOffset; |
| 154 CGFloat startMaxY = maxY; | 160 CGFloat startMaxY = maxY; |
| 155 | 161 |
| 156 if ([self hasTabStrip]) { | 162 if ([self hasTabStrip]) { |
| 157 // If we need to lay out the tab strip, replace |maxY| and |startMaxY| with | 163 // If we need to lay out the tab strip, replace |maxY| and |startMaxY| with |
| 158 // higher values, and then lay out the tab strip. | 164 // higher values, and then lay out the tab strip. |
| 159 NSRect windowFrame = [contentView convertRect:[window frame] fromView:nil]; | 165 NSRect windowFrame = [contentView convertRect:[window frame] fromView:nil]; |
| 160 startMaxY = maxY = NSHeight(windowFrame) + yOffset; | 166 startMaxY = maxY = NSHeight(windowFrame) + yOffset; |
| 161 maxY = [self layoutTabStripAtMaxY:maxY width:width fullscreen:isFullscreen]; | 167 maxY = [self layoutTabStripAtMaxY:maxY width:width fullscreen:isFullscreen]; |
| 162 } | 168 } |
| 163 | 169 |
| 164 // Sanity-check |maxY|. | 170 // Sanity-check |maxY|. |
| 165 DCHECK_GE(maxY, minY); | 171 DCHECK_GE(maxY, minY); |
| 166 DCHECK_LE(maxY, NSMaxY(contentBounds) + yOffset); | 172 DCHECK_LE(maxY, NSMaxY(contentBounds) + yOffset); |
| 167 | 173 |
| 168 // Place the toolbar at the top of the reserved area. | 174 // Place the toolbar at the top of the reserved area. Even with vertical |
| 175 // tabs enabled, the toolbar takes up the entire top width. | |
|
rohitrao (ping after 24h)
2010/06/02 13:45:56
Looking at the mocks you sent me, I'd argue that t
| |
| 169 maxY = [self layoutToolbarAtMaxY:maxY width:width]; | 176 maxY = [self layoutToolbarAtMaxY:maxY width:width]; |
| 170 | 177 |
| 178 // Position the vertical tab strip on the left, taking up the entire remaining | |
| 179 // height. | |
| 180 // TODO(pinkerton): Make width not fixed. | |
| 181 const CGFloat kSidebarWidth = 200.0; | |
| 182 if ([self useVerticalTabs]) { | |
| 183 // XXXPINK position the side bar at |minX|. | |
|
rohitrao (ping after 24h)
2010/06/02 13:45:56
TODO?
| |
| 184 | |
| 185 // Push everything else over to the right. | |
| 186 minX += kSidebarWidth; | |
| 187 width -= kSidebarWidth; | |
| 188 } | |
| 189 | |
| 171 // If we're not displaying the bookmark bar below the infobar, then it goes | 190 // If we're not displaying the bookmark bar below the infobar, then it goes |
| 172 // immediately below the toolbar. | 191 // immediately below the toolbar. |
| 173 BOOL placeBookmarkBarBelowInfoBar = [self placeBookmarkBarBelowInfoBar]; | 192 BOOL placeBookmarkBarBelowInfoBar = [self placeBookmarkBarBelowInfoBar]; |
| 174 if (!placeBookmarkBarBelowInfoBar) | 193 if (!placeBookmarkBarBelowInfoBar) |
| 175 maxY = [self layoutBookmarkBarAtMaxY:maxY width:width]; | 194 maxY = [self layoutBookmarkBarAtMinX:minX maxY:maxY width:width]; |
| 176 | 195 |
| 177 // The floating bar backing view doesn't actually add any height. | 196 // The floating bar backing view doesn't actually add any height. |
|
rohitrao (ping after 24h)
2010/06/02 13:45:56
This is fine for now, but we'll probably end up re
| |
| 178 [self layoutFloatingBarBackingViewAtY:maxY | 197 NSRect floatingBarBackingRect = |
| 179 width:width | 198 NSMakeRect(minX, minY, width, floatingBarHeight); |
| 180 height:floatingBarHeight | 199 [self layoutFloatingBarBackingView:floatingBarBackingRect |
| 181 fullscreen:isFullscreen]; | 200 fullscreen:isFullscreen]; |
| 182 | 201 |
| 183 // Place the find bar immediately below the toolbar/attached bookmark bar. In | 202 // Place the find bar immediately below the toolbar/attached bookmark bar. In |
| 184 // fullscreen mode, it hangs off the top of the screen when the bar is hidden. | 203 // fullscreen mode, it hangs off the top of the screen when the bar is hidden. |
| 204 // The find bar is unaffected by the side tab positioning. | |
| 185 [findBarCocoaController_ positionFindBarViewAtMaxY:maxY maxWidth:width]; | 205 [findBarCocoaController_ positionFindBarViewAtMaxY:maxY maxWidth:width]; |
| 186 | 206 |
| 187 // If in fullscreen mode, reset |maxY| to top of screen, so that the floating | 207 // If in fullscreen mode, reset |maxY| to top of screen, so that the floating |
| 188 // bar slides over the things which appear to be in the content area. | 208 // bar slides over the things which appear to be in the content area. |
| 189 if (isFullscreen) | 209 if (isFullscreen) |
| 190 maxY = NSMaxY(contentBounds); | 210 maxY = NSMaxY(contentBounds); |
| 191 | 211 |
| 192 // Also place the infobar container immediate below the toolbar, except in | 212 // Also place the infobar container immediate below the toolbar, except in |
| 193 // fullscreen mode in which case it's at the top of the visual content area. | 213 // fullscreen mode in which case it's at the top of the visual content area. |
| 194 maxY = [self layoutInfoBarAtMaxY:maxY width:width]; | 214 maxY = [self layoutInfoBarAtMinX:minX maxY:maxY width:width]; |
| 195 | 215 |
| 196 // If the bookmark bar is detached, place it next in the visual content area. | 216 // If the bookmark bar is detached, place it next in the visual content area. |
| 197 if (placeBookmarkBarBelowInfoBar) | 217 if (placeBookmarkBarBelowInfoBar) |
| 198 maxY = [self layoutBookmarkBarAtMaxY:maxY width:width]; | 218 maxY = [self layoutBookmarkBarAtMinX:minX maxY:maxY width:width]; |
| 199 | 219 |
| 200 // Place the download shelf, if any, at the bottom of the view. | 220 // Place the download shelf, if any, at the bottom of the view. |
| 201 minY = [self layoutDownloadShelfAtMinY:minY width:width]; | 221 minY = [self layoutDownloadShelfAtMinX:minX minY:minY width:width]; |
| 202 | 222 |
| 203 // Finally, the content area takes up all of the remaining space. | 223 // Finally, the content area takes up all of the remaining space. |
| 204 [self layoutTabContentAreaAtMinY:minY maxY:maxY width:width]; | 224 NSRect contentAreaRect = NSMakeRect(minX, minY, width, maxY - minY); |
| 225 [self layoutTabContentArea:contentAreaRect]; | |
| 205 | 226 |
| 206 // Place the status bubble at the bottom of the content area. | 227 // Place the status bubble at the bottom of the content area. |
| 207 verticalOffsetForStatusBubble_ = minY; | 228 verticalOffsetForStatusBubble_ = minY; |
| 208 | 229 |
| 209 // Normally, we don't need to tell the toolbar whether or not to show the | 230 // Normally, we don't need to tell the toolbar whether or not to show the |
| 210 // divider, but things break down during animation. | 231 // divider, but things break down during animation. |
| 211 [toolbarController_ | 232 [toolbarController_ |
| 212 setDividerOpacity:[bookmarkBarController_ toolbarDividerOpacity]]; | 233 setDividerOpacity:[bookmarkBarController_ toolbarDividerOpacity]]; |
| 213 } | 234 } |
| 214 | 235 |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 298 | 319 |
| 299 - (BOOL)placeBookmarkBarBelowInfoBar { | 320 - (BOOL)placeBookmarkBarBelowInfoBar { |
| 300 // If we are currently displaying the NTP detached bookmark bar or animating | 321 // If we are currently displaying the NTP detached bookmark bar or animating |
| 301 // to/from it (from/to anything else), we display the bookmark bar below the | 322 // to/from it (from/to anything else), we display the bookmark bar below the |
| 302 // infobar. | 323 // infobar. |
| 303 return [bookmarkBarController_ isInState:bookmarks::kDetachedState] || | 324 return [bookmarkBarController_ isInState:bookmarks::kDetachedState] || |
| 304 [bookmarkBarController_ isAnimatingToState:bookmarks::kDetachedState] || | 325 [bookmarkBarController_ isAnimatingToState:bookmarks::kDetachedState] || |
| 305 [bookmarkBarController_ isAnimatingFromState:bookmarks::kDetachedState]; | 326 [bookmarkBarController_ isAnimatingFromState:bookmarks::kDetachedState]; |
| 306 } | 327 } |
| 307 | 328 |
| 308 - (CGFloat)layoutBookmarkBarAtMaxY:(CGFloat)maxY width:(CGFloat)width { | 329 - (CGFloat)layoutBookmarkBarAtMinX:(CGFloat)minX |
| 330 maxY:(CGFloat)maxY | |
| 331 width:(CGFloat)width { | |
| 309 NSView* bookmarkBarView = [bookmarkBarController_ view]; | 332 NSView* bookmarkBarView = [bookmarkBarController_ view]; |
| 310 NSRect bookmarkBarFrame = [bookmarkBarView frame]; | 333 NSRect bookmarkBarFrame = [bookmarkBarView frame]; |
| 311 BOOL oldHidden = [bookmarkBarView isHidden]; | 334 BOOL oldHidden = [bookmarkBarView isHidden]; |
| 312 BOOL newHidden = ![self isBookmarkBarVisible]; | 335 BOOL newHidden = ![self isBookmarkBarVisible]; |
| 313 if (oldHidden != newHidden) | 336 if (oldHidden != newHidden) |
| 314 [bookmarkBarView setHidden:newHidden]; | 337 [bookmarkBarView setHidden:newHidden]; |
| 338 bookmarkBarFrame.origin.x = minX; | |
| 315 bookmarkBarFrame.origin.y = maxY - NSHeight(bookmarkBarFrame); | 339 bookmarkBarFrame.origin.y = maxY - NSHeight(bookmarkBarFrame); |
| 316 bookmarkBarFrame.size.width = width; | 340 bookmarkBarFrame.size.width = width; |
| 317 [bookmarkBarView setFrame:bookmarkBarFrame]; | 341 [bookmarkBarView setFrame:bookmarkBarFrame]; |
| 318 maxY -= NSHeight(bookmarkBarFrame); | 342 maxY -= NSHeight(bookmarkBarFrame); |
| 319 | 343 |
| 320 // TODO(viettrungluu): Does this really belong here? Calling it shouldn't be | 344 // TODO(viettrungluu): Does this really belong here? Calling it shouldn't be |
| 321 // necessary in the non-NTP case. | 345 // necessary in the non-NTP case. |
| 322 [bookmarkBarController_ layoutSubviews]; | 346 [bookmarkBarController_ layoutSubviews]; |
| 323 | 347 |
| 324 return maxY; | 348 return maxY; |
| 325 } | 349 } |
| 326 | 350 |
| 327 - (void)layoutFloatingBarBackingViewAtY:(CGFloat)y | 351 - (void)layoutFloatingBarBackingView:(NSRect)frame |
| 328 width:(CGFloat)width | 352 fullscreen:(BOOL)fullscreen { |
| 329 height:(CGFloat)height | |
| 330 fullscreen:(BOOL)fullscreen { | |
| 331 // Only display when in fullscreen mode. | 353 // Only display when in fullscreen mode. |
| 332 if (fullscreen) { | 354 if (fullscreen) { |
| 333 // For certain window types such as app windows (e.g., the dev tools | 355 // For certain window types such as app windows (e.g., the dev tools |
| 334 // window), there's no actual overlay. (Displaying one would result in an | 356 // window), there's no actual overlay. (Displaying one would result in an |
| 335 // overly sliding in only under the menu, which gives an ugly effect.) | 357 // overly sliding in only under the menu, which gives an ugly effect.) |
| 336 NSRect frame = NSMakeRect(0, y, width, height); | |
| 337 if (floatingBarBackingView_.get()) { | 358 if (floatingBarBackingView_.get()) { |
| 338 BOOL aboveBookmarkBar = [self placeBookmarkBarBelowInfoBar]; | 359 BOOL aboveBookmarkBar = [self placeBookmarkBarBelowInfoBar]; |
| 339 | 360 |
| 340 // Insert it into the view hierarchy if necessary. | 361 // Insert it into the view hierarchy if necessary. |
| 341 if (![floatingBarBackingView_ superview] || | 362 if (![floatingBarBackingView_ superview] || |
| 342 aboveBookmarkBar != floatingBarAboveBookmarkBar_) { | 363 aboveBookmarkBar != floatingBarAboveBookmarkBar_) { |
| 343 NSView* contentView = [[self window] contentView]; | 364 NSView* contentView = [[self window] contentView]; |
| 344 // z-order gets messed up unless we explicitly remove the floatingbar | 365 // z-order gets messed up unless we explicitly remove the floatingbar |
| 345 // view and re-add it. | 366 // view and re-add it. |
| 346 [floatingBarBackingView_ removeFromSuperview]; | 367 [floatingBarBackingView_ removeFromSuperview]; |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 357 | 378 |
| 358 // But we want the logic to work as usual (for show/hide/etc. purposes). | 379 // But we want the logic to work as usual (for show/hide/etc. purposes). |
| 359 [fullscreenController_ overlayFrameChanged:frame]; | 380 [fullscreenController_ overlayFrameChanged:frame]; |
| 360 } else { | 381 } else { |
| 361 // Okay to call even if |floatingBarBackingView_| is nil. | 382 // Okay to call even if |floatingBarBackingView_| is nil. |
| 362 if ([floatingBarBackingView_ superview]) | 383 if ([floatingBarBackingView_ superview]) |
| 363 [floatingBarBackingView_ removeFromSuperview]; | 384 [floatingBarBackingView_ removeFromSuperview]; |
| 364 } | 385 } |
| 365 } | 386 } |
| 366 | 387 |
| 367 - (CGFloat)layoutInfoBarAtMaxY:(CGFloat)maxY width:(CGFloat)width { | 388 - (CGFloat)layoutInfoBarAtMinX:(CGFloat)minX |
| 389 maxY:(CGFloat)maxY | |
| 390 width:(CGFloat)width { | |
| 368 NSView* infoBarView = [infoBarContainerController_ view]; | 391 NSView* infoBarView = [infoBarContainerController_ view]; |
| 369 NSRect infoBarFrame = [infoBarView frame]; | 392 NSRect infoBarFrame = [infoBarView frame]; |
| 393 infoBarFrame.origin.x = minX; | |
| 370 infoBarFrame.origin.y = maxY - NSHeight(infoBarFrame); | 394 infoBarFrame.origin.y = maxY - NSHeight(infoBarFrame); |
| 371 infoBarFrame.size.width = width; | 395 infoBarFrame.size.width = width; |
| 372 [infoBarView setFrame:infoBarFrame]; | 396 [infoBarView setFrame:infoBarFrame]; |
| 373 maxY -= NSHeight(infoBarFrame); | 397 maxY -= NSHeight(infoBarFrame); |
| 374 return maxY; | 398 return maxY; |
| 375 } | 399 } |
| 376 | 400 |
| 377 - (CGFloat)layoutDownloadShelfAtMinY:(CGFloat)minY width:(CGFloat)width { | 401 - (CGFloat)layoutDownloadShelfAtMinX:(CGFloat)minX |
| 402 minY:(CGFloat)minY | |
| 403 width:(CGFloat)width { | |
| 378 if (downloadShelfController_.get()) { | 404 if (downloadShelfController_.get()) { |
| 379 NSView* downloadView = [downloadShelfController_ view]; | 405 NSView* downloadView = [downloadShelfController_ view]; |
| 380 NSRect downloadFrame = [downloadView frame]; | 406 NSRect downloadFrame = [downloadView frame]; |
| 407 downloadFrame.origin.x = minX; | |
| 381 downloadFrame.origin.y = minY; | 408 downloadFrame.origin.y = minY; |
| 382 downloadFrame.size.width = width; | 409 downloadFrame.size.width = width; |
| 383 [downloadView setFrame:downloadFrame]; | 410 [downloadView setFrame:downloadFrame]; |
| 384 minY += NSHeight(downloadFrame); | 411 minY += NSHeight(downloadFrame); |
| 385 } | 412 } |
| 386 return minY; | 413 return minY; |
| 387 } | 414 } |
| 388 | 415 |
| 389 - (void)layoutTabContentAreaAtMinY:(CGFloat)minY | 416 - (void)layoutTabContentArea:(NSRect)newFrame { |
| 390 maxY:(CGFloat)maxY | |
| 391 width:(CGFloat)width { | |
| 392 NSView* tabContentView = [self tabContentArea]; | 417 NSView* tabContentView = [self tabContentArea]; |
| 393 NSRect tabContentFrame = [tabContentView frame]; | 418 NSRect tabContentFrame = [tabContentView frame]; |
| 394 | 419 |
| 395 bool contentShifted = NSMaxY(tabContentFrame) != maxY; | 420 bool contentShifted = NSMaxY(tabContentFrame) != NSMaxY(newFrame); |
|
rohitrao (ping after 24h)
2010/06/02 13:45:56
Do you know the difference between "==" and "NSEqu
| |
| 396 | 421 |
| 397 tabContentFrame.origin.y = minY; | 422 tabContentFrame = newFrame; |
| 398 tabContentFrame.size.height = maxY - minY; | |
| 399 tabContentFrame.size.width = width; | |
| 400 [tabContentView setFrame:tabContentFrame]; | 423 [tabContentView setFrame:tabContentFrame]; |
| 401 | 424 |
| 402 // If the relayout shifts the content area up or down, let the renderer know. | 425 // If the relayout shifts the content area up or down, let the renderer know. |
| 403 if (contentShifted) { | 426 if (contentShifted) { |
| 404 if (TabContents* contents = browser_->GetSelectedTabContents()) { | 427 if (TabContents* contents = browser_->GetSelectedTabContents()) { |
| 405 if (RenderWidgetHostView* rwhv = contents->GetRenderWidgetHostView()) | 428 if (RenderWidgetHostView* rwhv = contents->GetRenderWidgetHostView()) |
| 406 rwhv->WindowFrameChanged(); | 429 rwhv->WindowFrameChanged(); |
| 407 } | 430 } |
| 408 } | 431 } |
| 409 } | 432 } |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 464 | 487 |
| 465 - (void)disableBarVisibilityUpdates { | 488 - (void)disableBarVisibilityUpdates { |
| 466 // Early escape if there's nothing to do. | 489 // Early escape if there's nothing to do. |
| 467 if (!barVisibilityUpdatesEnabled_) | 490 if (!barVisibilityUpdatesEnabled_) |
| 468 return; | 491 return; |
| 469 | 492 |
| 470 barVisibilityUpdatesEnabled_ = NO; | 493 barVisibilityUpdatesEnabled_ = NO; |
| 471 [fullscreenController_ cancelAnimationAndTimers]; | 494 [fullscreenController_ cancelAnimationAndTimers]; |
| 472 } | 495 } |
| 473 | 496 |
| 497 // Removes existing toolbar and re-creates the appropriate toolbar controller | |
| 498 // based on if vertical tabs are enabled. | |
| 499 - (void)initializeToolbarWithBrowser:(Browser*)browser { | |
| 500 // Remove existing view. | |
| 501 [[toolbarController_ view] removeFromSuperview]; | |
| 502 toolbarController_.reset(nil); | |
| 503 | |
| 504 // Create appropriate toolbar controller. | |
| 505 if ([self useVerticalTabs]) { | |
| 506 toolbarController_.reset([[SideTabsToolbarController alloc] | |
| 507 initWithModel:browser->toolbar_model() | |
| 508 commands:browser->command_updater() | |
| 509 profile:browser->profile() | |
| 510 browser:browser | |
| 511 resizeDelegate:self]); | |
| 512 } else { | |
| 513 toolbarController_.reset([[ToolbarController alloc] | |
| 514 initWithModel:browser->toolbar_model() | |
| 515 commands:browser->command_updater() | |
| 516 profile:browser->profile() | |
| 517 browser:browser | |
| 518 resizeDelegate:self]); | |
| 519 } | |
| 520 [toolbarController_ setHasToolbar:[self hasToolbar] | |
| 521 hasLocationBar:[self hasLocationBar]]; | |
| 522 [[[self window] contentView] addSubview:[toolbarController_ view]]; | |
| 523 } | |
| 524 | |
| 474 @end // @implementation BrowserWindowController(Private) | 525 @end // @implementation BrowserWindowController(Private) |
| OLD | NEW |