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; |
+} |
sadrul
2014/09/16 17:11:36
You would normally just do:
if (...)
return
mfomitchev
2014/09/16 19:48:09
Done.
|
+ |
} // 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) { |
sadrul
2014/09/16 17:11:36
Remove {}
mfomitchev
2014/09/16 19:48:09
Done.
|
- 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; |