Index: athena/wm/bezel_controller.cc |
diff --git a/athena/wm/bezel_controller.cc b/athena/wm/bezel_controller.cc |
deleted file mode 100644 |
index 6924aa603957faa6c09563beb0d0ae0c53dde850..0000000000000000000000000000000000000000 |
--- a/athena/wm/bezel_controller.cc |
+++ /dev/null |
@@ -1,209 +0,0 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "athena/wm/bezel_controller.h" |
- |
-#include "ui/aura/window.h" |
-#include "ui/events/event_handler.h" |
-#include "ui/gfx/display.h" |
-#include "ui/gfx/geometry/point_conversions.h" |
-#include "ui/gfx/screen.h" |
-#include "ui/wm/core/coordinate_conversion.h" |
- |
-namespace athena { |
-namespace { |
- |
-// Using bezel swipes, the first touch that is registered is usually within |
-// 5-10 pixels from the edge, but sometimes as far as 29 pixels away. |
-// So setting this width fairly high for now. |
-const float kBezelWidth = 20.0f; |
- |
-const float kScrollDeltaNone = 0; |
- |
-bool ShouldProcessGesture(ui::EventType event_type) { |
- return event_type == ui::ET_GESTURE_SCROLL_UPDATE || |
- event_type == ui::ET_GESTURE_SCROLL_BEGIN || |
- event_type == ui::ET_GESTURE_BEGIN || |
- event_type == ui::ET_GESTURE_END; |
-} |
- |
-gfx::Display GetDisplay(aura::Window* window) { |
- gfx::Screen* screen = gfx::Screen::GetScreenFor(window); |
- return screen->GetDisplayNearestWindow(window); |
-} |
- |
-float GetDistance(const gfx::PointF& location, |
- aura::Window* window, |
- BezelController::Bezel bezel) { |
- DCHECK(bezel == BezelController::BEZEL_LEFT || |
- bezel == BezelController::BEZEL_RIGHT); |
- // Convert location from window coordinates to screen coordinates. |
- gfx::Point point_in_screen(gfx::ToRoundedPoint(location)); |
- wm::ConvertPointToScreen(window, &point_in_screen); |
- return bezel == BezelController::BEZEL_LEFT |
- ? point_in_screen.x() |
- : 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. |
-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; |
- if (point_in_screen.x() > screen_width - kBezelWidth) |
- return BezelController::BEZEL_RIGHT; |
- return BezelController::BEZEL_NONE; |
-} |
- |
-} // namespace |
- |
-BezelController::BezelController(aura::Window* container) |
- : container_(container), |
- state_(NONE), |
- scroll_bezel_(BEZEL_NONE), |
- scroll_target_(nullptr), |
- left_right_delegate_(nullptr) { |
-} |
- |
-void BezelController::SetState(BezelController::State state) { |
- // Use SetState(State, float) if |state| is one of the BEZEL_SCROLLING states. |
- DCHECK_NE(state, BEZEL_SCROLLING_TWO_FINGERS); |
- DCHECK_NE(state, BEZEL_SCROLLING_ONE_FINGER); |
- SetState(state, kScrollDeltaNone); |
-} |
- |
-void BezelController::SetState(BezelController::State state, |
- float scroll_delta) { |
- if (!left_right_delegate_ || state == state_) |
- return; |
- |
- State old_state = state_; |
- state_ = state; |
- |
- if (state == NONE) { |
- scroll_bezel_ = BEZEL_NONE; |
- scroll_target_ = nullptr; |
- } |
- |
- if (state == BEZEL_SCROLLING_TWO_FINGERS) { |
- left_right_delegate_->BezelScrollBegin(scroll_bezel_, scroll_delta); |
- } else if (old_state == BEZEL_SCROLLING_TWO_FINGERS) { |
- // If BezelScrollEnd() hides |scroll_target_|, ET_GESTURE_END is dispatched |
- // and we get a reentrant call to SetState(). |
- left_right_delegate_->BezelScrollEnd(0.0f); |
- } |
-} |
- |
-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 |
- // events and two-finger scroll won't work. Possible solution to this problem |
- // is hosting our own gesture recognizer or retargetting touch events at the |
- // bezel. |
- |
- if (!left_right_delegate_) |
- return; |
- |
- ui::EventType type = event->type(); |
- 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 when the first finger touches and starts a gesture. |
- // Normally, the state gets reset when the last finger is lifted and we |
- // receive ET_GESTURE_END. However ET_GESTURE_END doesn't always get |
- // dispatched. (E.g. if the gesture target was hidden or deleted). |
- // Since we can't rely on receiving ET_GESTURE_END when the last finger is |
- // lifted, we also reset the state on ET_GESTURE_BEGIN when the first |
- // finger touches the screen. |
- SetState(NONE); |
- } |
- |
- if (scroll_target_ && event->target() != scroll_target_) |
- return; |
- |
- const gfx::PointF& event_location = event->location_f(); |
- float scroll_delta = kScrollDeltaNone; |
- 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(), target_window); |
- switch (state_) { |
- case NONE: |
- scroll_bezel_ = event_bezel; |
- scroll_target_ = event->target(); |
- if (event_bezel != BEZEL_LEFT && event_bezel != BEZEL_RIGHT) |
- SetState(IGNORE_CURRENT_SCROLL); |
- else |
- SetState(BEZEL_GESTURE_STARTED); |
- break; |
- case IGNORE_CURRENT_SCROLL: |
- break; |
- case BEZEL_GESTURE_STARTED: |
- case BEZEL_SCROLLING_ONE_FINGER: |
- DCHECK_EQ(num_touch_points, 2); |
- DCHECK(scroll_target_); |
- DCHECK_NE(scroll_bezel_, BEZEL_NONE); |
- |
- if (event_bezel != scroll_bezel_) { |
- SetState(IGNORE_CURRENT_SCROLL); |
- return; |
- } |
- if (state_ == BEZEL_SCROLLING_ONE_FINGER) |
- SetState(BEZEL_SCROLLING_TWO_FINGERS); |
- break; |
- case BEZEL_SCROLLING_TWO_FINGERS: |
- // Should've exited above |
- NOTREACHED(); |
- break; |
- } |
- } else if (type == ui::ET_GESTURE_END) { |
- if (state_ == NONE) |
- return; |
- |
- CHECK(scroll_target_); |
- if (num_touch_points == 1) { |
- SetState(NONE); |
- } else { |
- SetState(IGNORE_CURRENT_SCROLL); |
- } |
- } else if (type == ui::ET_GESTURE_SCROLL_BEGIN) { |
- DCHECK(state_ == IGNORE_CURRENT_SCROLL || state_ == BEZEL_GESTURE_STARTED); |
- if (state_ != BEZEL_GESTURE_STARTED) |
- return; |
- |
- if (num_touch_points == 1) { |
- SetState(BEZEL_SCROLLING_ONE_FINGER, scroll_delta); |
- return; |
- } |
- |
- DCHECK_EQ(num_touch_points, 2); |
- SetState(BEZEL_SCROLLING_TWO_FINGERS, scroll_delta); |
- if (left_right_delegate_->BezelCanScroll()) |
- event->SetHandled(); |
- } else if (type == ui::ET_GESTURE_SCROLL_UPDATE) { |
- if (state_ != BEZEL_SCROLLING_TWO_FINGERS) |
- return; |
- |
- left_right_delegate_->BezelScrollUpdate(scroll_delta); |
- if (left_right_delegate_->BezelCanScroll()) |
- event->SetHandled(); |
- } |
-} |
- |
-} // namespace athena |