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
parent d936677a
...@@ -67,6 +67,9 @@ class UI_EXPORT TouchSelectionController { ...@@ -67,6 +67,9 @@ class UI_EXPORT TouchSelectionController {
// Notifies the controller that the selection has changed. // Notifies the controller that the selection has changed.
virtual void SelectionChanged() = 0; virtual void SelectionChanged() = 0;
// Returns true if the user is currently dragging one of the handles.
virtual bool IsHandleDragInProgress() = 0;
}; };
class UI_EXPORT TouchSelectionControllerFactory { class UI_EXPORT TouchSelectionControllerFactory {
......
...@@ -245,6 +245,10 @@ void TouchSelectionControllerImpl::SelectionChanged() { ...@@ -245,6 +245,10 @@ void TouchSelectionControllerImpl::SelectionChanged() {
} }
} }
bool TouchSelectionControllerImpl::IsHandleDragInProgress() {
return !!dragging_handle_;
}
void TouchSelectionControllerImpl::SetDraggingHandle( void TouchSelectionControllerImpl::SetDraggingHandle(
EditingHandleView* handle) { EditingHandleView* handle) {
dragging_handle_ = handle; dragging_handle_ = handle;
...@@ -261,10 +265,12 @@ void TouchSelectionControllerImpl::SelectionHandleDragged( ...@@ -261,10 +265,12 @@ void TouchSelectionControllerImpl::SelectionHandleDragged(
DCHECK(dragging_handle_); 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()) { if (dragging_handle_ == cursor_handle_.get()) {
gfx::Point p(drag_pos.x() + kSelectionHandleRadius, drag_pos.y()); client_view_->MoveCaretTo(offset_drag_pos);
ConvertPointToClientView(dragging_handle_, &p);
client_view_->MoveCaretTo(p);
return; return;
} }
...@@ -274,16 +280,13 @@ void TouchSelectionControllerImpl::SelectionHandleDragged( ...@@ -274,16 +280,13 @@ void TouchSelectionControllerImpl::SelectionHandleDragged(
fixed_handle = selection_handle_2_.get(); fixed_handle = selection_handle_2_.get();
// Find selection end points in client_view's coordinate system. // 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); gfx::Point p2(kSelectionHandleRadius, fixed_handle->cursor_height() / 2);
ConvertPointToClientView(fixed_handle, &p2); ConvertPointToClientView(fixed_handle, &p2);
// Instruct client_view to select the region between p1 and p2. The position // 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 |fixed_handle| is the start and that of |dragging_handle| is the end
// of selection. // of selection.
client_view_->SelectRect(p2, p1); client_view_->SelectRect(p2, offset_drag_pos);
} }
void TouchSelectionControllerImpl::ConvertPointToClientView( void TouchSelectionControllerImpl::ConvertPointToClientView(
......
...@@ -29,6 +29,7 @@ class VIEWS_EXPORT TouchSelectionControllerImpl ...@@ -29,6 +29,7 @@ class VIEWS_EXPORT TouchSelectionControllerImpl
// TextSelectionController. // TextSelectionController.
virtual void SelectionChanged() OVERRIDE; virtual void SelectionChanged() OVERRIDE;
virtual bool IsHandleDragInProgress() OVERRIDE;
private: private:
friend class TouchSelectionControllerImplTest; friend class TouchSelectionControllerImplTest;
......
...@@ -78,6 +78,9 @@ class TouchSelectionControllerImplTest : public ViewsTestBase { ...@@ -78,6 +78,9 @@ class TouchSelectionControllerImplTest : public ViewsTestBase {
else else
controller->SetDraggingHandle(controller->selection_handle_2_.get()); 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); controller->SelectionHandleDragged(p);
// Do the work of OnMouseReleased(). // Do the work of OnMouseReleased().
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment