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

Side by Side Diff: content/browser/renderer_host/input/gesture_text_selector.cc

Issue 590483002: Check if Button is pressed for changing selection (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Review comments Created 6 years, 2 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/renderer_host/input/gesture_text_selector.h" 5 #include "content/browser/renderer_host/input/gesture_text_selector.h"
6 6
7 #include "ui/events/event_constants.h" 7 #include "ui/events/event_constants.h"
8 #include "ui/events/gesture_detection/gesture_config_helper.h" 8 #include "ui/events/gesture_detection/gesture_config_helper.h"
9 #include "ui/events/gesture_detection/gesture_detector.h" 9 #include "ui/events/gesture_detection/gesture_detector.h"
10 #include "ui/events/gesture_detection/motion_event.h" 10 #include "ui/events/gesture_detection/motion_event.h"
(...skipping 16 matching lines...) Expand all
27 new ui::GestureDetector(config, listener, null_double_tap_listener)); 27 new ui::GestureDetector(config, listener, null_double_tap_listener));
28 detector->set_longpress_enabled(false); 28 detector->set_longpress_enabled(false);
29 detector->set_showpress_enabled(false); 29 detector->set_showpress_enabled(false);
30 30
31 return detector.Pass(); 31 return detector.Pass();
32 } 32 }
33 33
34 } // namespace 34 } // namespace
35 35
36 GestureTextSelector::GestureTextSelector(GestureTextSelectorClient* client) 36 GestureTextSelector::GestureTextSelector(GestureTextSelectorClient* client)
37 : client_(client), text_selection_triggered_(false) { 37 : client_(client),
38 text_selection_triggered_(false),
39 secondary_button_pressed_(false),
40 anchor_x_(0.0f),
41 anchor_y_(0.0f) {
38 DCHECK(client); 42 DCHECK(client);
39 } 43 }
40 44
41 GestureTextSelector::~GestureTextSelector() { 45 GestureTextSelector::~GestureTextSelector() {
42 } 46 }
43 47
44 bool GestureTextSelector::OnTouchEvent(const MotionEvent& event) { 48 bool GestureTextSelector::OnTouchEvent(const MotionEvent& event) {
45 if (event.GetAction() == MotionEvent::ACTION_DOWN) { 49 if (event.GetAction() == MotionEvent::ACTION_DOWN) {
46 // Only trigger selection on ACTION_DOWN to prevent partial touch or gesture 50 // Only trigger selection on ACTION_DOWN to prevent partial touch or gesture
47 // sequences from being forwarded. 51 // sequences from being forwarded.
48 text_selection_triggered_ = ShouldStartTextSelection(event); 52 text_selection_triggered_ = ShouldStartTextSelection(event);
53 secondary_button_pressed_ =
54 event.GetButtonState() == MotionEvent::BUTTON_SECONDARY;
55 anchor_x_ = event.GetX();
56 anchor_y_ = event.GetY();
49 } 57 }
50 58
51 if (!text_selection_triggered_) 59 if (!text_selection_triggered_)
52 return false; 60 return false;
53 61
62 if (event.GetAction() == MotionEvent::ACTION_MOVE) {
63 secondary_button_pressed_ =
64 event.GetButtonState() == MotionEvent::BUTTON_SECONDARY;
65 if (!secondary_button_pressed_) {
66 anchor_x_ = event.GetX();
67 anchor_y_ = event.GetY();
68 }
69 }
70
54 if (!gesture_detector_) 71 if (!gesture_detector_)
55 gesture_detector_ = CreateGestureDetector(this); 72 gesture_detector_ = CreateGestureDetector(this);
56 73
57 gesture_detector_->OnTouchEvent(event); 74 gesture_detector_->OnTouchEvent(event);
58 75
59 // Always return true, even if |gesture_detector_| technically doesn't 76 // Always return true, even if |gesture_detector_| technically doesn't
60 // consume the event, to prevent a partial touch stream from being forwarded. 77 // consume the event, to prevent a partial touch stream from being forwarded.
61 return true; 78 return true;
62 } 79 }
63 80
64 bool GestureTextSelector::OnSingleTapUp(const MotionEvent& e) { 81 bool GestureTextSelector::OnSingleTapUp(const MotionEvent& e) {
65 DCHECK(text_selection_triggered_); 82 DCHECK(text_selection_triggered_);
66 client_->LongPress(e.GetEventTime(), e.GetX(), e.GetY()); 83 client_->LongPress(e.GetEventTime(), e.GetX(), e.GetY());
67 return true; 84 return true;
68 } 85 }
69 86
70 bool GestureTextSelector::OnScroll(const MotionEvent& e1, 87 bool GestureTextSelector::OnScroll(const MotionEvent& e1,
71 const MotionEvent& e2, 88 const MotionEvent& e2,
72 float distance_x, 89 float distance_x,
73 float distance_y) { 90 float distance_y) {
74 DCHECK(text_selection_triggered_); 91 DCHECK(text_selection_triggered_);
92
93 // Return if Stylus button is not pressed.
94 if (!secondary_button_pressed_)
95 return true;
96
75 // TODO(changwan): check if we can show handles after the scroll finishes 97 // TODO(changwan): check if we can show handles after the scroll finishes
76 // instead. Currently it is not possible as ShowSelectionHandles should 98 // instead. Currently it is not possible as ShowSelectionHandles should
77 // be called before we change the selection. 99 // be called before we change the selection.
78 client_->ShowSelectionHandlesAutomatically(); 100 client_->ShowSelectionHandlesAutomatically();
79 client_->SelectRange(e1.GetX(), e1.GetY(), e2.GetX(), e2.GetY()); 101 client_->SelectRange(anchor_x_, anchor_y_, e2.GetX(), e2.GetY());
80 return true; 102 return true;
81 } 103 }
82 104
83 // static 105 // static
84 bool GestureTextSelector::ShouldStartTextSelection(const MotionEvent& event) { 106 bool GestureTextSelector::ShouldStartTextSelection(const MotionEvent& event) {
85 DCHECK_GT(event.GetPointerCount(), 0u); 107 DCHECK_GT(event.GetPointerCount(), 0u);
86 // Currently we are supporting stylus-only cases. 108 // Currently we are supporting stylus-only cases.
87 const bool is_stylus = event.GetToolType(0) == MotionEvent::TOOL_TYPE_STYLUS; 109 const bool is_stylus = event.GetToolType(0) == MotionEvent::TOOL_TYPE_STYLUS;
88 const bool is_only_secondary_button_pressed = 110 const bool is_only_secondary_button_pressed =
89 event.GetButtonState() == MotionEvent::BUTTON_SECONDARY; 111 event.GetButtonState() == MotionEvent::BUTTON_SECONDARY;
90 return is_stylus && is_only_secondary_button_pressed; 112 return is_stylus && is_only_secondary_button_pressed;
91 } 113 }
92 114
93 } // namespace content 115 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698