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

Unified Diff: chrome/browser/ui/cocoa/tab_contents/overlayable_contents_controller.mm

Issue 12674019: Alternate NTP Mac: Show overlay at fixed position (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 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/tab_contents/overlayable_contents_controller.mm
diff --git a/chrome/browser/ui/cocoa/tab_contents/overlayable_contents_controller.mm b/chrome/browser/ui/cocoa/tab_contents/overlayable_contents_controller.mm
index 718045e7192f665453b08a414015aea55f8fc4e3..786b0766841137d425663cf234ce4e9f21530641 100644
--- a/chrome/browser/ui/cocoa/tab_contents/overlayable_contents_controller.mm
+++ b/chrome/browser/ui/cocoa/tab_contents/overlayable_contents_controller.mm
@@ -7,7 +7,7 @@
#include "base/mac/bundle_locations.h"
#include "chrome/browser/ui/cocoa/browser_window_controller.h"
#include "chrome/browser/ui/cocoa/tab_contents/instant_overlay_controller_mac.h"
-#include "chrome/browser/ui/cocoa/tab_contents/overlay_drop_shadow_view.h"
+#include "chrome/browser/ui/cocoa/tab_contents/overlay_separator_view.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_contents_view.h"
@@ -15,6 +15,7 @@
- (void)viewDidResize:(NSNotification*)note;
- (void)layoutViews;
- (CGFloat)overlayHeightInPixels;
+- (BOOL)shouldShowTopSeparator;
@end
@implementation OverlayableContentsController
@@ -41,6 +42,9 @@
instantOverlayController_.reset(
new InstantOverlayControllerMac(browser, windowController, self));
+ topSeparatorView_.reset(
+ [[OverlayTopSeparatorView alloc] initWithFrame:NSZeroRect]);
+ [[self view] addSubview:topSeparatorView_];
}
return self;
}
@@ -90,7 +94,7 @@
if (drawDropShadow_) {
if (!dropShadowView_) {
dropShadowView_.reset(
- [[OverlayDropShadowView alloc] initWithFrame:NSZeroRect]);
+ [[OverlayBottomSeparatorView alloc] initWithFrame:NSZeroRect]);
[[self view] addSubview:dropShadowView_];
}
} else {
@@ -148,23 +152,39 @@
- (void)layoutViews {
NSRect bounds = [[self view] bounds];
+ // Layout the separator at the top of the view.
+ NSRect separatorRect = bounds;
+ if ([self shouldShowTopSeparator])
+ separatorRect.size.height = [OverlayTopSeparatorView preferredHeight];
+ else
+ separatorRect.size.height = 0;
+ separatorRect.origin.y = NSMaxY(bounds) - NSHeight(separatorRect);
+ [topSeparatorView_ setFrame:separatorRect];
+
+ // Layout the overlay.
if (overlayContents_) {
NSRect overlayFrame = bounds;
overlayFrame.size.height = [self overlayHeightInPixels];
- overlayFrame.origin.y = NSMaxY(bounds) - NSHeight(overlayFrame);
+ overlayFrame.origin.y =
+ NSMinY([topSeparatorView_ frame]) - NSHeight(overlayFrame);
[overlayContents_->GetView()->GetNativeView() setFrame:overlayFrame];
if (dropShadowView_) {
NSRect dropShadowFrame = bounds;
- dropShadowFrame.size.height = [OverlayDropShadowView preferredHeight];
+ dropShadowFrame.size.height =
+ [OverlayBottomSeparatorView preferredHeight];
dropShadowFrame.origin.y =
NSMinY(overlayFrame) - NSHeight(dropShadowFrame);
[dropShadowView_ setFrame:dropShadowFrame];
}
}
+ // Layout the active tab contents.
NSRect activeFrame = bounds;
- activeFrame.size.height -= activeContainerOffset_;
+ if (activeContainerOffset_)
+ activeFrame.size.height -= activeContainerOffset_;
+ else
+ activeFrame.size.height -= NSHeight([topSeparatorView_ frame]);
if (!NSEqualRects(activeFrame, [activeContainer_ frame])) {
[[activeContainer_ window] disableScreenUpdatesUntilFlush];
[activeContainer_ setFrame:activeFrame];
@@ -172,7 +192,8 @@
}
- (CGFloat)overlayHeightInPixels {
- CGFloat height = NSHeight([[self view] bounds]);
+ CGFloat height =
+ NSHeight([[self view] bounds]) - NSHeight([topSeparatorView_ frame]);
switch (overlayHeightUnits_) {
case INSTANT_SIZE_PERCENT:
return std::min(height, (height * overlayHeight_) / 100);
@@ -181,4 +202,18 @@
}
}
+- (BOOL)shouldShowTopSeparator {
+ // In presentation mode tab contents are flush with the top of the screen
+ // so there's no need for a separator.
+ if ([windowController_ inPresentationMode])
+ return NO;
+
+ if (![windowController_ hasToolbar])
+ return NO;
+
+ // Show a separator is the overlay or the tab contents will be shown right
+ // next to the omnibox.
+ return activeContainerOffset_ == 0 || overlayContents_;
+}
+
@end

Powered by Google App Engine
This is Rietveld 408576698