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

Unified Diff: chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.cc

Issue 83343006: Enable immersive fullscreen for hosted apps part 2 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 1 month 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/views/frame/browser_non_client_frame_view_ash.cc
diff --git a/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.cc b/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.cc
index 47cd56483bb400b2784718f0f95c23702287b7ce..2f24912057cf0da66c243472d01c8162f8d711af 100644
--- a/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.cc
+++ b/chrome/browser/ui/views/frame/browser_non_client_frame_view_ash.cc
@@ -156,15 +156,18 @@ void BrowserNonClientFrameViewAsh::UpdateThrobber(bool running) {
// views::NonClientFrameView overrides:
gfx::Rect BrowserNonClientFrameViewAsh::GetBoundsForClientView() const {
- int top_height = NonClientTopBorderHeight();
- return ash::HeaderPainter::GetBoundsForClientView(top_height, bounds());
+ // The ClientView must be flush with the top edge of the widget so that the
+ // web contents can take up the entire screen in immersive fullscreen (with
+ // or without the top-of-window views revealed) When in immersive fullscreen
James Cook 2013/11/25 19:09:20 nit. Missing . after )
+ // and the top-of-window views are revealed, the TopContainerView paints the
+ // window header by redirecting paints from its background to
+ // BrowserNonClientFrameViewAsh.
+ return ash::HeaderPainter::GetBoundsForClientView(0, bounds());
}
gfx::Rect BrowserNonClientFrameViewAsh::GetWindowBoundsForClientBounds(
const gfx::Rect& client_bounds) const {
- int top_height = NonClientTopBorderHeight();
- return ash::HeaderPainter::GetWindowBoundsForClientBounds(top_height,
- client_bounds);
+ return ash::HeaderPainter::GetWindowBoundsForClientBounds(0, client_bounds);
}
int BrowserNonClientFrameViewAsh::NonClientHitTest(const gfx::Point& point) {
@@ -261,7 +264,6 @@ void BrowserNonClientFrameViewAsh::OnPaint(gfx::Canvas* canvas) {
}
void BrowserNonClientFrameViewAsh::Layout() {
- header_painter_->LayoutHeader(UseShortHeader());
int header_height = 0;
if (browser_view()->IsTabStripVisible()) {
header_height = GetTopInset() +
@@ -269,13 +271,12 @@ void BrowserNonClientFrameViewAsh::Layout() {
} else if (browser_view()->IsToolbarVisible()) {
// Set the header's height so that it overlaps with the toolbar because the
// top few pixels of the toolbar are not opaque.
- gfx::Point toolbar_origin(browser_view()->GetToolbarBounds().origin());
pkotwicz 2013/11/23 21:37:15 This code is wrong. BrowserNonClientFrameViewAsh::
- View::ConvertPointToTarget(browser_view(), this, &toolbar_origin);
- header_height = toolbar_origin.y() + kFrameShadowThickness * 2;
+ header_height = GetTopInset() + kFrameShadowThickness * 2;
} else {
- header_height = NonClientTopBorderHeight();
+ header_height = GetTopInset();
}
header_painter_->set_header_height(header_height);
+ header_painter_->LayoutHeader(UseShortHeader());
if (avatar_button())
LayoutAvatar();
BrowserNonClientFrameView::Layout();
@@ -290,40 +291,25 @@ bool BrowserNonClientFrameViewAsh::HitTestRect(const gfx::Rect& rect) const {
// |rect| is outside BrowserNonClientFrameViewAsh's bounds.
return false;
}
- // If the rect is outside the bounds of the client area, claim it.
- gfx::RectF rect_in_client_view_coords_f(rect);
- View::ConvertRectToTarget(this, frame()->client_view(),
- &rect_in_client_view_coords_f);
- gfx::Rect rect_in_client_view_coords = gfx::ToEnclosingRect(
- rect_in_client_view_coords_f);
- if (!frame()->client_view()->HitTestRect(rect_in_client_view_coords))
- return true;
- // Otherwise, claim |rect| only if it is above the bottom of the tabstrip in
- // a non-tab portion.
TabStrip* tabstrip = browser_view()->tabstrip();
- if (!tabstrip || !browser_view()->IsTabStripVisible())
- return false;
-
- gfx::RectF rect_in_tabstrip_coords_f(rect);
- View::ConvertRectToTarget(this, tabstrip, &rect_in_tabstrip_coords_f);
- gfx::Rect rect_in_tabstrip_coords = gfx::ToEnclosingRect(
- rect_in_tabstrip_coords_f);
-
- if (rect_in_tabstrip_coords.y() > tabstrip->GetLocalBounds().bottom()) {
- // |rect| is below the tabstrip.
- return false;
- }
-
- if (tabstrip->HitTestRect(rect_in_tabstrip_coords)) {
- // Claim |rect| if it is in a non-tab portion of the tabstrip.
- return tabstrip->IsRectInWindowCaption(rect_in_tabstrip_coords);
+ if (tabstrip && browser_view()->IsTabStripVisible()) {
+ // Claim |rect| only if it is above the bottom of the tabstrip in a non-tab
+ // portion.
+ gfx::RectF rect_in_tabstrip_coords_f(rect);
+ View::ConvertRectToTarget(this, tabstrip, &rect_in_tabstrip_coords_f);
+ gfx::Rect rect_in_tabstrip_coords = gfx::ToEnclosingRect(
+ rect_in_tabstrip_coords_f);
+
+ if (rect_in_tabstrip_coords.y() > tabstrip->height())
+ return false;
+
+ return !tabstrip->HitTestRect(rect_in_tabstrip_coords) ||
+ tabstrip->IsRectInWindowCaption(rect_in_tabstrip_coords);
}
- // We claim |rect| because it is above the bottom of the tabstrip, but
- // not in the tabstrip. In particular, the window controls are right of
- // the tabstrip.
- return true;
+ // Claim |rect| if it is above the top of the topmost view in the client area.
+ return (rect.y() < GetTopInset());
James Cook 2013/11/25 19:09:20 nit: no need for extra parens
}
void BrowserNonClientFrameViewAsh::GetAccessibleState(
@@ -336,7 +322,7 @@ gfx::Size BrowserNonClientFrameViewAsh::GetMinimumSize() {
return gfx::Size(
std::max(header_painter_->GetMinimumHeaderWidth(),
min_client_view_size.width()),
- NonClientTopBorderHeight() + min_client_view_size.height());
+ min_client_view_size.height());
}
void BrowserNonClientFrameViewAsh::OnThemeChanged() {
@@ -365,16 +351,6 @@ gfx::ImageSkia BrowserNonClientFrameViewAsh::GetFaviconForTabIconView() {
///////////////////////////////////////////////////////////////////////////////
// BrowserNonClientFrameViewAsh, private:
-int BrowserNonClientFrameViewAsh::NonClientTopBorderHeight() const {
- if (!ShouldPaint() || browser_view()->IsTabStripVisible())
- return 0;
-
- int caption_buttons_bottom = caption_button_container_->bounds().bottom();
- if (browser_view()->IsToolbarVisible())
- return caption_buttons_bottom - kContentShadowHeight;
- return caption_buttons_bottom + kClientEdgeThickness;
-}
-
bool BrowserNonClientFrameViewAsh::UseShortHeader() const {
// Restored tabbed browser windows use the tall header. All other windows use
// the short header.
@@ -423,9 +399,11 @@ bool BrowserNonClientFrameViewAsh::ShouldPaint() const {
// We need to paint when in immersive fullscreen and either:
// - The top-of-window views are revealed.
// - The lightbar style tabstrip is visible.
- // Because immersive fullscreen is only supported for tabbed browser windows,
- // checking whether the tab strip is visible is sufficient.
- return browser_view()->IsTabStripVisible();
+ ImmersiveModeController* immersive_mode_controller =
+ browser_view()->immersive_mode_controller();
+ return immersive_mode_controller->IsEnabled() &&
+ (immersive_mode_controller->IsRevealed() ||
+ UseImmersiveLightbarHeaderStyle());
}
void BrowserNonClientFrameViewAsh::PaintImmersiveLightbarStyleHeader(

Powered by Google App Engine
This is Rietveld 408576698