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.
5 #ifndef ATHENA_WM_BEZEL_CONTROLLER_H_
6 #define ATHENA_WM_BEZEL_CONTROLLER_H_
8 #include "ui/events/event_handler.h"
24 // Responsible for detecting bezel gestures and notifying the delegate(s)
25 // subscribed to them.
26 class BezelController
: public ui::EventHandler
{
28 enum Bezel
{ BEZEL_NONE
, BEZEL_LEFT
, BEZEL_RIGHT
, BEZEL_TOP
, BEZEL_BOTTOM
};
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
{
35 virtual ~ScrollDelegate() {}
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 ScrollBegin(Bezel bezel
, float delta
) = 0;
42 // End of the current bezel scroll
43 virtual void ScrollEnd() = 0;
45 // Update of the scroll position for the currently active bezel scroll.
46 // |delta| has the same meaning as in ScrollBegin().
47 virtual void ScrollUpdate(float delta
) = 0;
49 // Should return false if the delegate isn't going to react to the scroll
51 virtual bool CanScroll() = 0;
54 explicit BezelController(aura::Window
* container
);
55 virtual ~BezelController() {}
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
;
67 IGNORE_CURRENT_SCROLL
,
68 BEZEL_GESTURE_STARTED
,
69 BEZEL_SCROLLING_ONE_FINGER
,
70 BEZEL_SCROLLING_TWO_FINGERS
,
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
);
78 // Returns the bezel corresponding to the |location| or BEZEL_NONE if the
79 // location is outside of the bezel area.
80 Bezel
GetBezel(const gfx::PointF
& location
);
82 // ui::EventHandler overrides
83 virtual void OnGestureEvent(ui::GestureEvent
* event
) OVERRIDE
;
85 aura::Window
* container_
;
89 // The bezel where the currently active scroll was started.
92 // The target of the bezel scroll gesture. Used to filter out other gestures
93 // when the bezel scroll is in progress.
94 ui::EventTarget
* scroll_target_
;
96 // Responsible for handling gestures started from the left and right bezels.
98 ScrollDelegate
* left_right_delegate_
;
100 DISALLOW_COPY_AND_ASSIGN(BezelController
);
103 } // namespace athena
105 #endif // ATHENA_WM_BEZEL_CONTROLLER_H_