Commit a7a8f028 authored by Dana Fried's avatar Dana Fried Committed by Commit Bot

Fix animation issues with extensions container.

This leverages some new built-in functionality in FlexLayout and
AnimatingLayoutManager to make the icon container behave the way we want
it to in most (hopefully all!) cases.

Bug: 995448
Change-Id: I349f1e3dd57669848f936e9b531797bc087bad50
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1968244Reviewed-by: default avatarCaroline Rising <corising@chromium.org>
Commit-Queue: Dana Fried <dfried@chromium.org>
Cr-Commit-Position: refs/heads/master@{#725610}
parent 8a2572ba
...@@ -15,6 +15,9 @@ ...@@ -15,6 +15,9 @@
#include "chrome/browser/ui/views/extensions/extensions_toolbar_button.h" #include "chrome/browser/ui/views/extensions/extensions_toolbar_button.h"
#include "chrome/browser/ui/views/toolbar/toolbar_actions_bar_bubble_views.h" #include "chrome/browser/ui/views/toolbar/toolbar_actions_bar_bubble_views.h"
#include "ui/views/layout/animating_layout_manager.h" #include "ui/views/layout/animating_layout_manager.h"
#include "ui/views/layout/flex_layout.h"
#include "ui/views/layout/flex_layout_types.h"
#include "ui/views/view_class_properties.h"
#include "ui/views/widget/widget_observer.h" #include "ui/views/widget/widget_observer.h"
struct ExtensionsToolbarContainer::DropInfo { struct ExtensionsToolbarContainer::DropInfo {
...@@ -41,7 +44,16 @@ ExtensionsToolbarContainer::ExtensionsToolbarContainer(Browser* browser) ...@@ -41,7 +44,16 @@ ExtensionsToolbarContainer::ExtensionsToolbarContainer(Browser* browser)
model_observer_.Add(model_); model_observer_.Add(model_);
// Do not flip the Extensions icon in RTL. // Do not flip the Extensions icon in RTL.
extensions_button_->EnableCanvasFlippingForRTLUI(false); extensions_button_->EnableCanvasFlippingForRTLUI(false);
extensions_button_->SetProperty(views::kFlexBehaviorKey,
views::FlexSpecification());
AddMainButton(extensions_button_); AddMainButton(extensions_button_);
target_layout_manager()
->SetFlexAllocationOrder(views::FlexAllocationOrder::kReverse)
.SetDefault(views::kFlexBehaviorKey,
views::FlexSpecification::ForSizeRule(
views::MinimumFlexSizeRule::kPreferredSnapToZero,
views::MaximumFlexSizeRule::kPreferred)
.WithWeight(0));
CreateActions(); CreateActions();
// TODO(pbos): Consider splitting out tab-strip observing into another class. // TODO(pbos): Consider splitting out tab-strip observing into another class.
......
...@@ -9,6 +9,8 @@ ...@@ -9,6 +9,8 @@
#include "ui/gfx/animation/animation_delegate.h" #include "ui/gfx/animation/animation_delegate.h"
#include "ui/views/controls/button/button.h" #include "ui/views/controls/button/button.h"
#include "ui/views/controls/button/button_observer.h" #include "ui/views/controls/button/button_observer.h"
#include "ui/views/layout/animating_layout_manager.h"
#include "ui/views/layout/flex_layout.h"
#include "ui/views/view.h" #include "ui/views/view.h"
// A general view container for any type of toolbar icons. // A general view container for any type of toolbar icons.
...@@ -53,6 +55,17 @@ class ToolbarIconContainerView : public views::View, ...@@ -53,6 +55,17 @@ class ToolbarIconContainerView : public views::View,
bool uses_highlight() { return uses_highlight_; } bool uses_highlight() { return uses_highlight_; }
// Provides access to the animating layout manager for subclasses.
views::AnimatingLayoutManager* animating_layout_manager() {
return static_cast<views::AnimatingLayoutManager*>(GetLayoutManager());
}
// Provides access to the flex layout in the animating layout manager.
views::FlexLayout* target_layout_manager() {
return static_cast<views::FlexLayout*>(
animating_layout_manager()->target_layout_manager());
}
static const char kToolbarIconContainerViewClassName[]; static const char kToolbarIconContainerViewClassName[];
protected: protected:
......
...@@ -707,10 +707,7 @@ void ToolbarView::InitLayout() { ...@@ -707,10 +707,7 @@ void ToolbarView::InitLayout() {
views::MinimumFlexSizeRule::kScaleToMinimum, views::MinimumFlexSizeRule::kScaleToMinimum,
views::MaximumFlexSizeRule::kUnbounded) views::MaximumFlexSizeRule::kUnbounded)
.WithOrder(2); .WithOrder(2);
const views::FlexSpecification browser_actions_flex_rule = constexpr int kExtensionsFlexOrder = 3;
views::FlexSpecification::ForCustomRule(
BrowserActionsContainer::GetFlexRule())
.WithOrder(3);
layout_manager_ = SetLayoutManager(std::make_unique<views::FlexLayout>()); layout_manager_ = SetLayoutManager(std::make_unique<views::FlexLayout>());
...@@ -724,11 +721,25 @@ void ToolbarView::InitLayout() { ...@@ -724,11 +721,25 @@ void ToolbarView::InitLayout() {
gfx::Insets(0, location_bar_margin)); gfx::Insets(0, location_bar_margin));
if (browser_actions_) { if (browser_actions_) {
const views::FlexSpecification browser_actions_flex_rule =
views::FlexSpecification::ForCustomRule(
BrowserActionsContainer::GetFlexRule())
.WithOrder(kExtensionsFlexOrder);
browser_actions_->SetProperty(views::kFlexBehaviorKey, browser_actions_->SetProperty(views::kFlexBehaviorKey,
browser_actions_flex_rule); browser_actions_flex_rule);
browser_actions_->SetProperty(views::kMarginsKey, gfx::Insets()); browser_actions_->SetProperty(views::kMarginsKey, gfx::Insets());
browser_actions_->SetProperty(views::kInternalPaddingKey, browser_actions_->SetProperty(views::kInternalPaddingKey,
gfx::Insets(0, location_bar_margin)); gfx::Insets(0, location_bar_margin));
} else if (extensions_container_) {
const views::FlexSpecification extensions_flex_rule =
views::FlexSpecification::ForCustomRule(
extensions_container_->animating_layout_manager()
->GetDefaultFlexRule())
.WithOrder(kExtensionsFlexOrder);
extensions_container_->SetProperty(views::kFlexBehaviorKey,
extensions_flex_rule);
} }
if (toolbar_account_icon_container_) { if (toolbar_account_icon_container_) {
......
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