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

Unified Diff: ash/common/frame/custom_frame_view_ash.cc

Issue 2724693002: mash: improves browser frame decorations (Closed)
Patch Set: cleanup Created 3 years, 10 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: 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:

Powered by Google App Engine
This is Rietveld 408576698