Index: ash/common/frame/custom_frame_view_ash.cc |
diff --git a/ash/common/frame/custom_frame_view_ash.cc b/ash/common/frame/custom_frame_view_ash.cc |
index d75b7287c3d1a2cf3d75da93b3da520077363e28..a290e5c60b4a21e5b1ad9ec1f575363c3d84cec2 100644 |
--- a/ash/common/frame/custom_frame_view_ash.cc |
+++ b/ash/common/frame/custom_frame_view_ash.cc |
@@ -125,6 +125,8 @@ class CustomFrameViewAsh::OverlayView : public views::View, |
explicit OverlayView(HeaderView* header_view); |
~OverlayView() override; |
+ void SetHeaderHeight(base::Optional<int> height); |
+ |
// views::View: |
void Layout() override; |
@@ -135,6 +137,8 @@ class CustomFrameViewAsh::OverlayView : public views::View, |
HeaderView* header_view_; |
+ base::Optional<int> header_height_; |
James Cook
2017/03/02 21:00:00
This makes sense as Optional.
|
+ |
DISALLOW_COPY_AND_ASSIGN(OverlayView); |
}; |
@@ -147,6 +151,15 @@ CustomFrameViewAsh::OverlayView::OverlayView(HeaderView* header_view) |
CustomFrameViewAsh::OverlayView::~OverlayView() {} |
+void CustomFrameViewAsh::OverlayView::SetHeaderHeight( |
+ base::Optional<int> height) { |
+ if (header_height_ == height) |
+ return; |
+ |
+ header_height_ = height; |
+ Layout(); |
+} |
+ |
/////////////////////////////////////////////////////////////////////////////// |
// CustomFrameViewAsh::OverlayView, views::View overrides: |
@@ -155,11 +168,14 @@ void CustomFrameViewAsh::OverlayView::Layout() { |
// GetPreferredOnScreenHeight(). |
header_view_->Layout(); |
- int onscreen_height = header_view_->GetPreferredOnScreenHeight(); |
+ int onscreen_height = header_height_ |
+ ? *header_height_ |
+ : header_view_->GetPreferredOnScreenHeight(); |
if (onscreen_height == 0) { |
header_view_->SetVisible(false); |
} else { |
- int height = header_view_->GetPreferredHeight(); |
+ const int height = |
+ header_height_ ? *header_height_ : header_view_->GetPreferredHeight(); |
header_view_->SetBounds(0, onscreen_height - height, width(), height); |
header_view_->SetVisible(true); |
} |
@@ -186,16 +202,18 @@ const char CustomFrameViewAsh::kViewClassName[] = "CustomFrameViewAsh"; |
CustomFrameViewAsh::CustomFrameViewAsh( |
views::Widget* frame, |
ImmersiveFullscreenControllerDelegate* immersive_delegate, |
- bool enable_immersive) |
+ bool enable_immersive, |
+ mojom::WindowStyle window_style) |
: frame_(frame), |
- header_view_(new HeaderView(frame)), |
+ header_view_(new HeaderView(frame, window_style)), |
+ overlay_view_(new OverlayView(header_view_)), |
immersive_delegate_(immersive_delegate ? immersive_delegate |
: header_view_) { |
WmWindow* frame_window = WmLookup::Get()->GetWindowForWidget(frame); |
frame_window->InstallResizeHandleWindowTargeter(nullptr); |
// |header_view_| is set as the non client view's overlay view so that it can |
// overlay the web contents in immersive fullscreen. |
- frame->non_client_view()->SetOverlayView(new OverlayView(header_view_)); |
+ frame->non_client_view()->SetOverlayView(overlay_view_); |
frame_window->SetColorProperty(WmWindowProperty::TOP_VIEW_COLOR, |
header_view_->GetInactiveFrameColor()); |
@@ -225,6 +243,10 @@ void CustomFrameViewAsh::SetFrameColors(SkColor active_frame_color, |
header_view_->GetInactiveFrameColor()); |
} |
+void CustomFrameViewAsh::SetHeaderHeight(base::Optional<int> height) { |
+ overlay_view_->SetHeaderHeight(height); |
+} |
+ |
//////////////////////////////////////////////////////////////////////////////// |
// CustomFrameViewAsh, views::NonClientFrameView overrides: |