| Index: athena/wm/bezel_controller.cc
|
| diff --git a/athena/wm/bezel_controller.cc b/athena/wm/bezel_controller.cc
|
| index a4e815602e7b32ecee1667e88caf0962f71199d6..81f275f1159ac9bd65fde4f2ed9454835c1d32c3 100644
|
| --- a/athena/wm/bezel_controller.cc
|
| +++ b/athena/wm/bezel_controller.cc
|
| @@ -46,6 +46,22 @@ float GetDistance(const gfx::PointF& location,
|
| : point_in_screen.x() - GetDisplay(window).bounds().width();
|
| }
|
|
|
| +// Returns the bezel corresponding to the |location| in |window| or BEZEL_NONE
|
| +// if the location is outside of the bezel area.
|
| +// Only implemented for LEFT and RIGHT bezels ATM.
|
| +BezelController::Bezel GetBezel(const gfx::PointF& location,
|
| + aura::Window* window) {
|
| + int screen_width = GetDisplay(window).bounds().width();
|
| + gfx::Point point_in_screen(gfx::ToRoundedPoint(location));
|
| + wm::ConvertPointToScreen(window, &point_in_screen);
|
| + if (point_in_screen.x() < kBezelWidth)
|
| + return BezelController::BEZEL_LEFT;
|
| + else if (point_in_screen.x() > screen_width - kBezelWidth)
|
| + return BezelController::BEZEL_RIGHT;
|
| + else
|
| + return BezelController::BEZEL_NONE;
|
| +}
|
| +
|
| } // namespace
|
|
|
| BezelController::BezelController(aura::Window* container)
|
| @@ -79,18 +95,6 @@ void BezelController::SetState(BezelController::State state,
|
| }
|
| }
|
|
|
| -// Only implemented for LEFT and RIGHT bezels ATM.
|
| -BezelController::Bezel BezelController::GetBezel(const gfx::PointF& location) {
|
| - int screen_width = GetDisplay(container_).bounds().width();
|
| - if (location.x() < kBezelWidth) {
|
| - return BEZEL_LEFT;
|
| - } else if (location.x() > screen_width - kBezelWidth) {
|
| - return BEZEL_RIGHT;
|
| - } else {
|
| - return BEZEL_NONE;
|
| - }
|
| -}
|
| -
|
| void BezelController::OnGestureEvent(ui::GestureEvent* event) {
|
| // TODO(mfomitchev): Currently we aren't retargetting or consuming any of the
|
| // touch events. This means that content can prevent the generation of gesture
|
| @@ -105,15 +109,23 @@ void BezelController::OnGestureEvent(ui::GestureEvent* event) {
|
| if (!ShouldProcessGesture(type))
|
| return;
|
|
|
| + const ui::GestureEventDetails& event_details = event->details();
|
| + int num_touch_points = event_details.touch_points();
|
| + if (num_touch_points == 1 && type == ui::ET_GESTURE_BEGIN) {
|
| + // Reset the state if needed.
|
| + // Normally, the state would be reset when ET_GESTURE_END is dispatched,
|
| + // however ET_GESTURE_END may not be dispatched if the gesture target is
|
| + // hidden or deleted before the gesture ends.
|
| + SetState(NONE);
|
| + }
|
| +
|
| if (scroll_target_ && event->target() != scroll_target_)
|
| return;
|
|
|
| const gfx::PointF& event_location = event->location_f();
|
| - const ui::GestureEventDetails& event_details = event->details();
|
| - int num_touch_points = event_details.touch_points();
|
| float scroll_delta = kScrollDeltaNone;
|
| + aura::Window* target_window = static_cast<aura::Window*>(event->target());
|
| if (scroll_bezel_ != BEZEL_NONE) {
|
| - aura::Window* target_window = static_cast<aura::Window*>(event->target());
|
| scroll_delta = GetDistance(event_location, target_window, scroll_bezel_);
|
| }
|
|
|
| @@ -122,7 +134,8 @@ void BezelController::OnGestureEvent(ui::GestureEvent* event) {
|
| SetState(IGNORE_CURRENT_SCROLL);
|
| return;
|
| }
|
| - BezelController::Bezel event_bezel = GetBezel(event->location_f());
|
| + BezelController::Bezel event_bezel =
|
| + GetBezel(event->location_f(), target_window);
|
| switch (state_) {
|
| case NONE:
|
| scroll_bezel_ = event_bezel;
|
|
|