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

Unified Diff: chrome/browser/ui/views/find_bar_view.cc

Issue 1396903003: Added the ripple effect animation to find bar buttons. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed feedback from patch set 3. Created 5 years, 2 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/views/find_bar_view.cc
diff --git a/chrome/browser/ui/views/find_bar_view.cc b/chrome/browser/ui/views/find_bar_view.cc
index 026e3f75e6f0e8617514a2fd238ea9dd928c8643..17c95a8be229e602f8c29588633906ec1a217ac2 100644
--- a/chrome/browser/ui/views/find_bar_view.cc
+++ b/chrome/browser/ui/views/find_bar_view.cc
@@ -36,6 +36,9 @@
#include "ui/native_theme/common_theme.h"
#include "ui/native_theme/native_theme.h"
#include "ui/resources/grit/ui_resources.h"
+#include "ui/views/animation/ink_drop_animation_controller.h"
+#include "ui/views/animation/ink_drop_animation_controller_factory.h"
+#include "ui/views/animation/ink_drop_host.h"
#include "ui/views/background.h"
#include "ui/views/border.h"
#include "ui/views/bubble/bubble_border.h"
@@ -97,6 +100,26 @@ const SkColor kSeparatorColor = SkColorSetARGB(0x26, 0, 0, 0);
// number brings the width on a "regular fonts" system to about 300px.
const int kDefaultCharWidth = 43;
+class FindBarButton : public views::ImageButton, public views::InkDropHost {
+ public:
+ explicit FindBarButton(views::ButtonListener* listener);
+ ~FindBarButton() override;
+
+ private:
+ void Layout() override;
+ void AddInkDropLayer(ui::Layer* ink_drop_layer) override;
+ void RemoveInkDropLayer(ui::Layer* ink_drop_layer) override;
+ bool OnMousePressed(const ui::MouseEvent& event) override;
+ void OnGestureEvent(ui::GestureEvent* event) override;
+ void OnMouseReleased(const ui::MouseEvent& event) override;
+ void NotifyClick(const ui::Event& event) override;
+
+ // Animation controller for the ink drop ripple effect.
+ scoped_ptr<views::InkDropAnimationController> ink_drop_animation_controller_;
+
+ DISALLOW_COPY_AND_ASSIGN(FindBarButton);
+};
+
// The match count label is like a normal label, but can process events (which
// makes it easier to forward events to the text input --- see
// FindBarView::TargetForRect).
@@ -115,6 +138,104 @@ class MatchCountLabel : public views::Label {
} // namespace
////////////////////////////////////////////////////////////////////////////////
+// FindBarButton, public:
+
+FindBarButton::FindBarButton(views::ButtonListener* listener)
+ : views::ImageButton(listener),
+ ink_drop_animation_controller_(
+ views::InkDropAnimationControllerFactory::
+ CreateInkDropAnimationController(this)) {
+ const int kInkDropLargeSize = 32;
+ const int kInkDropLargeCornerRadius = 4;
+ const int kInkDropSmallSize = 24;
+ const int kInkDropSmallCornerRadius = 2;
+
+ ink_drop_animation_controller_->SetInkDropSize(
+ gfx::Size(kInkDropLargeSize, kInkDropLargeSize),
+ kInkDropLargeCornerRadius,
+ gfx::Size(kInkDropSmallSize, kInkDropSmallSize),
+ kInkDropSmallCornerRadius);
+}
+
+FindBarButton::~FindBarButton() {}
+
+////////////////////////////////////////////////////////////////////////////////
+// FindBarButton, private:
+
+void FindBarButton::Layout() {
+ ImageButton::Layout();
+
+ ink_drop_animation_controller_->SetInkDropCenter(
+ GetLocalBounds().CenterPoint());
+}
+
+void FindBarButton::AddInkDropLayer(ui::Layer* ink_drop_layer) {
+ SetPaintToLayer(true);
+ SetFillsBoundsOpaquely(false);
+ layer()->Add(ink_drop_layer);
+ layer()->StackAtBottom(ink_drop_layer);
+}
+
+void FindBarButton::RemoveInkDropLayer(ui::Layer* ink_drop_layer) {
+ layer()->Remove(ink_drop_layer);
+ SetFillsBoundsOpaquely(true);
+ SetPaintToLayer(false);
+}
+
+bool FindBarButton::OnMousePressed(const ui::MouseEvent& event) {
+ if (IsTriggerableEvent(event)) {
+ ink_drop_animation_controller_->AnimateToState(
+ views::InkDropState::ACTION_PENDING);
+ }
+
+ return ImageButton::OnMousePressed(event);
+}
+
+void FindBarButton::OnGestureEvent(ui::GestureEvent* event) {
+ views::InkDropState ink_drop_state = views::InkDropState::HIDDEN;
+ switch (event->type()) {
+ case ui::ET_GESTURE_TAP_DOWN:
+ ink_drop_state = views::InkDropState::ACTION_PENDING;
+ // The ui::ET_GESTURE_TAP_DOWN event needs to be marked as handled so
+ // that subsequent events for the gesture are sent to |this|.
+ event->SetHandled();
+ break;
+ case ui::ET_GESTURE_LONG_PRESS:
+ ink_drop_state = views::InkDropState::SLOW_ACTION_PENDING;
+ break;
+ case ui::ET_GESTURE_TAP:
+ ink_drop_state = views::InkDropState::QUICK_ACTION;
+ break;
+ case ui::ET_GESTURE_LONG_TAP:
+ ink_drop_state = views::InkDropState::SLOW_ACTION;
+ break;
+ case ui::ET_GESTURE_END:
+ case ui::ET_GESTURE_TAP_CANCEL:
+ ink_drop_state = views::InkDropState::HIDDEN;
+ break;
+ default:
+ return;
+ }
+ ink_drop_animation_controller_->AnimateToState(ink_drop_state);
+
+ ImageButton::OnGestureEvent(event);
+}
+
+void FindBarButton::OnMouseReleased(const ui::MouseEvent& event) {
+ if (!HitTestPoint(event.location()))
+ ink_drop_animation_controller_->AnimateToState(views::InkDropState::HIDDEN);
+
+ ImageButton::OnMouseReleased(event);
+}
+
+void FindBarButton::NotifyClick(const ui::Event& event) {
+ ink_drop_animation_controller_->AnimateToState(
+ views::InkDropState::QUICK_ACTION);
+
+ ImageButton::NotifyClick(event);
+}
+
+////////////////////////////////////////////////////////////////////////////////
// FindBarView, public:
FindBarView::FindBarView(FindBarHost* host)
@@ -133,7 +254,7 @@ FindBarView::FindBarView(FindBarHost* host)
find_text_->SetTextInputFlags(ui::TEXT_INPUT_FLAG_AUTOCORRECT_OFF);
AddChildView(find_text_);
- find_previous_button_ = new views::ImageButton(this);
+ find_previous_button_ = new FindBarButton(this);
find_previous_button_->set_tag(FIND_PREVIOUS_TAG);
find_previous_button_->SetFocusable(true);
find_previous_button_->SetTooltipText(
@@ -142,7 +263,7 @@ FindBarView::FindBarView(FindBarHost* host)
l10n_util::GetStringUTF16(IDS_ACCNAME_PREVIOUS));
AddChildView(find_previous_button_);
- find_next_button_ = new views::ImageButton(this);
+ find_next_button_ = new FindBarButton(this);
find_next_button_->set_tag(FIND_NEXT_TAG);
find_next_button_->SetFocusable(true);
find_next_button_->SetTooltipText(
@@ -151,7 +272,7 @@ FindBarView::FindBarView(FindBarHost* host)
l10n_util::GetStringUTF16(IDS_ACCNAME_NEXT));
AddChildView(find_next_button_);
- close_button_ = new views::ImageButton(this);
+ close_button_ = new FindBarButton(this);
close_button_->set_tag(CLOSE_TAG);
close_button_->SetFocusable(true);
close_button_->SetTooltipText(
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698