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

Unified Diff: ash/common/system/tray/tray_background_view.cc

Issue 2499453002: Add ink drop ripple to overview mode button (Closed)
Patch Set: Rebased Created 4 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: ash/common/system/tray/tray_background_view.cc
diff --git a/ash/common/system/tray/tray_background_view.cc b/ash/common/system/tray/tray_background_view.cc
index 727b1ae57d1dd317b82a6d566d01702d389ecdf5..cf52b94756457b0ce779e8acc491cf5f05e72c42 100644
--- a/ash/common/system/tray/tray_background_view.cc
+++ b/ash/common/system/tray/tray_background_view.cc
@@ -33,6 +33,8 @@
#include "ui/gfx/scoped_canvas.h"
#include "ui/gfx/skia_util.h"
#include "ui/gfx/transform.h"
+#include "ui/views/animation/flood_fill_ink_drop_ripple.h"
+#include "ui/views/animation/ink_drop_highlight.h"
#include "ui/views/background.h"
#include "ui/views/layout/box_layout.h"
#include "ui/wm/core/window_animations.h"
@@ -53,6 +55,20 @@ const int kShowAnimationDelayMs = 100;
// and overview button dark background.
const int kBackgroundAdjustPadding = 3;
+const gfx::Rect GetBackgroundBounds(const gfx::Rect& local_bounds,
+ ash::ShelfAlignment shelf_alignment) {
+ if (IsHorizontalAlignment(shelf_alignment)) {
+ return gfx::Rect(local_bounds.x() + ash::kHitRegionPadding,
+ local_bounds.y(),
+ local_bounds.width() - ash::kHitRegionPadding -
+ ash::kHitRegionPadding - ash::kSeparatorWidth,
+ local_bounds.height());
+ }
+ return gfx::Rect(local_bounds.x(), local_bounds.y() + ash::kHitRegionPadding,
+ local_bounds.width(),
+ local_bounds.height() - ash::kHitRegionPadding -
+ ash::kHitRegionPadding - ash::kSeparatorWidth);
+}
} // namespace
using views::TrayBubbleView;
@@ -94,8 +110,10 @@ class TrayBackground : public views::Background {
const static int kImageVertical = 1;
const static int kNumOrientations = 2;
- explicit TrayBackground(TrayBackgroundView* tray_background_view)
- : tray_background_view_(tray_background_view), alpha_(0) {}
+ TrayBackground(TrayBackgroundView* tray_background_view, bool draws_active)
+ : tray_background_view_(tray_background_view),
+ draws_active_(draws_active),
+ alpha_(0) {}
~TrayBackground() override {}
@@ -108,26 +126,12 @@ class TrayBackground : public views::Background {
SkPaint background_paint;
background_paint.setFlags(SkPaint::kAntiAlias_Flag);
background_paint.setColor(SkColorSetA(kShelfBaseColor, alpha_));
- gfx::Rect bounds;
gfx::Rect local_bounds = view->GetLocalBounds();
-
- // The hit region are padded to the |view| as insets, so they are included
- // in the local bounds. Remove these regions from view because hit region is
- // invisible.
- if (IsHorizontalAlignment(GetShelf()->GetAlignment())) {
- bounds = gfx::Rect(local_bounds.x() + kHitRegionPadding, local_bounds.y(),
- local_bounds.width() - kHitRegionPadding -
- kHitRegionPadding - kSeparatorWidth,
- local_bounds.height());
- } else {
- bounds = gfx::Rect(local_bounds.x(), local_bounds.y() + kHitRegionPadding,
- local_bounds.width(),
- local_bounds.height() - kHitRegionPadding -
- kHitRegionPadding - kSeparatorWidth);
- }
+ gfx::Rect bounds =
+ GetBackgroundBounds(local_bounds, GetShelf()->GetAlignment());
canvas->DrawRoundRect(bounds, kTrayRoundedBorderRadius, background_paint);
- if (tray_background_view_->draw_background_as_active()) {
+ if (draws_active_ && tray_background_view_->is_active()) {
SkPaint highlight_paint;
highlight_paint.setFlags(SkPaint::kAntiAlias_Flag);
highlight_paint.setColor(kShelfButtonActivatedHighlightColor);
@@ -157,7 +161,7 @@ class TrayBackground : public views::Background {
: kImageVertical;
int state = kImageTypeDefault;
- if (tray_background_view_->draw_background_as_active())
+ if (draws_active_ && tray_background_view_->is_active())
state = kImageTypePressed;
else if (shelf->IsDimmed())
state = kImageTypeOnBlack;
@@ -179,6 +183,13 @@ class TrayBackground : public views::Background {
// Reference to the TrayBackgroundView for which this is a background.
TrayBackgroundView* tray_background_view_;
+ // Determines whether we should draw an active background for the view when it
+ // is active. This is used in non-MD mode. In material design mode, an active
+ // ink drop ripple would indicate if the view is active or not.
+ // TODO(mohsen): This is used only in non-MD version. Remove when non-MD code
+ // is removed (see https://crbug.com/614453).
+ bool draws_active_;
+
int alpha_;
DISALLOW_COPY_AND_ASSIGN(TrayBackground);
@@ -256,11 +267,13 @@ TrayBackgroundView::TrayBackgroundView(WmShelf* wm_shelf)
tray_container_(NULL),
shelf_alignment_(SHELF_ALIGNMENT_BOTTOM),
background_(NULL),
- draw_background_as_active_(false),
+ is_active_(false),
is_separator_visible_(false),
widget_observer_(new TrayWidgetObserver(this)) {
DCHECK(wm_shelf_);
set_notify_enter_exit_on_child(true);
+ set_ink_drop_base_color(kShelfInkDropBaseColor);
+ set_ink_drop_visible_opacity(kShelfInkDropVisibleOpacity);
tray_container_ = new TrayContainer(shelf_alignment_);
SetContents(tray_container_);
@@ -364,23 +377,36 @@ void TrayBackgroundView::AboutToRequestFocusFromTabTraversal(bool reverse) {
v->AboutToRequestFocusFromTabTraversal(reverse);
}
-bool TrayBackgroundView::PerformAction(const ui::Event& event) {
- return false;
+std::unique_ptr<views::InkDropRipple> TrayBackgroundView::CreateInkDropRipple()
+ const {
+ return base::MakeUnique<views::FloodFillInkDropRipple>(
+ GetBackgroundBounds(GetContentsBounds(), shelf_alignment_),
+ GetInkDropCenterBasedOnLastEvent(), GetInkDropBaseColor(),
+ ink_drop_visible_opacity());
}
-gfx::Rect TrayBackgroundView::GetFocusBounds() {
- // The tray itself expands to the right and bottom edge of the screen to make
- // sure clicking on the edges brings up the popup. However, the focus border
- // should be only around the container.
- return GetContentsBounds();
+std::unique_ptr<views::InkDropHighlight>
+TrayBackgroundView::CreateInkDropHighlight() const {
+ gfx::Rect bounds = GetBackgroundBounds(GetContentsBounds(), shelf_alignment_);
+ std::unique_ptr<views::InkDropHighlight> highlight(
+ new views::InkDropHighlight(bounds.size(), 0,
+ gfx::RectF(bounds).CenterPoint(),
+ GetInkDropBaseColor()));
+ highlight->set_visible_opacity(kTrayPopupInkDropHighlightOpacity);
+ return highlight;
}
void TrayBackgroundView::OnGestureEvent(ui::GestureEvent* event) {
- if (event->type() == ui::ET_GESTURE_TAP_DOWN) {
- SetDrawBackgroundAsActive(true);
- } else if (event->type() == ui::ET_GESTURE_SCROLL_BEGIN ||
- event->type() == ui::ET_GESTURE_TAP_CANCEL) {
- SetDrawBackgroundAsActive(false);
+ // If there is no ink drop, show "touch feedback".
+ // TODO(mohsen): This is used only in non-MD version. Remove when non-MD code
+ // is removed (see https://crbug.com/614453).
+ if (ink_drop_mode() == InkDropMode::OFF) {
+ if (event->type() == ui::ET_GESTURE_TAP_DOWN) {
+ SetIsActive(true);
+ } else if (event->type() == ui::ET_GESTURE_SCROLL_BEGIN ||
+ event->type() == ui::ET_GESTURE_TAP_CANCEL) {
+ SetIsActive(false);
+ }
}
ActionableView::OnGestureEvent(event);
}
@@ -389,8 +415,8 @@ void TrayBackgroundView::SetContents(views::View* contents) {
SetLayoutManager(new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0));
AddChildView(contents);
}
-void TrayBackgroundView::SetContentsBackground() {
- background_ = new TrayBackground(this);
+void TrayBackgroundView::SetContentsBackground(bool draws_active) {
+ background_ = new TrayBackground(this, draws_active);
tray_container_->set_background(background_);
}
@@ -515,12 +541,17 @@ TrayBubbleView::AnchorAlignment TrayBackgroundView::GetAnchorAlignment() const {
return TrayBubbleView::ANCHOR_ALIGNMENT_BOTTOM;
}
-void TrayBackgroundView::SetDrawBackgroundAsActive(bool visible) {
- if (draw_background_as_active_ == visible)
+void TrayBackgroundView::SetIsActive(bool is_active) {
+ if (is_active_ == is_active)
return;
- draw_background_as_active_ = visible;
+ is_active_ = is_active;
+ AnimateInkDrop(is_active_ ? views::InkDropState::ACTIVATED
+ : views::InkDropState::DEACTIVATED,
+ nullptr);
if (!background_)
return;
+ // TODO(mohsen): This is needed for non-MD version. Remove when non-MD code is
+ // removed (see https://crbug.com/614453).
SchedulePaint();
}
@@ -541,6 +572,32 @@ void TrayBackgroundView::SetSeparatorVisibility(bool is_shown) {
SchedulePaint();
}
+bool TrayBackgroundView::ShouldEnterPushedState(const ui::Event& event) {
+ if (is_active_)
+ return false;
+
+ return ActionableView::ShouldEnterPushedState(event);
+}
+
+bool TrayBackgroundView::PerformAction(const ui::Event& event) {
+ return false;
+}
+
+void TrayBackgroundView::HandlePerformActionResult(bool action_performed,
+ const ui::Event& event) {
+ // When an action is performed, ink drop ripple is handled in SetIsActive().
+ if (action_performed)
+ return;
+ ActionableView::HandlePerformActionResult(action_performed, event);
+}
+
+gfx::Rect TrayBackgroundView::GetFocusBounds() {
+ // The tray itself expands to the right and bottom edge of the screen to make
+ // sure clicking on the edges brings up the popup. However, the focus border
+ // should be only around the container.
+ return GetContentsBounds();
+}
+
void TrayBackgroundView::OnPaint(gfx::Canvas* canvas) {
ActionableView::OnPaint(canvas);
if (!MaterialDesignController::IsShelfMaterial() ||
« no previous file with comments | « ash/common/system/tray/tray_background_view.h ('k') | ash/common/system/web_notification/web_notification_tray.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698