long_press_affordance_handler.h revision d0247b1b59f9c528cb6df88b4f2b9afaf80d181e
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef ASH_WM_GESTURES_LONG_PRESS_AFFORDANCE_HANDLER_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ASH_WM_GESTURES_LONG_PRESS_AFFORDANCE_HANDLER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/timer/timer.h" 9d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/gfx/animation/animation_delegate.h" 10d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/gfx/animation/linear_animation.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/point.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace aura { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Window; 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class LocatedEvent; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ash { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace test { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SystemGestureEventFilterTest; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace internal { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// LongPressAffordanceHandler displays an animated affordance that is shown 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// on a TAP_DOWN gesture. The animation sequence consists of two parts: 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The first part is a grow animation that starts at semi-long-press and 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// completes on a long-press gesture. The affordance animates to full size 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// during grow animation. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The second part is a shrink animation that start after grow and shrinks the 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// affordance out of view. 36d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)class LongPressAffordanceHandler : public gfx::AnimationDelegate, 37d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) public gfx::LinearAnimation { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LongPressAffordanceHandler(); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~LongPressAffordanceHandler(); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Display or removes long press affordance according to the |event|. 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ProcessEvent(aura::Window* target, 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui::LocatedEvent* event, 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int touch_id); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class ash::test::SystemGestureEventFilterTest; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum LongPressAnimationType { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NONE, 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GROW_ANIMATION, 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SHRINK_ANIMATION, 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void StartAnimation(); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void StopAnimation(); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 59d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Overridden from gfx::LinearAnimation. 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AnimateToState(double state) OVERRIDE; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool ShouldSendCanceledFromStop() OVERRIDE; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 63d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // Overridden from gfx::AnimationDelegate. 64d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) virtual void AnimationEnded(const gfx::Animation* animation) OVERRIDE; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class LongPressAffordanceView; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<LongPressAffordanceView> view_; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Point tap_down_location_; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int tap_down_touch_id_; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::OneShotTimer<LongPressAffordanceHandler> timer_; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 tap_down_display_id_; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LongPressAnimationType current_animation_type_; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(LongPressAffordanceHandler); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace internal 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ash 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // ASH_WM_GESTURES_LONG_PRESS_AFFORDANCE_HANDLER_H_ 81