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

Unified Diff: content/browser/renderer_host/input/synthetic_mouse_driver.cc

Issue 2634183002: Support multi-button press for synthetic mouse events (Closed)
Patch Set: Test modifiers and button Created 3 years, 11 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
Index: content/browser/renderer_host/input/synthetic_mouse_driver.cc
diff --git a/content/browser/renderer_host/input/synthetic_mouse_driver.cc b/content/browser/renderer_host/input/synthetic_mouse_driver.cc
index 4db6f2deaf3639571e59d6217f89616b6047b38f..445027c4aed1633375e230e7ace2abeb967184e9 100644
--- a/content/browser/renderer_host/input/synthetic_mouse_driver.cc
+++ b/content/browser/renderer_host/input/synthetic_mouse_driver.cc
@@ -8,7 +8,36 @@
namespace content {
-SyntheticMouseDriver::SyntheticMouseDriver() {}
+namespace {
+
+unsigned GetWebMouseEventModifier(int button) {
+ switch (button) {
+ case 0:
+ return blink::WebMouseEvent::LeftButtonDown;
+ case 1:
+ return blink::WebMouseEvent::MiddleButtonDown;
+ case 2:
+ return blink::WebMouseEvent::RightButtonDown;
+ }
+ NOTREACHED();
+ return blink::WebMouseEvent::NoModifiers;
+}
+
+blink::WebMouseEvent::Button GetWebMouseEventButton(int button) {
+ switch (button) {
+ case 0:
+ return blink::WebMouseEvent::Button::Left;
+ case 1:
+ return blink::WebMouseEvent::Button::Middle;
+ case 2:
+ return blink::WebMouseEvent::Button::Right;
+ }
+ NOTREACHED();
+ return blink::WebMouseEvent::Button::NoButton;
+}
+}
+
+SyntheticMouseDriver::SyntheticMouseDriver() : last_modifiers_(0) {}
SyntheticMouseDriver::~SyntheticMouseDriver() {}
@@ -18,11 +47,14 @@ void SyntheticMouseDriver::DispatchEvent(SyntheticGestureTarget* target,
target->DispatchInputEventToPlatform(mouse_event_);
}
-void SyntheticMouseDriver::Press(float x, float y, int index) {
+void SyntheticMouseDriver::Press(float x, float y, int index, int button) {
DCHECK_EQ(index, 0);
+ int modifiers = GetWebMouseEventModifier(button);
mouse_event_ = SyntheticWebMouseEventBuilder::Build(
- blink::WebInputEvent::MouseDown, x, y, 0);
+ blink::WebInputEvent::MouseDown, x, y, modifiers | last_modifiers_);
mouse_event_.clickCount = 1;
+ mouse_event_.button = GetWebMouseEventButton(button);
+ last_modifiers_ = modifiers | last_modifiers_;
}
void SyntheticMouseDriver::Move(float x, float y, int index) {
@@ -30,16 +62,19 @@ void SyntheticMouseDriver::Move(float x, float y, int index) {
blink::WebMouseEvent::Button button = mouse_event_.button;
int click_count = mouse_event_.clickCount;
mouse_event_ = SyntheticWebMouseEventBuilder::Build(
- blink::WebInputEvent::MouseMove, x, y, 0);
+ blink::WebInputEvent::MouseMove, x, y, last_modifiers_);
mouse_event_.button = button;
mouse_event_.clickCount = click_count;
}
-void SyntheticMouseDriver::Release(int index) {
+void SyntheticMouseDriver::Release(int index, int button) {
DCHECK_EQ(index, 0);
mouse_event_ = SyntheticWebMouseEventBuilder::Build(
- blink::WebInputEvent::MouseUp, mouse_event_.x, mouse_event_.y, 0);
+ blink::WebInputEvent::MouseUp, mouse_event_.x, mouse_event_.y,
+ last_modifiers_);
mouse_event_.clickCount = 1;
+ mouse_event_.button = GetWebMouseEventButton(button);
+ last_modifiers_ = last_modifiers_ & (~GetWebMouseEventModifier(button));
}
bool SyntheticMouseDriver::UserInputCheck(
@@ -53,9 +88,10 @@ bool SyntheticMouseDriver::UserInputCheck(
}
if (params.pointer_action_type() ==
- SyntheticPointerActionParams::PointerActionType::PRESS &&
- mouse_event_.clickCount > 0) {
- return false;
+ SyntheticPointerActionParams::PointerActionType::PRESS) {
+ int modifiers = GetWebMouseEventModifier(params.button());
+ if (last_modifiers_ & modifiers)
+ return false;
}
if (params.pointer_action_type() ==

Powered by Google App Engine
This is Rietveld 408576698