Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2146)

Unified Diff: chrome/browser/cocoa/browser_window_controller_private.mm

Issue 2475002: Initial cut at scaffolding for mac sidetabs. No visible changes to browser wi... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/cocoa/browser_window_controller_private.mm
===================================================================
--- chrome/browser/cocoa/browser_window_controller_private.mm (revision 48662)
+++ chrome/browser/cocoa/browser_window_controller_private.mm (working copy)
@@ -15,6 +15,7 @@
#import "chrome/browser/cocoa/find_bar_cocoa_controller.h"
#import "chrome/browser/cocoa/floating_bar_backing_view.h"
#import "chrome/browser/cocoa/fullscreen_controller.h"
+#import "chrome/browser/cocoa/side_tabs_toolbar_controller.h"
#import "chrome/browser/cocoa/tab_strip_controller.h"
#import "chrome/browser/cocoa/tab_strip_view.h"
#import "chrome/browser/cocoa/toolbar_controller.h"
@@ -43,6 +44,10 @@
@implementation BrowserWindowController(Private)
+- (BOOL)useVerticalTabs {
+ return browser_->tabstrip_model()->delegate()->UseVerticalTabs();
+}
+
- (void)saveWindowPositionIfNeeded {
if (browser_ != BrowserList::GetLastActive())
return;
@@ -136,6 +141,7 @@
NSWindow* window = [self window];
NSView* contentView = [window contentView];
NSRect contentBounds = [contentView bounds];
+ CGFloat minX = NSMinX(contentBounds);
CGFloat minY = NSMinY(contentBounds);
CGFloat width = NSWidth(contentBounds);
@@ -165,23 +171,37 @@
DCHECK_GE(maxY, minY);
DCHECK_LE(maxY, NSMaxY(contentBounds) + yOffset);
- // Place the toolbar at the top of the reserved area.
+ // Place the toolbar at the top of the reserved area. Even with vertical
+ // 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
maxY = [self layoutToolbarAtMaxY:maxY width:width];
+ // Position the vertical tab strip on the left, taking up the entire remaining
+ // height.
+ // TODO(pinkerton): Make width not fixed.
+ const CGFloat kSidebarWidth = 200.0;
+ if ([self useVerticalTabs]) {
+ // XXXPINK position the side bar at |minX|.
rohitrao (ping after 24h) 2010/06/02 13:45:56 TODO?
+
+ // Push everything else over to the right.
+ minX += kSidebarWidth;
+ width -= kSidebarWidth;
+ }
+
// If we're not displaying the bookmark bar below the infobar, then it goes
// immediately below the toolbar.
BOOL placeBookmarkBarBelowInfoBar = [self placeBookmarkBarBelowInfoBar];
if (!placeBookmarkBarBelowInfoBar)
- maxY = [self layoutBookmarkBarAtMaxY:maxY width:width];
+ maxY = [self layoutBookmarkBarAtMinX:minX maxY:maxY width:width];
// 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
- [self layoutFloatingBarBackingViewAtY:maxY
- width:width
- height:floatingBarHeight
- fullscreen:isFullscreen];
+ NSRect floatingBarBackingRect =
+ NSMakeRect(minX, minY, width, floatingBarHeight);
+ [self layoutFloatingBarBackingView:floatingBarBackingRect
+ fullscreen:isFullscreen];
// Place the find bar immediately below the toolbar/attached bookmark bar. In
// fullscreen mode, it hangs off the top of the screen when the bar is hidden.
+ // The find bar is unaffected by the side tab positioning.
[findBarCocoaController_ positionFindBarViewAtMaxY:maxY maxWidth:width];
// If in fullscreen mode, reset |maxY| to top of screen, so that the floating
@@ -191,17 +211,18 @@
// Also place the infobar container immediate below the toolbar, except in
// fullscreen mode in which case it's at the top of the visual content area.
- maxY = [self layoutInfoBarAtMaxY:maxY width:width];
+ maxY = [self layoutInfoBarAtMinX:minX maxY:maxY width:width];
// If the bookmark bar is detached, place it next in the visual content area.
if (placeBookmarkBarBelowInfoBar)
- maxY = [self layoutBookmarkBarAtMaxY:maxY width:width];
+ maxY = [self layoutBookmarkBarAtMinX:minX maxY:maxY width:width];
// Place the download shelf, if any, at the bottom of the view.
- minY = [self layoutDownloadShelfAtMinY:minY width:width];
+ minY = [self layoutDownloadShelfAtMinX:minX minY:minY width:width];
// Finally, the content area takes up all of the remaining space.
- [self layoutTabContentAreaAtMinY:minY maxY:maxY width:width];
+ NSRect contentAreaRect = NSMakeRect(minX, minY, width, maxY - minY);
+ [self layoutTabContentArea:contentAreaRect];
// Place the status bubble at the bottom of the content area.
verticalOffsetForStatusBubble_ = minY;
@@ -305,13 +326,16 @@
[bookmarkBarController_ isAnimatingFromState:bookmarks::kDetachedState];
}
-- (CGFloat)layoutBookmarkBarAtMaxY:(CGFloat)maxY width:(CGFloat)width {
+- (CGFloat)layoutBookmarkBarAtMinX:(CGFloat)minX
+ maxY:(CGFloat)maxY
+ width:(CGFloat)width {
NSView* bookmarkBarView = [bookmarkBarController_ view];
NSRect bookmarkBarFrame = [bookmarkBarView frame];
BOOL oldHidden = [bookmarkBarView isHidden];
BOOL newHidden = ![self isBookmarkBarVisible];
if (oldHidden != newHidden)
[bookmarkBarView setHidden:newHidden];
+ bookmarkBarFrame.origin.x = minX;
bookmarkBarFrame.origin.y = maxY - NSHeight(bookmarkBarFrame);
bookmarkBarFrame.size.width = width;
[bookmarkBarView setFrame:bookmarkBarFrame];
@@ -324,16 +348,13 @@
return maxY;
}
-- (void)layoutFloatingBarBackingViewAtY:(CGFloat)y
- width:(CGFloat)width
- height:(CGFloat)height
- fullscreen:(BOOL)fullscreen {
+- (void)layoutFloatingBarBackingView:(NSRect)frame
+ fullscreen:(BOOL)fullscreen {
// Only display when in fullscreen mode.
if (fullscreen) {
// For certain window types such as app windows (e.g., the dev tools
// window), there's no actual overlay. (Displaying one would result in an
// overly sliding in only under the menu, which gives an ugly effect.)
- NSRect frame = NSMakeRect(0, y, width, height);
if (floatingBarBackingView_.get()) {
BOOL aboveBookmarkBar = [self placeBookmarkBarBelowInfoBar];
@@ -364,9 +385,12 @@
}
}
-- (CGFloat)layoutInfoBarAtMaxY:(CGFloat)maxY width:(CGFloat)width {
+- (CGFloat)layoutInfoBarAtMinX:(CGFloat)minX
+ maxY:(CGFloat)maxY
+ width:(CGFloat)width {
NSView* infoBarView = [infoBarContainerController_ view];
NSRect infoBarFrame = [infoBarView frame];
+ infoBarFrame.origin.x = minX;
infoBarFrame.origin.y = maxY - NSHeight(infoBarFrame);
infoBarFrame.size.width = width;
[infoBarView setFrame:infoBarFrame];
@@ -374,10 +398,13 @@
return maxY;
}
-- (CGFloat)layoutDownloadShelfAtMinY:(CGFloat)minY width:(CGFloat)width {
+- (CGFloat)layoutDownloadShelfAtMinX:(CGFloat)minX
+ minY:(CGFloat)minY
+ width:(CGFloat)width {
if (downloadShelfController_.get()) {
NSView* downloadView = [downloadShelfController_ view];
NSRect downloadFrame = [downloadView frame];
+ downloadFrame.origin.x = minX;
downloadFrame.origin.y = minY;
downloadFrame.size.width = width;
[downloadView setFrame:downloadFrame];
@@ -386,17 +413,13 @@
return minY;
}
-- (void)layoutTabContentAreaAtMinY:(CGFloat)minY
- maxY:(CGFloat)maxY
- width:(CGFloat)width {
+- (void)layoutTabContentArea:(NSRect)newFrame {
NSView* tabContentView = [self tabContentArea];
NSRect tabContentFrame = [tabContentView frame];
- bool contentShifted = NSMaxY(tabContentFrame) != maxY;
+ bool contentShifted = NSMaxY(tabContentFrame) != NSMaxY(newFrame);
rohitrao (ping after 24h) 2010/06/02 13:45:56 Do you know the difference between "==" and "NSEqu
- tabContentFrame.origin.y = minY;
- tabContentFrame.size.height = maxY - minY;
- tabContentFrame.size.width = width;
+ tabContentFrame = newFrame;
[tabContentView setFrame:tabContentFrame];
// If the relayout shifts the content area up or down, let the renderer know.
@@ -471,4 +494,32 @@
[fullscreenController_ cancelAnimationAndTimers];
}
+// Removes existing toolbar and re-creates the appropriate toolbar controller
+// based on if vertical tabs are enabled.
+- (void)initializeToolbarWithBrowser:(Browser*)browser {
+ // Remove existing view.
+ [[toolbarController_ view] removeFromSuperview];
+ toolbarController_.reset(nil);
+
+ // Create appropriate toolbar controller.
+ if ([self useVerticalTabs]) {
+ toolbarController_.reset([[SideTabsToolbarController alloc]
+ initWithModel:browser->toolbar_model()
+ commands:browser->command_updater()
+ profile:browser->profile()
+ browser:browser
+ resizeDelegate:self]);
+ } else {
+ toolbarController_.reset([[ToolbarController alloc]
+ initWithModel:browser->toolbar_model()
+ commands:browser->command_updater()
+ profile:browser->profile()
+ browser:browser
+ resizeDelegate:self]);
+ }
+ [toolbarController_ setHasToolbar:[self hasToolbar]
+ hasLocationBar:[self hasLocationBar]];
+ [[[self window] contentView] addSubview:[toolbarController_ view]];
+}
+
@end // @implementation BrowserWindowController(Private)

Powered by Google App Engine
This is Rietveld 408576698