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

Unified Diff: chrome/browser/ui/cocoa/browser_window_layout.mm

Issue 607723002: mac: Refactor tab strip layout logic. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@tabstrip_relayout_bug_base
Patch Set: Created 6 years, 3 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/ui/cocoa/browser_window_layout.mm
diff --git a/chrome/browser/ui/cocoa/browser_window_layout.mm b/chrome/browser/ui/cocoa/browser_window_layout.mm
index 0b303b5bf73b60163c33adbd1f19c3b912e3bc18..120477085fbb690750e352a5c3e847fd6f720a9f 100644
--- a/chrome/browser/ui/cocoa/browser_window_layout.mm
+++ b/chrome/browser/ui/cocoa/browser_window_layout.mm
@@ -5,6 +5,7 @@
#import "chrome/browser/ui/cocoa/browser_window_layout.h"
#include "base/logging.h"
+#import "chrome/browser/ui/cocoa/tabs/tab_strip_controller.h"
namespace chrome {
@@ -21,6 +22,8 @@ const CGFloat kLocBarLeftRightInset = 1;
const CGFloat kLocBarTopInset = 0;
const CGFloat kLocBarBottomInset = 1;
+// Space between the incognito badge and the right edge of the window.
+const CGFloat kAvatarRightOffset = 4;
} // namespace
@interface BrowserWindowLayout ()
@@ -81,6 +84,26 @@ const CGFloat kLocBarBottomInset = 1;
parameters_.hasTabStrip = hasTabStrip;
}
+- (void)setFullscreenButtonFrame:(NSRect)frame {
+ parameters_.fullscreenButtonFrame = frame;
+}
+
+- (void)setShouldShowAvatar:(BOOL)shouldShowAvatar {
+ parameters_.shouldShowAvatar = shouldShowAvatar;
+}
+
+- (void)setShouldUseNewAvatar:(BOOL)shouldUseNewAvatar {
+ parameters_.shouldUseNewAvatar = shouldUseNewAvatar;
+}
+
+- (void)setAvatarSize:(NSSize)avatarSize {
+ parameters_.avatarSize = avatarSize;
+}
+
+- (void)setAvatarLineWidth:(BOOL)avatarLineWidth {
+ parameters_.avatarLineWidth = avatarLineWidth;
+}
+
- (void)setHasToolbar:(BOOL)hasToolbar {
parameters_.hasToolbar = hasToolbar;
}
@@ -140,15 +163,80 @@ const CGFloat kLocBarBottomInset = 1;
}
- (void)computeTabStripLayout {
- if (parameters_.hasTabStrip) {
- maxY_ = parameters_.windowSize.height + fullscreenYOffset_;
- CGFloat width = parameters_.contentViewSize.width;
- output_.tabStripFrame = NSMakeRect(
- 0, maxY_ - chrome::kTabStripHeight, width, chrome::kTabStripHeight);
- maxY_ = NSMinY(output_.tabStripFrame);
- } else {
+ if (!parameters_.hasTabStrip) {
maxY_ = parameters_.contentViewSize.height + fullscreenYOffset_;
+ return;
}
+
+ // Temporary variable to hold the output.
+ chrome::TabStripLayout layout;
+ memset(&layout, 0, sizeof(layout));
Robert Sesek 2014/09/26 16:55:55 Can you not do = {0} or = {} instead? Otherwise, I
erikchen 2014/09/26 17:39:05 = {} will correctly zero initialize the struct. I
+
+ // Lay out the tab strip.
+ maxY_ = parameters_.windowSize.height + fullscreenYOffset_;
+ CGFloat width = parameters_.contentViewSize.width;
+ layout.frame = NSMakeRect(
+ 0, maxY_ - chrome::kTabStripHeight, width, chrome::kTabStripHeight);
+ maxY_ = NSMinY(layout.frame);
+
+ // In Yosemite fullscreen, manually add the fullscreen controls to the tab
+ // strip.
+ layout.addWindowControls =
+ parameters_.inAnyFullscreen && base::mac::IsOSYosemiteOrLater();
Robert Sesek 2014/09/26 16:55:55 What about when not in screen?
erikchen 2014/09/26 17:39:06 I don't understand your question. My best interpre
Robert Sesek 2014/09/26 19:06:23 Sorry, yes meant fullscreen. The naming of the mem
erikchen 2014/09/26 20:55:59 I renamed all of the fields, properties, and metho
+
+ // Set left indentation based on fullscreen mode status.
+ if (!parameters_.inAnyFullscreen || layout.addWindowControls)
+ layout.leftIndent = [TabStripController defaultLeftIndentForControls];
+
+ // Lay out the icognito/avatar badge because calculating the indentation on
+ // the right depends on it.
+ if (parameters_.shouldShowAvatar) {
+ CGFloat badgeXOffset = -kAvatarRightOffset;
+ CGFloat badgeYOffset = 0;
+ CGFloat buttonHeight = parameters_.avatarSize.height;
+
+ if (parameters_.shouldUseNewAvatar) {
+ // The fullscreen icon is displayed to the right of the avatar button.
+ if (!parameters_.inAnyFullscreen &&
+ !NSIsEmptyRect(parameters_.fullscreenButtonFrame)) {
+ badgeXOffset -= width - NSMinX(parameters_.fullscreenButtonFrame);
+ }
+ // Center the button vertically on the tabstrip.
+ badgeYOffset = (chrome::kTabStripHeight - buttonHeight) / 2;
+ } else {
+ // Actually place the badge *above* |maxY|, by +2 to miss the divider.
+ badgeYOffset = 2 * parameters_.avatarLineWidth;
+ }
+
+ NSSize size = NSMakeSize(parameters_.avatarSize.width,
+ std::min(buttonHeight, chrome::kTabStripHeight));
+ NSPoint origin =
+ NSMakePoint(width - parameters_.avatarSize.width + badgeXOffset,
+ maxY_ + badgeYOffset);
+ layout.avatarFrame =
+ NSMakeRect(origin.x, origin.y, size.width, size.height);
+ }
+
+ // Calculate the right indentation. The default indentation built into the
Robert Sesek 2014/09/26 16:55:55 nit: preference is for one space between sentences
erikchen 2014/09/26 17:39:05 Done. (This was a copy paste).
+ // tabstrip leaves enough room for the fullscreen button on Lion (10.7) to
+ // Mavericks (10.9). On 10.6 and >=10.10, the right indent needs to be
+ // adjusted to make room for the new tab button when an avatar is present.
+ CGFloat rightIndent = 0;
+ if (!parameters_.inAnyFullscreen &&
+ !NSIsEmptyRect(parameters_.fullscreenButtonFrame)) {
+ rightIndent = width - NSMinX(parameters_.fullscreenButtonFrame);
+
+ if (parameters_.shouldUseNewAvatar) {
+ // The new avatar button is to the left of the fullscreen button.
+ // (The old avatar button is to the right).
+ rightIndent += parameters_.avatarSize.width + kAvatarRightOffset;
+ }
+ } else if (parameters_.shouldShowAvatar) {
+ rightIndent += parameters_.avatarSize.width + kAvatarRightOffset;
+ }
+ layout.rightIndent = rightIndent;
+
+ output_.tabStripLayout = layout;
}
- (void)computeContentViewLayout {

Powered by Google App Engine
This is Rietveld 408576698