Upstream version 11.39.266.0
[platform/framework/web/crosswalk.git] / src / athena / wm / bezel_controller.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 ATHENA_WM_BEZEL_CONTROLLER_H_
6 #define ATHENA_WM_BEZEL_CONTROLLER_H_
7
8 #include "ui/events/event_handler.h"
9
10 namespace aura {
11 class Window;
12 }
13
14 namespace gfx {
15 class PointF;
16 }
17
18 namespace ui {
19 class EventTarget;
20 }
21
22 namespace athena {
23
24 // Responsible for detecting bezel gestures and notifying the delegate(s)
25 // subscribed to them.
26 class BezelController : public ui::EventHandler {
27  public:
28   enum Bezel { BEZEL_NONE, BEZEL_LEFT, BEZEL_RIGHT, BEZEL_TOP, BEZEL_BOTTOM };
29
30   // Responsible for handling scroll gestures initiated from the bezel.
31   // Two touch points are need to perform the bezel scroll gesture from
32   // the left and right bezel.
33   class ScrollDelegate {
34    public:
35     virtual ~ScrollDelegate() {}
36
37     // Beginning of a bezel scroll gesture started from the |bezel|.
38     // |delta| is the difference between the x-coordinate of the current scroll
39     // position and the bezel. It will be zero or negative for the right bezel.
40     virtual void BezelScrollBegin(Bezel bezel, float delta) = 0;
41
42     // End of the current bezel scroll
43     virtual void BezelScrollEnd() = 0;
44
45     // Update of the scroll position for the currently active bezel scroll.
46     // |delta| has the same meaning as in ScrollBegin().
47     virtual void BezelScrollUpdate(float delta) = 0;
48
49     // Should return false if the delegate isn't going to react to the scroll
50     // events.
51     virtual bool BezelCanScroll() = 0;
52   };
53
54   explicit BezelController(aura::Window* container);
55   virtual ~BezelController() {}
56
57   // Set the delegate to handle the gestures from left and right bezels.
58   // Two touch points are need to perform the bezel scroll gesture from
59   // the left and right bezel.
60   void set_left_right_delegate(ScrollDelegate* delegate) {
61     left_right_delegate_ = delegate;
62   }
63
64  private:
65   enum State {
66     NONE,
67     IGNORE_CURRENT_SCROLL,
68     BEZEL_GESTURE_STARTED,
69     BEZEL_SCROLLING_ONE_FINGER,
70     BEZEL_SCROLLING_TWO_FINGERS,
71   };
72
73   void SetState(State state);
74   // |scroll_delta| only needs to be passed when |state| is one of the
75   // BEZEL_SROLLING states.
76   void SetState(State state, float scroll_delta);
77
78   // ui::EventHandler overrides
79   virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE;
80
81   aura::Window* container_;
82
83   State state_;
84
85   // The bezel where the currently active scroll was started.
86   Bezel scroll_bezel_;
87
88   // The target of the bezel scroll gesture. Used to filter out other gestures
89   // when the bezel scroll is in progress.
90   ui::EventTarget* scroll_target_;
91
92   // Responsible for handling gestures started from the left and right bezels.
93   // Not owned.
94   ScrollDelegate* left_right_delegate_;
95
96   DISALLOW_COPY_AND_ASSIGN(BezelController);
97 };
98
99 }  // namespace athena
100
101 #endif  // ATHENA_WM_BEZEL_CONTROLLER_H_