Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / ash / wm / workspace / two_step_edge_cycler.h
1 // Copyright 2014 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_WORKSPACE_TWO_STEP_EDGE_CYCLER_H_
6 #define ASH_WM_WORKSPACE_TWO_STEP_EDGE_CYCLER_H_
7
8 #include "ash/ash_export.h"
9 #include "base/basictypes.h"
10 #include "base/time/time.h"
11 #include "ui/gfx/point.h"
12
13 namespace ash {
14
15 // TwoStepEdgeCycler is responsible for cycling between two modes when the mouse
16 // is at the edge of the workspace. The cycler does not loop so it is impossible
17 // to get back to the first mode once the second mode is reached.
18 // TwoStepEdgeCycler should be destroyed once the mouse moves off the edge of
19 // the workspace.
20 class ASH_EXPORT TwoStepEdgeCycler {
21  public:
22   explicit TwoStepEdgeCycler(const gfx::Point& start);
23   ~TwoStepEdgeCycler();
24
25   // Update which mode should be used as a result of a mouse / touch move.
26   // |location| is the location of the event.
27   void OnMove(const gfx::Point& location);
28
29   bool use_second_mode() const { return second_mode_; }
30
31  private:
32   // Whether the second mode should be used.
33   bool second_mode_;
34
35   // Time OnMove() was last invoked.
36   base::TimeTicks time_last_move_;
37
38   // The number of moves since the cycler was constructed.
39   int num_moves_;
40
41   // Initial x-coordinate.
42   int start_x_;
43
44   DISALLOW_COPY_AND_ASSIGN(TwoStepEdgeCycler);
45 };
46
47 }  // namespace ash
48
49 #endif  // ASH_WM_WORKSPACE_TWO_STEP_EDGE_CYCLER_H_