blob: 2ca3ef12ec57ac40515196fd57346fe7d2b679a0 [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/views/animation/button_ink_drop_delegate.h"
#include "ui/events/event.h"
#include "ui/events/scoped_target_handler.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/animation/ink_drop_state.h"
#include "ui/views/view.h"
namespace views {
ButtonInkDropDelegate::ButtonInkDropDelegate(InkDropHost* ink_drop_host,
View* view)
: target_handler_(new ui::ScopedTargetHandler(view, this)),
ink_drop_host_(ink_drop_host),
ink_drop_animation_controller_(
InkDropAnimationControllerFactory::CreateInkDropAnimationController(
ink_drop_host_)) {}
ButtonInkDropDelegate::~ButtonInkDropDelegate() {
}
void ButtonInkDropDelegate::SetInkDropSize(int large_size,
int large_corner_radius,
int small_size,
int small_corner_radius) {
ink_drop_animation_controller_->SetInkDropSize(
gfx::Size(large_size, large_size), large_corner_radius,
gfx::Size(small_size, small_size), small_corner_radius);
}
void ButtonInkDropDelegate::OnLayout() {
ink_drop_animation_controller_->SetInkDropCenter(
ink_drop_host_->CalculateInkDropCenter());
}
void ButtonInkDropDelegate::OnAction(InkDropState state) {
ink_drop_animation_controller_->AnimateToState(state);
}
////////////////////////////////////////////////////////////////////////////////
// ui::EventHandler:
void ButtonInkDropDelegate::OnGestureEvent(ui::GestureEvent* event) {
InkDropState ink_drop_state = InkDropState::HIDDEN;
switch (event->type()) {
case ui::ET_GESTURE_TAP_DOWN:
ink_drop_state = 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 = InkDropState::SLOW_ACTION_PENDING;
break;
case ui::ET_GESTURE_LONG_TAP:
ink_drop_state = InkDropState::SLOW_ACTION;
break;
case ui::ET_GESTURE_SCROLL_BEGIN:
case ui::ET_GESTURE_END:
ink_drop_state = InkDropState::HIDDEN;
break;
default:
return;
}
InkDropState current_ink_drop_state =
ink_drop_animation_controller_->GetInkDropState();
if (ink_drop_state == InkDropState::HIDDEN &&
(current_ink_drop_state == InkDropState::QUICK_ACTION ||
current_ink_drop_state == InkDropState::SLOW_ACTION ||
current_ink_drop_state == InkDropState::DEACTIVATED)) {
// These InkDropStates automatically transition to the HIDDEN state so we
// don't make an explicit call. Explicitly animating to HIDDEN in this case
// would prematurely pre-empt these animations.
return;
}
ink_drop_animation_controller_->AnimateToState(ink_drop_state);
}
} // namespace views