Commit d97c6700 authored by Tom Anderson's avatar Tom Anderson Committed by Commit Bot

Relayout new tab button when MD mode changes

BUG=737995,881371
TBR=pkasting

Change-Id: Ifd8b41626747ae8e52fd7db67e86af5d87b9994f
Reviewed-on: https://chromium-review.googlesource.com/1255594Reviewed-by: default avatarThomas Anderson <thomasanderson@chromium.org>
Commit-Queue: Thomas Anderson <thomasanderson@chromium.org>
Cr-Commit-Position: refs/heads/master@{#595600}
parent 367a97eb
...@@ -34,11 +34,8 @@ ...@@ -34,11 +34,8 @@
#include "chrome/browser/ui/views/feature_promos/new_tab_promo_bubble_view.h" #include "chrome/browser/ui/views/feature_promos/new_tab_promo_bubble_view.h"
#endif #endif
namespace { // static
const gfx::Size NewTabButton::kButtonSize{28, 28};
constexpr gfx::Size kButtonSize(28, 28);
} // namespace
NewTabButton::NewTabButton(TabStrip* tab_strip, views::ButtonListener* listener) NewTabButton::NewTabButton(TabStrip* tab_strip, views::ButtonListener* listener)
: views::ImageButton(listener), tab_strip_(tab_strip) { : views::ImageButton(listener), tab_strip_(tab_strip) {
...@@ -57,14 +54,6 @@ NewTabButton::NewTabButton(TabStrip* tab_strip, views::ButtonListener* listener) ...@@ -57,14 +54,6 @@ NewTabButton::NewTabButton(TabStrip* tab_strip, views::ButtonListener* listener)
SetFocusPainter(nullptr); SetFocusPainter(nullptr);
SetInstallFocusRingOnFocus(true); SetInstallFocusRingOnFocus(true);
// The button is placed vertically exactly in the center of the tabstrip.
const int extra_vertical_space = GetLayoutConstant(TAB_HEIGHT) -
GetLayoutConstant(TABSTRIP_TOOLBAR_OVERLAP) -
kButtonSize.height();
constexpr int kHorizontalInset = 8;
SetBorder(views::CreateEmptyBorder(gfx::Insets(
extra_vertical_space / 2, kHorizontalInset, 0, kHorizontalInset)));
} }
NewTabButton::~NewTabButton() { NewTabButton::~NewTabButton() {
......
...@@ -25,6 +25,8 @@ class NewTabButton : public views::ImageButton, ...@@ -25,6 +25,8 @@ class NewTabButton : public views::ImageButton,
public views::MaskedTargeterDelegate, public views::MaskedTargeterDelegate,
public views::WidgetObserver { public views::WidgetObserver {
public: public:
static const gfx::Size kButtonSize;
NewTabButton(TabStrip* tab_strip, views::ButtonListener* listener); NewTabButton(TabStrip* tab_strip, views::ButtonListener* listener);
~NewTabButton() override; ~NewTabButton() override;
......
...@@ -266,6 +266,7 @@ TabStrip::TabStrip(std::unique_ptr<TabStripController> controller) ...@@ -266,6 +266,7 @@ TabStrip::TabStrip(std::unique_ptr<TabStripController> controller)
: controller_(std::move(controller)) { : controller_(std::move(controller)) {
Init(); Init();
SetEventTargeter(std::make_unique<views::ViewTargeter>(this)); SetEventTargeter(std::make_unique<views::ViewTargeter>(this));
md_observer_.Add(ui::MaterialDesignController::GetInstance());
} }
TabStrip::~TabStrip() { TabStrip::~TabStrip() {
...@@ -1464,6 +1465,7 @@ void TabStrip::Init() { ...@@ -1464,6 +1465,7 @@ void TabStrip::Init() {
std::make_unique<views::ViewTargeter>(new_tab_button_)); std::make_unique<views::ViewTargeter>(new_tab_button_));
AddChildView(new_tab_button_); AddChildView(new_tab_button_);
UpdateNewTabButtonBorder();
new_tab_button_bounds_.set_size(new_tab_button_->GetPreferredSize()); new_tab_button_bounds_.set_size(new_tab_button_->GetPreferredSize());
if (g_drop_indicator_width == 0) { if (g_drop_indicator_width == 0) {
...@@ -2433,6 +2435,16 @@ void TabStrip::SetResetToShrinkOnExit(bool value) { ...@@ -2433,6 +2435,16 @@ void TabStrip::SetResetToShrinkOnExit(bool value) {
RemoveMessageLoopObserver(); RemoveMessageLoopObserver();
} }
void TabStrip::UpdateNewTabButtonBorder() {
// The button is placed vertically exactly in the center of the tabstrip.
const int extra_vertical_space = GetLayoutConstant(TAB_HEIGHT) -
GetLayoutConstant(TABSTRIP_TOOLBAR_OVERLAP) -
NewTabButton::kButtonSize.height();
constexpr int kHorizontalInset = 8;
new_tab_button_->SetBorder(views::CreateEmptyBorder(gfx::Insets(
extra_vertical_space / 2, kHorizontalInset, 0, kHorizontalInset)));
}
void TabStrip::SingleTabModeChanged() { void TabStrip::SingleTabModeChanged() {
const int active_tab_index = controller_->GetActiveIndex(); const int active_tab_index = controller_->GetActiveIndex();
if (IsValidModelIndex(active_tab_index)) if (IsValidModelIndex(active_tab_index))
...@@ -2597,3 +2609,10 @@ views::View* TabStrip::TargetForRect(views::View* root, const gfx::Rect& rect) { ...@@ -2597,3 +2609,10 @@ views::View* TabStrip::TargetForRect(views::View* root, const gfx::Rect& rect) {
} }
return this; return this;
} }
void TabStrip::OnMdModeChanged() {
UpdateNewTabButtonBorder();
new_tab_button_bounds_.set_size(new_tab_button_->GetPreferredSize());
new_tab_button_->SetBoundsRect(new_tab_button_bounds_);
StopAnimating(true);
}
...@@ -13,12 +13,14 @@ ...@@ -13,12 +13,14 @@
#include "base/macros.h" #include "base/macros.h"
#include "base/memory/ref_counted.h" #include "base/memory/ref_counted.h"
#include "base/observer_list.h" #include "base/observer_list.h"
#include "base/scoped_observer.h"
#include "base/timer/timer.h" #include "base/timer/timer.h"
#include "chrome/browser/ui/tabs/tab_utils.h" #include "chrome/browser/ui/tabs/tab_utils.h"
#include "chrome/browser/ui/views/frame/browser_root_view.h" #include "chrome/browser/ui/views/frame/browser_root_view.h"
#include "chrome/browser/ui/views/tabs/tab.h" #include "chrome/browser/ui/views/tabs/tab.h"
#include "chrome/browser/ui/views/tabs/tab_controller.h" #include "chrome/browser/ui/views/tabs/tab_controller.h"
#include "chrome/browser/ui/views/tabs/tab_strip.h" #include "chrome/browser/ui/views/tabs/tab_strip.h"
#include "ui/base/material_design/material_design_controller_observer.h"
#include "ui/gfx/animation/animation_container.h" #include "ui/gfx/animation/animation_container.h"
#include "ui/gfx/color_palette.h" #include "ui/gfx/color_palette.h"
#include "ui/gfx/geometry/point.h" #include "ui/gfx/geometry/point.h"
...@@ -63,7 +65,8 @@ class TabStrip : public views::View, ...@@ -63,7 +65,8 @@ class TabStrip : public views::View,
public views::MouseWatcherListener, public views::MouseWatcherListener,
public views::ViewTargeterDelegate, public views::ViewTargeterDelegate,
public TabController, public TabController,
public BrowserRootView::DropTarget { public BrowserRootView::DropTarget,
public ui::MaterialDesignControllerObserver {
public: public:
explicit TabStrip(std::unique_ptr<TabStripController> controller); explicit TabStrip(std::unique_ptr<TabStripController> controller);
~TabStrip() override; ~TabStrip() override;
...@@ -559,10 +562,14 @@ class TabStrip : public views::View, ...@@ -559,10 +562,14 @@ class TabStrip : public views::View,
// layout is reset. // layout is reset.
void SetResetToShrinkOnExit(bool value); void SetResetToShrinkOnExit(bool value);
// views::ButtonListener implementation: // Updates the border padding for |new_tab_button_|. This should be called
// whenever any input of the computation of the border's sizing changes.
void UpdateNewTabButtonBorder();
// views::ButtonListener:
void ButtonPressed(views::Button* sender, const ui::Event& event) override; void ButtonPressed(views::Button* sender, const ui::Event& event) override;
// View overrides. // views::View:
const views::View* GetViewByID(int id) const override; const views::View* GetViewByID(int id) const override;
bool OnMousePressed(const ui::MouseEvent& event) override; bool OnMousePressed(const ui::MouseEvent& event) override;
bool OnMouseDragged(const ui::MouseEvent& event) override; bool OnMouseDragged(const ui::MouseEvent& event) override;
...@@ -571,12 +578,15 @@ class TabStrip : public views::View, ...@@ -571,12 +578,15 @@ class TabStrip : public views::View,
void OnMouseMoved(const ui::MouseEvent& event) override; void OnMouseMoved(const ui::MouseEvent& event) override;
void OnMouseEntered(const ui::MouseEvent& event) override; void OnMouseEntered(const ui::MouseEvent& event) override;
// ui::EventHandler overrides. // ui::EventHandler:
void OnGestureEvent(ui::GestureEvent* event) override; void OnGestureEvent(ui::GestureEvent* event) override;
// views::ViewTargeterDelegate: // views::ViewTargeterDelegate:
views::View* TargetForRect(views::View* root, const gfx::Rect& rect) override; views::View* TargetForRect(views::View* root, const gfx::Rect& rect) override;
// ui::MaterialDesignControllerObserver:
void OnMdModeChanged() override;
// -- Member Variables ------------------------------------------------------ // -- Member Variables ------------------------------------------------------
base::ObserverList<TabStripObserver>::Unchecked observers_; base::ObserverList<TabStripObserver>::Unchecked observers_;
...@@ -688,6 +698,10 @@ class TabStrip : public views::View, ...@@ -688,6 +698,10 @@ class TabStrip : public views::View,
SkColor separator_color_ = gfx::kPlaceholderColor; SkColor separator_color_ = gfx::kPlaceholderColor;
ScopedObserver<ui::MaterialDesignController,
ui::MaterialDesignControllerObserver>
md_observer_{this};
DISALLOW_COPY_AND_ASSIGN(TabStrip); DISALLOW_COPY_AND_ASSIGN(TabStrip);
}; };
......
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