Fix mouse button handling

This commit is contained in:
YUAN LYU 2020-12-06 00:20:22 -05:00
parent 7df1849e89
commit e15bc7516c
3 changed files with 16 additions and 6 deletions

View file

@ -896,7 +896,7 @@ impl<Window: WindowMethods + ?Sized> IOCompositor<Window> {
result.point_in_viewport.to_untyped(),
Some(UntrustedNodeAddress(result.tag.0 as *const c_void)),
Some(result.point_relative_to_item.to_untyped()),
MouseButton::Left as u16,
button as u16,
);
let pipeline_id = PipelineId::from_webrender(result.pipeline);

View file

@ -1188,7 +1188,7 @@ impl Document {
pub fn handle_mouse_event(
&self,
js_runtime: *mut JSRuntime,
_button: MouseButton,
button: MouseButton,
client_point: Point2D<f32>,
mouse_event_type: MouseEventType,
node_address: Option<UntrustedNodeAddress>,
@ -1244,7 +1244,11 @@ impl Document {
false,
false,
false,
0i16,
match &button {
MouseButton::Left => 0i16,
MouseButton::Middle => 1i16,
MouseButton::Right => 2i16,
},
pressed_mouse_buttons,
None,
point_in_node,

View file

@ -261,14 +261,20 @@ impl Window {
use servo::script_traits::MouseButton;
let max_pixel_dist = 10.0 * self.servo_hidpi_factor().get();
let mouse_button = match &button {
winit::MouseButton::Left => MouseButton::Left,
winit::MouseButton::Right => MouseButton::Right,
winit::MouseButton::Middle => MouseButton::Middle,
_ => MouseButton::Left,
};
let event = match action {
ElementState::Pressed => {
self.mouse_down_point.set(coords);
self.mouse_down_button.set(Some(button));
MouseWindowEvent::MouseDown(MouseButton::Left, coords.to_f32())
MouseWindowEvent::MouseDown(mouse_button, coords.to_f32())
},
ElementState::Released => {
let mouse_up_event = MouseWindowEvent::MouseUp(MouseButton::Left, coords.to_f32());
let mouse_up_event = MouseWindowEvent::MouseUp(mouse_button, coords.to_f32());
match self.mouse_down_button.get() {
None => mouse_up_event,
Some(but) if button == but => {
@ -280,7 +286,7 @@ impl Window {
self.event_queue
.borrow_mut()
.push(WindowEvent::MouseWindowEventClass(mouse_up_event));
MouseWindowEvent::Click(MouseButton::Left, coords.to_f32())
MouseWindowEvent::Click(mouse_button, coords.to_f32())
} else {
mouse_up_event
}