Home | History | Annotate | Download | only in gestures
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef ASH_WM_GESTURES_LONG_PRESS_AFFORDANCE_HANDLER_H_
      6 #define ASH_WM_GESTURES_LONG_PRESS_AFFORDANCE_HANDLER_H_
      7 
      8 #include "base/timer/timer.h"
      9 #include "ui/aura/window_observer.h"
     10 #include "ui/gfx/animation/linear_animation.h"
     11 #include "ui/gfx/point.h"
     12 
     13 namespace ui {
     14 class GestureEvent;
     15 }
     16 
     17 namespace ash {
     18 
     19 namespace test {
     20 class SystemGestureEventFilterTest;
     21 }
     22 
     23 // LongPressAffordanceHandler displays an animated affordance that is shown
     24 // on a TAP_DOWN gesture. The animation sequence consists of two parts:
     25 // The first part is a grow animation that starts at semi-long-press and
     26 // completes on a long-press gesture. The affordance animates to full size
     27 // during grow animation.
     28 // The second part is a shrink animation that start after grow and shrinks the
     29 // affordance out of view.
     30 class LongPressAffordanceHandler : public gfx::LinearAnimation,
     31                                    public aura::WindowObserver {
     32  public:
     33   LongPressAffordanceHandler();
     34   virtual ~LongPressAffordanceHandler();
     35 
     36   // Displays or removes long press affordance according to the |event|.
     37   void ProcessEvent(aura::Window* target, ui::GestureEvent* event);
     38 
     39  private:
     40   friend class ash::test::SystemGestureEventFilterTest;
     41 
     42   class LongPressAffordanceView;
     43 
     44   enum LongPressAnimationType {
     45     NONE,
     46     GROW_ANIMATION,
     47     SHRINK_ANIMATION,
     48   };
     49 
     50   void StartAnimation();
     51   void StopAffordance();
     52   void SetTapDownTarget(aura::Window* target);
     53 
     54   // Overridden from gfx::LinearAnimation.
     55   virtual void AnimateToState(double state) OVERRIDE;
     56   virtual void AnimationStopped() OVERRIDE;
     57 
     58   // Overridden from aura::WindowObserver.
     59   virtual void OnWindowDestroying(aura::Window* window) OVERRIDE;
     60 
     61   scoped_ptr<LongPressAffordanceView> view_;
     62   gfx::Point tap_down_location_;
     63   base::OneShotTimer<LongPressAffordanceHandler> timer_;
     64   aura::Window* tap_down_target_;
     65   LongPressAnimationType current_animation_type_;
     66 
     67   DISALLOW_COPY_AND_ASSIGN(LongPressAffordanceHandler);
     68 };
     69 
     70 }  // namespace ash
     71 
     72 #endif  // ASH_WM_GESTURES_LONG_PRESS_AFFORDANCE_HANDLER_H_
     73