| Index: ui/views/animation/ink_drop_animation_controller_impl.cc
|
| diff --git a/ui/views/animation/ink_drop_animation_controller_impl.cc b/ui/views/animation/ink_drop_animation_controller_impl.cc
|
| index 0b014bd8b5caf3cd853f0a190cde8323dc713873..74d681d8d637422bd900240fac416aa68d3a33d2 100644
|
| --- a/ui/views/animation/ink_drop_animation_controller_impl.cc
|
| +++ b/ui/views/animation/ink_drop_animation_controller_impl.cc
|
| @@ -14,11 +14,9 @@ InkDropAnimationControllerImpl::InkDropAnimationControllerImpl(
|
| : ink_drop_host_(ink_drop_host) {}
|
|
|
| InkDropAnimationControllerImpl::~InkDropAnimationControllerImpl() {
|
| - if (ink_drop_animation_) {
|
| - // TODO(bruthig): Change this to be called when the ink drop becomes hidden.
|
| - // See www.crbug.com/522175.
|
| - ink_drop_host_->RemoveInkDropLayer(ink_drop_animation_->root_layer());
|
| - }
|
| + // Explicitly destroy the InkDropAnimation so that this still exists if
|
| + // views::InkDropAnimationObserver methods are called on this.
|
| + DestroyInkDropAnimation();
|
| }
|
|
|
| InkDropState InkDropAnimationControllerImpl::GetInkDropState() const {
|
| @@ -27,10 +25,11 @@ InkDropState InkDropAnimationControllerImpl::GetInkDropState() const {
|
| return ink_drop_animation_->ink_drop_state();
|
| }
|
|
|
| -void InkDropAnimationControllerImpl::AnimateToState(InkDropState state) {
|
| +void InkDropAnimationControllerImpl::AnimateToState(
|
| + InkDropState ink_drop_state) {
|
| if (!ink_drop_animation_)
|
| CreateInkDropAnimation();
|
| - ink_drop_animation_->AnimateToState(state);
|
| + ink_drop_animation_->AnimateToState(ink_drop_state);
|
| }
|
|
|
| gfx::Size InkDropAnimationControllerImpl::GetInkDropLargeSize() const {
|
| @@ -61,19 +60,48 @@ void InkDropAnimationControllerImpl::SetInkDropCenter(
|
| }
|
|
|
| void InkDropAnimationControllerImpl::CreateInkDropAnimation() {
|
| - if (ink_drop_animation_)
|
| - ink_drop_host_->RemoveInkDropLayer(ink_drop_animation_->root_layer());
|
| + DestroyInkDropAnimation();
|
|
|
| - // TODO(bruthig): It will be expensive to maintain InkDropAnimation instances
|
| - // when they are not actually being used. Consider creating InkDropAnimations
|
| - // on an as-needed basis and if construction is also expensive then consider
|
| - // creating an InkDropAnimationPool. See www.crbug.com/522175.
|
| ink_drop_animation_.reset(new InkDropAnimation(
|
| ink_drop_large_size_, ink_drop_large_corner_radius_, ink_drop_small_size_,
|
| ink_drop_small_corner_radius_));
|
|
|
| + ink_drop_animation_->AddObserver(this);
|
| ink_drop_animation_->SetCenterPoint(ink_drop_center_);
|
| ink_drop_host_->AddInkDropLayer(ink_drop_animation_->root_layer());
|
| }
|
|
|
| +void InkDropAnimationControllerImpl::DestroyInkDropAnimation() {
|
| + if (!ink_drop_animation_)
|
| + return;
|
| + ink_drop_host_->RemoveInkDropLayer(ink_drop_animation_->root_layer());
|
| + ink_drop_animation_->RemoveObserver(this);
|
| + ink_drop_animation_.reset();
|
| +}
|
| +
|
| +void InkDropAnimationControllerImpl::InkDropAnimationStarted(
|
| + InkDropState ink_drop_state) {}
|
| +
|
| +void InkDropAnimationControllerImpl::InkDropAnimationEnded(
|
| + InkDropState ink_drop_state,
|
| + InkDropAnimationEndedReason reason) {
|
| + if (reason != SUCCESS)
|
| + return;
|
| + switch (ink_drop_state) {
|
| + case views::InkDropState::QUICK_ACTION:
|
| + case views::InkDropState::SLOW_ACTION:
|
| + case views::InkDropState::DEACTIVATED:
|
| + ink_drop_animation_->AnimateToState(views::InkDropState::HIDDEN);
|
| + break;
|
| + case views::InkDropState::HIDDEN:
|
| + // TODO(bruthig): Investigate whether creating and destroying
|
| + // InkDropAnimations is expensive and consider creating an
|
| + // InkDropAnimationPool. See www.crbug.com/522175.
|
| + DestroyInkDropAnimation();
|
| + break;
|
| + default:
|
| + break;
|
| + }
|
| +}
|
| +
|
| } // namespace views
|
|
|