Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(525)

Unified Diff: athena/wm/bezel_controller.cc

Issue 598083002: Adding split view divider widget. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixing NOTREACHED() in a unit test. Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « athena/wm/bezel_controller.h ('k') | athena/wm/split_view_controller.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: athena/wm/bezel_controller.cc
diff --git a/athena/wm/bezel_controller.cc b/athena/wm/bezel_controller.cc
index a4e815602e7b32ecee1667e88caf0962f71199d6..c4a53a04129c1e0ab5f3c1ca4878a5a3d5d34d8a 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.
+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)
@@ -69,9 +84,9 @@ void BezelController::SetState(BezelController::State state,
return;
if (state == BEZEL_SCROLLING_TWO_FINGERS)
- left_right_delegate_->ScrollBegin(scroll_bezel_, scroll_delta);
+ left_right_delegate_->BezelScrollBegin(scroll_bezel_, scroll_delta);
else if (state_ == BEZEL_SCROLLING_TWO_FINGERS)
- left_right_delegate_->ScrollEnd();
+ left_right_delegate_->BezelScrollEnd();
state_ = state;
if (state == NONE) {
scroll_bezel_ = BEZEL_NONE;
@@ -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,35 @@ 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 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();
- 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;
@@ -174,14 +188,14 @@ void BezelController::OnGestureEvent(ui::GestureEvent* event) {
DCHECK_EQ(num_touch_points, 2);
SetState(BEZEL_SCROLLING_TWO_FINGERS, scroll_delta);
- if (left_right_delegate_->CanScroll())
+ 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_->ScrollUpdate(scroll_delta);
- if (left_right_delegate_->CanScroll())
+ left_right_delegate_->BezelScrollUpdate(scroll_delta);
+ if (left_right_delegate_->BezelCanScroll())
event->SetHandled();
}
}
« no previous file with comments | « athena/wm/bezel_controller.h ('k') | athena/wm/split_view_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698