Commit 534a1eaa authored by Tom Anderson's avatar Tom Anderson Committed by Commit Bot

Relayout frame buttons when MD mode changes

Also remove OnMaximizedStateChanged(), OnFullscreenStateChanged() which
are no longer necessary.

BUG=737995,881371
R=pkasting

Change-Id: I1649a19a6b5c4f601789f22c64536e25db25dc87
Reviewed-on: https://chromium-review.googlesource.com/c/1252380
Commit-Queue: Thomas Anderson <thomasanderson@chromium.org>
Reviewed-by: default avatarPeter Kasting <pkasting@chromium.org>
Cr-Commit-Position: refs/heads/master@{#595963}
parent 952d4b42
......@@ -66,14 +66,6 @@ void BrowserDesktopWindowTreeHostX11::CloseNow() {
DesktopWindowTreeHostX11::CloseNow();
}
void BrowserDesktopWindowTreeHostX11::OnMaximizedStateChanged() {
browser_view_->frame()->GetFrameView()->OnMaximizedStateChanged();
}
void BrowserDesktopWindowTreeHostX11::OnFullscreenStateChanged() {
browser_view_->frame()->GetFrameView()->OnFullscreenStateChanged();
}
////////////////////////////////////////////////////////////////////////////////
// BrowserDesktopWindowTreeHost, public:
......
......@@ -37,8 +37,6 @@ class BrowserDesktopWindowTreeHostX11
// Overridden from views::DesktopWindowTreeHostX11:
void Init(const views::Widget::InitParams& params) override;
void CloseNow() override;
void OnMaximizedStateChanged() override;
void OnFullscreenStateChanged() override;
BrowserView* browser_view_;
......
......@@ -71,8 +71,6 @@ void BrowserNonClientFrameView::OnBrowserViewInitViewsComplete() {
UpdateMinimumSize();
}
void BrowserNonClientFrameView::OnMaximizedStateChanged() {}
void BrowserNonClientFrameView::OnFullscreenStateChanged() {}
bool BrowserNonClientFrameView::CaptionButtonsOnLeadingEdge() const {
......
......@@ -45,11 +45,7 @@ class BrowserNonClientFrameView : public views::NonClientFrameView,
// Called when BrowserView creates all it's child views.
virtual void OnBrowserViewInitViewsComplete();
// Called on Linux X11 after the browser window is maximized or restored.
virtual void OnMaximizedStateChanged();
// Called on Linux X11 and Mac after the browser window is fullscreened or
// unfullscreened.
// Called on Mac after the browser window is fullscreened or unfullscreened.
virtual void OnFullscreenStateChanged();
// Returns whether the caption buttons are drawn at the leading edge (i.e. the
......
......@@ -8,6 +8,12 @@
#include "chrome/browser/ui/views/nav_button_provider.h"
#include "ui/views/controls/button/image_button.h"
bool DesktopLinuxBrowserFrameView::DrawFrameButtonParams::operator==(
const DrawFrameButtonParams& other) const {
return top_area_height == other.top_area_height &&
maximized == other.maximized && active == other.active;
}
DesktopLinuxBrowserFrameView::DesktopLinuxBrowserFrameView(
BrowserFrame* frame,
BrowserView* browser_view,
......@@ -19,10 +25,24 @@ DesktopLinuxBrowserFrameView::DesktopLinuxBrowserFrameView(
DesktopLinuxBrowserFrameView::~DesktopLinuxBrowserFrameView() {}
void DesktopLinuxBrowserFrameView::MaybeRedrawFrameButtons() {
nav_button_provider_->RedrawImages(
void DesktopLinuxBrowserFrameView::Layout() {
// Calling MaybeUpdateCachedFrameButtonImages() from Layout() is sufficient to
// catch all cases that could update the appearance, since
// DesktopWindowTreeHostX11::UpdateWindowProperties() does a layout any time
// any properties change.
MaybeUpdateCachedFrameButtonImages();
OpaqueBrowserFrameView::Layout();
}
void DesktopLinuxBrowserFrameView::MaybeUpdateCachedFrameButtonImages() {
DrawFrameButtonParams params{
GetTopAreaHeight() - layout()->TitlebarTopThickness(!IsMaximized()),
IsMaximized(), ShouldPaintAsActive());
IsMaximized(), ShouldPaintAsActive()};
if (cache_ == params)
return;
cache_ = params;
nav_button_provider_->RedrawImages(params.top_area_height, params.maximized,
params.active);
for (auto type : {
chrome::FrameButtonDisplayType::kMinimize,
IsMaximized() ? chrome::FrameButtonDisplayType::kRestore
......
......@@ -20,9 +20,21 @@ class DesktopLinuxBrowserFrameView : public OpaqueBrowserFrameView {
protected:
// OpaqueBrowserFrameView:
void MaybeRedrawFrameButtons() override;
void Layout() override;
private:
struct DrawFrameButtonParams {
bool operator==(const DrawFrameButtonParams& other) const;
int top_area_height;
bool maximized;
bool active;
};
// Redraws the image resources associated with the minimize, maximize,
// restore, and close buttons.
virtual void MaybeUpdateCachedFrameButtonImages();
// Returns one of |{minimize,maximize,restore,close}_button_|
// corresponding to |type|.
views::ImageButton* GetButtonFromDisplayType(
......@@ -30,6 +42,8 @@ class DesktopLinuxBrowserFrameView : public OpaqueBrowserFrameView {
std::unique_ptr<views::NavButtonProvider> nav_button_provider_;
DrawFrameButtonParams cache_{0, false, false};
DISALLOW_COPY_AND_ASSIGN(DesktopLinuxBrowserFrameView);
};
......
......@@ -191,28 +191,6 @@ OpaqueBrowserFrameView::~OpaqueBrowserFrameView() {}
///////////////////////////////////////////////////////////////////////////////
// OpaqueBrowserFrameView, BrowserNonClientFrameView implementation:
void OpaqueBrowserFrameView::OnBrowserViewInitViewsComplete() {
BrowserNonClientFrameView::OnBrowserViewInitViewsComplete();
// After views are initialized, we know the top area height for the
// first time, so redraw the frame buttons at the appropriate size.
MaybeRedrawFrameButtons();
}
void OpaqueBrowserFrameView::OnMaximizedStateChanged() {
BrowserNonClientFrameView::OnMaximizedStateChanged();
// The top area height can change depending on the maximized state.
MaybeRedrawFrameButtons();
}
void OpaqueBrowserFrameView::OnFullscreenStateChanged() {
BrowserNonClientFrameView::OnFullscreenStateChanged();
// The top area height is 0 when the window is fullscreened.
MaybeRedrawFrameButtons();
}
gfx::Rect OpaqueBrowserFrameView::GetBoundsForTabStrip(
views::View* tabstrip) const {
if (!tabstrip)
......@@ -357,7 +335,6 @@ void OpaqueBrowserFrameView::ActivationChanged(bool active) {
BrowserNonClientFrameView::ActivationChanged(active);
if (hosted_app_button_container_)
hosted_app_button_container_->SetPaintAsActive(active);
MaybeRedrawFrameButtons();
}
///////////////////////////////////////////////////////////////////////////////
......@@ -377,11 +354,6 @@ void OpaqueBrowserFrameView::GetAccessibleNodeData(ui::AXNodeData* node_data) {
node_data->role = ax::mojom::Role::kTitleBar;
}
void OpaqueBrowserFrameView::OnNativeThemeChanged(
const ui::NativeTheme* native_theme) {
MaybeRedrawFrameButtons();
}
///////////////////////////////////////////////////////////////////////////////
// OpaqueBrowserFrameView, views::ButtonListener implementation:
......@@ -574,8 +546,6 @@ bool OpaqueBrowserFrameView::ShouldPaintAsThemed() const {
platform_observer_->IsUsingSystemTheme();
}
void OpaqueBrowserFrameView::MaybeRedrawFrameButtons() {}
///////////////////////////////////////////////////////////////////////////////
// OpaqueBrowserFrameView, private:
......
......@@ -49,9 +49,6 @@ class OpaqueBrowserFrameView : public BrowserNonClientFrameView,
~OpaqueBrowserFrameView() override;
// BrowserNonClientFrameView:
void OnBrowserViewInitViewsComplete() override;
void OnMaximizedStateChanged() override;
void OnFullscreenStateChanged() override;
gfx::Rect GetBoundsForTabStrip(views::View* tabstrip) const override;
int GetTopInset(bool restored) const override;
int GetThemeBackgroundXInset() const override;
......@@ -76,7 +73,6 @@ class OpaqueBrowserFrameView : public BrowserNonClientFrameView,
const char* GetClassName() const override;
void ChildPreferredSizeChanged(views::View* child) override;
void GetAccessibleNodeData(ui::AXNodeData* node_data) override;
void OnNativeThemeChanged(const ui::NativeTheme* native_theme) override;
// views::ButtonListener:
void ButtonPressed(views::Button* sender, const ui::Event& event) override;
......@@ -127,10 +123,6 @@ class OpaqueBrowserFrameView : public BrowserNonClientFrameView,
OpaqueBrowserFrameViewLayout* layout() { return layout_; }
// If native window frame buttons are enabled, redraws the image resources
// associated with |{minimize,maximize,restore,close}_button_|.
virtual void MaybeRedrawFrameButtons();
private:
friend class HostedAppOpaqueBrowserFrameViewTest;
......
......@@ -147,6 +147,9 @@ class OpaqueBrowserFrameViewLayout : public views::LayoutManager {
ALIGN_TRAILING
};
// views::LayoutManager:
void Layout(views::View* host) override;
bool has_trailing_buttons() const { return has_trailing_buttons_; }
virtual bool ShouldDrawImageMirrored(views::ImageButton* button,
......@@ -189,7 +192,6 @@ class OpaqueBrowserFrameViewLayout : public views::LayoutManager {
void SetView(int id, views::View* view);
// views::LayoutManager:
void Layout(views::View* host) override;
gfx::Size GetPreferredSize(const views::View* host) const override;
void ViewAdded(views::View* host, views::View* view) override;
void ViewRemoved(views::View* host, views::View* view) override;
......
......@@ -89,8 +89,6 @@ BrowserActionsContainer::BrowserActionsContainer(
if (GetSeparatorAreaWidth() > 0) {
separator_ = new views::Separator();
separator_->SetSize(gfx::Size(views::Separator::kThickness,
GetLayoutConstant(LOCATION_BAR_ICON_SIZE)));
AddChildView(separator_);
}
}
......@@ -450,6 +448,8 @@ void BrowserActionsContainer::Layout() {
}
}
if (separator_) {
separator_->SetSize(gfx::Size(views::Separator::kThickness,
GetLayoutConstant(LOCATION_BAR_ICON_SIZE)));
if (width() < GetResizeAreaWidth() + GetSeparatorAreaWidth()) {
separator_->SetVisible(false);
} else {
......
......@@ -1004,7 +1004,6 @@ void DesktopWindowTreeHostX11::SetFullscreen(bool fullscreen) {
if (is_fullscreen_ == fullscreen)
return;
is_fullscreen_ = fullscreen;
OnFullscreenStateChanged();
if (is_fullscreen_)
delayed_resize_task_.Cancel();
......@@ -1370,10 +1369,6 @@ void DesktopWindowTreeHostX11::OnDisplayMetricsChanged(
}
}
void DesktopWindowTreeHostX11::OnMaximizedStateChanged() {}
void DesktopWindowTreeHostX11::OnFullscreenStateChanged() {}
////////////////////////////////////////////////////////////////////////////////
// DesktopWindowTreeHostX11, private:
......@@ -1675,12 +1670,10 @@ void DesktopWindowTreeHostX11::OnWMStateUpdated() {
void DesktopWindowTreeHostX11::UpdateWindowProperties(
const base::flat_set<XAtom>& new_window_properties) {
bool was_minimized = IsMinimized();
bool was_maximized = IsMaximized();
window_properties_ = new_window_properties;
bool is_minimized = IsMinimized();
bool is_maximized = IsMaximized();
// Propagate the window minimization information to the content window, so
// the render side can update its visibility properly. OnWMStateUpdated() is
......@@ -1727,9 +1720,6 @@ void DesktopWindowTreeHostX11::UpdateWindowProperties(
is_always_on_top_ = ui::HasWMSpecProperty(
window_properties_, gfx::GetAtom("_NET_WM_STATE_ABOVE"));
if (was_maximized != is_maximized)
OnMaximizedStateChanged();
// Now that we have different window properties, we may need to relayout the
// window. (The windows code doesn't need this because their window change is
// synchronous.)
......
......@@ -184,12 +184,6 @@ class VIEWS_EXPORT DesktopWindowTreeHostX11
void OnDisplayMetricsChanged(const display::Display& display,
uint32_t changed_metrics) override;
// Called after the window is maximized or restored.
virtual void OnMaximizedStateChanged();
// Called after the window is fullscreened or unfullscreened.
virtual void OnFullscreenStateChanged();
private:
friend class DesktopWindowTreeHostX11HighDPITest;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment