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

Unified Diff: chrome/browser/ui/views/toolbar/toolbar_action_view.cc

Issue 1411833006: Refactoring to make adding ink drop animations easier (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Refactor ink drop animations (nits in ui/views/ Created 5 years, 1 month 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: chrome/browser/ui/views/toolbar/toolbar_action_view.cc
diff --git a/chrome/browser/ui/views/toolbar/toolbar_action_view.cc b/chrome/browser/ui/views/toolbar/toolbar_action_view.cc
index 2843f70437ac9c56e74b22e35113a71b86e3fd36..524fb9525cedfeabefa855b52dad6f68772f4f7d 100644
--- a/chrome/browser/ui/views/toolbar/toolbar_action_view.cc
+++ b/chrome/browser/ui/views/toolbar/toolbar_action_view.cc
@@ -26,6 +26,7 @@
#include "ui/gfx/image/image_skia_operations.h"
#include "ui/gfx/image/image_skia_source.h"
#include "ui/resources/grit/ui_resources.h"
+#include "ui/views/animation/button_ink_drop_delegate.h"
#include "ui/views/controls/button/label_button_border.h"
#include "ui/views/controls/menu/menu_controller.h"
#include "ui/views/controls/menu/menu_model_adapter.h"
@@ -67,6 +68,9 @@ ToolbarActionView::ToolbarActionView(
wants_to_run_(false),
menu_(nullptr),
weak_factory_(this) {
+ scoped_ptr<views::InkDropDelegate> new_ink_drop_delegate(
+ new views::ButtonInkDropDelegate(this, this));
+ SetInkDropDelegate(new_ink_drop_delegate.Pass());
set_id(VIEW_ID_BROWSER_ACTION);
view_controller_->SetDelegate(this);
SetHorizontalAlignment(gfx::ALIGN_CENTER);
@@ -74,6 +78,14 @@ ToolbarActionView::ToolbarActionView(
set_context_menu_controller(this);
+ const int kInkDropLargeSize = 32;
+ const int kInkDropLargeCornerRadius = 5;
+ const int kInkDropSmallSize = 24;
+ const int kInkDropSmallCornerRadius = 2;
+ ink_drop_delegate()->SetInkDropSize(
+ kInkDropLargeSize, kInkDropLargeCornerRadius, kInkDropSmallSize,
+ kInkDropSmallCornerRadius);
+
// We also listen for browser theme changes on linux because a switch from or
// to GTK requires that we regrab our browser action images.
registrar_.Add(
@@ -99,42 +111,31 @@ ToolbarActionView::~ToolbarActionView() {
view_controller_->SetDelegate(nullptr);
}
-gfx::Size ToolbarActionView::GetPreferredSize() const {
- return gfx::Size(ToolbarActionsBar::IconWidth(false),
- ToolbarActionsBar::IconHeight());
+void ToolbarActionView::GetAccessibleState(ui::AXViewState* state) {
+ views::MenuButton::GetAccessibleState(state);
+ state->role = ui::AX_ROLE_BUTTON;
}
-void ToolbarActionView::OnDragDone() {
- views::MenuButton::OnDragDone();
- delegate_->OnToolbarActionViewDragDone();
+scoped_ptr<LabelButtonBorder> ToolbarActionView::CreateDefaultBorder() const {
+ scoped_ptr<LabelButtonBorder> border = LabelButton::CreateDefaultBorder();
+ border->set_insets(gfx::Insets(kBorderInset, kBorderInset,
+ kBorderInset, kBorderInset));
+ return border.Pass();
}
-void ToolbarActionView::ViewHierarchyChanged(
- const ViewHierarchyChangedDetails& details) {
- if (details.is_add && !called_register_command_ && GetFocusManager()) {
- view_controller_->RegisterCommand();
- called_register_command_ = true;
- }
-
- MenuButton::ViewHierarchyChanged(details);
+void ToolbarActionView::OnMouseEntered(const ui::MouseEvent& event) {
+ delegate_->OnMouseEnteredToolbarActionView();
+ views::MenuButton::OnMouseEntered(event);
}
-void ToolbarActionView::GetAccessibleState(ui::AXViewState* state) {
- views::MenuButton::GetAccessibleState(state);
- state->role = ui::AX_ROLE_BUTTON;
+bool ToolbarActionView::ShouldEnterPushedState(const ui::Event& event) {
+ return views::MenuButton::ShouldEnterPushedState(event) &&
+ (base::TimeTicks::Now() - popup_closed_time_).InMilliseconds() >
+ views::kMinimumMsBetweenButtonClicks;
}
-void ToolbarActionView::OnMenuButtonClicked(views::View* sender,
- const gfx::Point& point) {
- if (!view_controller_->IsEnabled(GetCurrentWebContents())) {
- // We should only get a button pressed event with a non-enabled action if
- // the left-click behavior should open the menu.
- DCHECK(view_controller_->DisabledClickOpensMenu());
- context_menu_controller()->ShowContextMenuForView(this, point,
- ui::MENU_SOURCE_NONE);
- } else {
- view_controller_->ExecuteAction(true);
- }
+content::WebContents* ToolbarActionView::GetCurrentWebContents() const {
+ return delegate_->GetCurrentWebContents();
}
void ToolbarActionView::UpdateState() {
@@ -170,6 +171,19 @@ void ToolbarActionView::UpdateState() {
SchedulePaint();
}
+void ToolbarActionView::OnMenuButtonClicked(views::View* sender,
+ const gfx::Point& point) {
+ if (!view_controller_->IsEnabled(GetCurrentWebContents())) {
+ // We should only get a button pressed event with a non-enabled action if
+ // the left-click behavior should open the menu.
+ DCHECK(view_controller_->DisabledClickOpensMenu());
+ context_menu_controller()->ShowContextMenuForView(this, point,
+ ui::MENU_SOURCE_NONE);
+ } else {
+ view_controller_->ExecuteAction(true);
+ }
+}
+
void ToolbarActionView::Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) {
@@ -177,22 +191,22 @@ void ToolbarActionView::Observe(int type,
UpdateState();
}
-void ToolbarActionView::OnMouseEntered(const ui::MouseEvent& event) {
- delegate_->OnMouseEnteredToolbarActionView();
- views::MenuButton::OnMouseEntered(event);
-}
+void ToolbarActionView::AddInkDropLayer(ui::Layer* ink_drop_layer) {
+ SetPaintToLayer(true);
+ SetFillsBoundsOpaquely(false);
+ image()->SetPaintToLayer(true);
+ image()->SetFillsBoundsOpaquely(false);
-bool ToolbarActionView::ShouldEnterPushedState(const ui::Event& event) {
- return views::MenuButton::ShouldEnterPushedState(event) &&
- (base::TimeTicks::Now() - popup_closed_time_).InMilliseconds() >
- views::kMinimumMsBetweenButtonClicks;
+ layer()->Add(ink_drop_layer);
+ layer()->StackAtBottom(ink_drop_layer);
}
-scoped_ptr<LabelButtonBorder> ToolbarActionView::CreateDefaultBorder() const {
- scoped_ptr<LabelButtonBorder> border = LabelButton::CreateDefaultBorder();
- border->set_insets(gfx::Insets(kBorderInset, kBorderInset,
- kBorderInset, kBorderInset));
- return border.Pass();
+void ToolbarActionView::RemoveInkDropLayer(ui::Layer* ink_drop_layer) {
+ layer()->Remove(ink_drop_layer);
+
+ image()->SetFillsBoundsOpaquely(true);
+ image()->SetPaintToLayer(false);
+ SetPaintToLayer(false);
}
gfx::ImageSkia ToolbarActionView::GetIconForTest() {
@@ -204,6 +218,41 @@ void ToolbarActionView::set_context_menu_callback_for_testing(
context_menu_callback = callback;
}
+gfx::Size ToolbarActionView::GetPreferredSize() const {
+ return gfx::Size(ToolbarActionsBar::IconWidth(false),
+ ToolbarActionsBar::IconHeight());
+}
+
+bool ToolbarActionView::OnMousePressed(const ui::MouseEvent& event) {
+ // views::MenuButton actions are only triggered by left mouse clicks.
+ if (event.IsOnlyLeftMouseButton())
+ ink_drop_delegate()->OnAction(views::InkDropState::ACTION_PENDING);
+ return MenuButton::OnMousePressed(event);
+}
+
+void ToolbarActionView::OnGestureEvent(ui::GestureEvent* event) {
+ // While the dropdown menu is showing, the button should not handle gestures.
+ if (menu_)
+ event->StopPropagation();
+ else
+ MenuButton::OnGestureEvent(event);
+}
+
+void ToolbarActionView::OnDragDone() {
+ views::MenuButton::OnDragDone();
+ delegate_->OnToolbarActionViewDragDone();
+}
+
+void ToolbarActionView::ViewHierarchyChanged(
+ const ViewHierarchyChangedDetails& details) {
+ if (details.is_add && !called_register_command_ && GetFocusManager()) {
+ view_controller_->RegisterCommand();
+ called_register_command_ = true;
+ }
+
+ MenuButton::ViewHierarchyChanged(details);
+}
+
views::View* ToolbarActionView::GetAsView() {
return this;
}
@@ -223,10 +272,6 @@ bool ToolbarActionView::IsMenuRunning() const {
return menu_ != nullptr;
}
-content::WebContents* ToolbarActionView::GetCurrentWebContents() const {
- return delegate_->GetCurrentWebContents();
-}
-
void ToolbarActionView::OnPopupShown(bool by_user) {
// If this was through direct user action, we press the menu button.
if (by_user) {
@@ -271,6 +316,10 @@ void ToolbarActionView::ShowContextMenuForView(
DoShowContextMenu(source_type);
}
+gfx::Point ToolbarActionView::CalculateInkDropCenter() const {
+ return GetLocalBounds().CenterPoint();
+}
+
void ToolbarActionView::DoShowContextMenu(
ui::MenuSourceType source_type) {
ui::MenuModel* context_menu_model = view_controller_->GetContextMenu();
@@ -295,6 +344,8 @@ void ToolbarActionView::DoShowContextMenu(
delegate_->GetOverflowReferenceView()->GetWidget() :
GetWidget();
+ ink_drop_delegate()->OnAction(views::InkDropState::ACTIVATED);
+
views::MenuModelAdapter adapter(context_menu_model);
menu_ = adapter.CreateMenu();
menu_runner_.reset(new views::MenuRunner(menu_, run_types));
@@ -306,6 +357,7 @@ void ToolbarActionView::DoShowContextMenu(
source_type) == views::MenuRunner::MENU_DELETED) {
return;
}
+ ink_drop_delegate()->OnAction(views::InkDropState::DEACTIVATED);
menu_runner_.reset();
menu_ = nullptr;
« no previous file with comments | « chrome/browser/ui/views/toolbar/toolbar_action_view.h ('k') | chrome/browser/ui/views/toolbar/toolbar_button.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698