From 7b17bd00c3b044e9e01d01c8bfb589a5e99e99e5 Mon Sep 17 00:00:00 2001 From: "varunjain@chromium.org" Date: Fri, 19 Apr 2013 08:49:21 +0000 Subject: Add method to TouchSelectionController to check if a handle is currently being dragged. Also fixes some handle positioning bugs. BUG=none Review URL: https://chromiumcodereview.appspot.com/13817012 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@195110 0039d316-1c4b-4281-b951-d872f2087c98 --- ui/base/touch/touch_editing_controller.h | 3 +++ ui/views/touchui/touch_selection_controller_impl.cc | 17 ++++++++++------- ui/views/touchui/touch_selection_controller_impl.h | 1 + .../touchui/touch_selection_controller_impl_unittest.cc | 3 +++ 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/ui/base/touch/touch_editing_controller.h b/ui/base/touch/touch_editing_controller.h index 69484d2..72376b2 100644 --- a/ui/base/touch/touch_editing_controller.h +++ b/ui/base/touch/touch_editing_controller.h @@ -67,6 +67,9 @@ class UI_EXPORT TouchSelectionController { // Notifies the controller that the selection has changed. virtual void SelectionChanged() = 0; + + // Returns true if the user is currently dragging one of the handles. + virtual bool IsHandleDragInProgress() = 0; }; class UI_EXPORT TouchSelectionControllerFactory { diff --git a/ui/views/touchui/touch_selection_controller_impl.cc b/ui/views/touchui/touch_selection_controller_impl.cc index 6f78c96..c6bb087 100644 --- a/ui/views/touchui/touch_selection_controller_impl.cc +++ b/ui/views/touchui/touch_selection_controller_impl.cc @@ -245,6 +245,10 @@ void TouchSelectionControllerImpl::SelectionChanged() { } } +bool TouchSelectionControllerImpl::IsHandleDragInProgress() { + return !!dragging_handle_; +} + void TouchSelectionControllerImpl::SetDraggingHandle( EditingHandleView* handle) { dragging_handle_ = handle; @@ -261,10 +265,12 @@ void TouchSelectionControllerImpl::SelectionHandleDragged( DCHECK(dragging_handle_); + gfx::Point offset_drag_pos(drag_pos.x(), + drag_pos.y() - dragging_handle_->cursor_height() / 2 - + 2 * kSelectionHandleRadius); + ConvertPointToClientView(dragging_handle_, &offset_drag_pos); if (dragging_handle_ == cursor_handle_.get()) { - gfx::Point p(drag_pos.x() + kSelectionHandleRadius, drag_pos.y()); - ConvertPointToClientView(dragging_handle_, &p); - client_view_->MoveCaretTo(p); + client_view_->MoveCaretTo(offset_drag_pos); return; } @@ -274,16 +280,13 @@ void TouchSelectionControllerImpl::SelectionHandleDragged( fixed_handle = selection_handle_2_.get(); // Find selection end points in client_view's coordinate system. - gfx::Point p1(drag_pos.x() + kSelectionHandleRadius, drag_pos.y()); - ConvertPointToClientView(dragging_handle_, &p1); - gfx::Point p2(kSelectionHandleRadius, fixed_handle->cursor_height() / 2); ConvertPointToClientView(fixed_handle, &p2); // Instruct client_view to select the region between p1 and p2. The position // of |fixed_handle| is the start and that of |dragging_handle| is the end // of selection. - client_view_->SelectRect(p2, p1); + client_view_->SelectRect(p2, offset_drag_pos); } void TouchSelectionControllerImpl::ConvertPointToClientView( diff --git a/ui/views/touchui/touch_selection_controller_impl.h b/ui/views/touchui/touch_selection_controller_impl.h index 5d1f771..c42f778 100644 --- a/ui/views/touchui/touch_selection_controller_impl.h +++ b/ui/views/touchui/touch_selection_controller_impl.h @@ -29,6 +29,7 @@ class VIEWS_EXPORT TouchSelectionControllerImpl // TextSelectionController. virtual void SelectionChanged() OVERRIDE; + virtual bool IsHandleDragInProgress() OVERRIDE; private: friend class TouchSelectionControllerImplTest; diff --git a/ui/views/touchui/touch_selection_controller_impl_unittest.cc b/ui/views/touchui/touch_selection_controller_impl_unittest.cc index 15163a2..78a8236 100644 --- a/ui/views/touchui/touch_selection_controller_impl_unittest.cc +++ b/ui/views/touchui/touch_selection_controller_impl_unittest.cc @@ -78,6 +78,9 @@ class TouchSelectionControllerImplTest : public ViewsTestBase { else controller->SetDraggingHandle(controller->selection_handle_2_.get()); + // Offset the drag position by the selection handle radius since it is + // supposed to be in the coordinate system of the handle. + p.Offset(10, 0); controller->SelectionHandleDragged(p); // Do the work of OnMouseReleased(). -- cgit v1.1