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

Unified Diff: ash/shelf/app_list_button.cc

Issue 2070143003: Add MD ink drop ripple to app list button (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@b612539_shelf_button_ripple
Patch Set: Rebased Created 4 years, 6 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
Index: ash/shelf/app_list_button.cc
diff --git a/ash/shelf/app_list_button.cc b/ash/shelf/app_list_button.cc
index 885b534f0ef1a4b3aea6bb8ff317e35c747a1fdc..96f47a602e6960713927e0f51f03542afc1b529d 100644
--- a/ash/shelf/app_list_button.cc
+++ b/ash/shelf/app_list_button.cc
@@ -26,6 +26,7 @@
#include "ui/gfx/canvas.h"
#include "ui/gfx/paint_vector_icon.h"
#include "ui/gfx/vector_icons_public.h"
+#include "ui/views/animation/square_ink_drop_ripple.h"
#include "ui/views/painter.h"
namespace ash {
@@ -39,6 +40,10 @@ AppListButton::AppListButton(InkDropButtonListener* listener,
draw_background_as_active_(false),
listener_(listener),
shelf_view_(shelf_view) {
+ if (ash::MaterialDesignController::IsShelfMaterial()) {
+ SetHasInkDrop(true, false);
+ set_ink_drop_base_color(kShelfInkDropBaseColor);
+ }
SetAccessibleName(
app_list::switches::IsExperimentalAppListEnabled()
? l10n_util::GetStringUTF16(IDS_ASH_SHELF_APP_LIST_LAUNCHER_TITLE)
@@ -52,6 +57,14 @@ AppListButton::AppListButton(InkDropButtonListener* listener,
AppListButton::~AppListButton() {}
+void AppListButton::OnAppListShown() {
+ AnimateInkDrop(views::InkDropState::ACTIVATED);
+}
+
+void AppListButton::OnAppListDismissed() {
+ AnimateInkDrop(views::InkDropState::DEACTIVATED);
+}
+
bool AppListButton::OnMousePressed(const ui::MouseEvent& event) {
ImageButton::OnMousePressed(event);
shelf_view_->PointerPressedOnButton(this, ShelfView::MOUSE, event);
@@ -75,10 +88,14 @@ bool AppListButton::OnMouseDragged(const ui::MouseEvent& event) {
}
void AppListButton::OnGestureEvent(ui::GestureEvent* event) {
+ bool is_material = ash::MaterialDesignController::IsShelfMaterial();
bruthig 2016/06/17 17:58:45 nit: const, same below
mohsen 2016/06/18 06:25:15 Done.
+ bool touch_feedback = !is_material && switches::IsTouchFeedbackEnabled();
switch (event->type()) {
case ui::ET_GESTURE_SCROLL_BEGIN:
- if (switches::IsTouchFeedbackEnabled())
+ if (touch_feedback)
SetDrawBackgroundAsActive(false);
+ else if (is_material)
+ AnimateInkDrop(views::InkDropState::HIDDEN);
shelf_view_->PointerPressedOnButton(this, ShelfView::TOUCH, *event);
event->SetHandled();
return;
@@ -92,15 +109,19 @@ void AppListButton::OnGestureEvent(ui::GestureEvent* event) {
event->SetHandled();
return;
case ui::ET_GESTURE_TAP_DOWN:
- if (switches::IsTouchFeedbackEnabled())
+ if (touch_feedback)
SetDrawBackgroundAsActive(true);
+ else if (is_material && !Shell::GetInstance()->IsApplistVisible())
+ AnimateInkDrop(views::InkDropState::ACTION_PENDING);
ImageButton::OnGestureEvent(event);
break;
case ui::ET_GESTURE_TAP_CANCEL:
case ui::ET_GESTURE_TAP:
- if (switches::IsTouchFeedbackEnabled())
+ if (touch_feedback)
SetDrawBackgroundAsActive(false);
ImageButton::OnGestureEvent(event);
+ if (is_material && !Shell::GetInstance()->GetAppListTargetVisibility())
+ AnimateInkDrop(views::InkDropState::HIDDEN);
bruthig 2016/06/17 17:58:45 What's the use case for this? Won't the ripple be
mohsen 2016/06/18 06:25:15 I guess this was needed for when default gesture h
break;
default:
ImageButton::OnGestureEvent(event);
@@ -149,17 +170,6 @@ void AppListButton::PaintBackgroundMD(gfx::Canvas* canvas) {
canvas->DrawCircle(circle_center, kAppListButtonBackgroundRadius,
background_paint);
-
- if (Shell::GetInstance()->GetAppListTargetVisibility() ||
- draw_background_as_active_) {
- SkPaint highlight_paint;
- highlight_paint.setColor(kShelfButtonActivatedHighlightColor);
- highlight_paint.setFlags(SkPaint::kAntiAlias_Flag);
- highlight_paint.setStyle(SkPaint::kFill_Style);
-
- canvas->DrawCircle(circle_center, kAppListButtonBackgroundRadius,
- highlight_paint);
- }
}
void AppListButton::PaintForegroundMD(gfx::Canvas* canvas,
@@ -241,12 +251,35 @@ void AppListButton::GetAccessibleState(ui::AXViewState* state) {
state->name = shelf_view_->GetTitleForView(this);
}
+std::unique_ptr<views::InkDropRipple> AppListButton::CreateInkDropRipple()
+ const {
+ // TODO(mohsen): A circular SquareInkDropRipple is created with equal small
+ // and large sizes to mimic a circular flood fill. Replace with an actual
+ // flood fill when circular flood fills are implemented.
+ auto ink_drop_ripple = new views::SquareInkDropRipple(
+ gfx::Size(kAppListButtonBackgroundRadius * 2,
+ kAppListButtonBackgroundRadius * 2),
+ 0, gfx::Size(2 * kAppListButtonBackgroundRadius,
+ 2 * kAppListButtonBackgroundRadius),
+ 0, GetInkDropCenter(), GetInkDropBaseColor());
+ ink_drop_ripple->set_activated_shape(views::SquareInkDropRipple::CIRCLE);
+ return base::WrapUnique(ink_drop_ripple);
+}
+
void AppListButton::NotifyClick(const ui::Event& event) {
ImageButton::NotifyClick(event);
if (listener_)
listener_->ButtonPressed(this, event, ink_drop());
}
+bool AppListButton::ShouldEnterPushedState(const ui::Event& event) {
+ return !Shell::GetInstance()->IsApplistVisible();
+}
+
+bool AppListButton::ShouldShowInkDropHighlight() const {
+ return false;
+}
+
void AppListButton::SetDrawBackgroundAsActive(
bool draw_background_as_active) {
if (draw_background_as_active_ == draw_background_as_active)
« no previous file with comments | « ash/shelf/app_list_button.h ('k') | ash/shelf/shelf.h » ('j') | ash/shelf/shelf_view.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698