Chromium Code Reviews| Index: athena/wm/bezel_controller.cc |
| diff --git a/athena/wm/bezel_controller.cc b/athena/wm/bezel_controller.cc |
| index a4e815602e7b32ecee1667e88caf0962f71199d6..22436ebfdc93b2adb905507c455802e1ff4860ea 100644 |
| --- a/athena/wm/bezel_controller.cc |
| +++ b/athena/wm/bezel_controller.cc |
| @@ -46,6 +46,21 @@ 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) { |
|
Jun Mukai
2014/09/16 19:58:48
nit: Doesn't this fit into the previous line?
mfomitchev
2014/09/22 21:11:00
Nope, 5 chars over 80.
|
| + 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; |
| + if (point_in_screen.x() > screen_width - kBezelWidth) |
| + return BezelController::BEZEL_RIGHT; |
| + return BezelController::BEZEL_NONE; |
| +} |
| + |
| } // namespace |
| BezelController::BezelController(aura::Window* container) |
| @@ -79,18 +94,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,24 +108,32 @@ 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; |
| - if (scroll_bezel_ != BEZEL_NONE) { |
| - aura::Window* target_window = static_cast<aura::Window*>(event->target()); |
| + aura::Window* target_window = static_cast<aura::Window*>(event->target()); |
| + if (scroll_bezel_ != BEZEL_NONE) |
| scroll_delta = GetDistance(event_location, target_window, scroll_bezel_); |
| - } |
| if (type == ui::ET_GESTURE_BEGIN) { |
| if (num_touch_points > 2) { |
| 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; |