mirror of
https://github.com/servo/servo.git
synced 2025-07-22 23:03:42 +01:00
Fix mouse button handling
This commit is contained in:
parent
7df1849e89
commit
e15bc7516c
3 changed files with 16 additions and 6 deletions
|
@ -896,7 +896,7 @@ impl<Window: WindowMethods + ?Sized> IOCompositor<Window> {
|
||||||
result.point_in_viewport.to_untyped(),
|
result.point_in_viewport.to_untyped(),
|
||||||
Some(UntrustedNodeAddress(result.tag.0 as *const c_void)),
|
Some(UntrustedNodeAddress(result.tag.0 as *const c_void)),
|
||||||
Some(result.point_relative_to_item.to_untyped()),
|
Some(result.point_relative_to_item.to_untyped()),
|
||||||
MouseButton::Left as u16,
|
button as u16,
|
||||||
);
|
);
|
||||||
|
|
||||||
let pipeline_id = PipelineId::from_webrender(result.pipeline);
|
let pipeline_id = PipelineId::from_webrender(result.pipeline);
|
||||||
|
|
|
@ -1188,7 +1188,7 @@ impl Document {
|
||||||
pub fn handle_mouse_event(
|
pub fn handle_mouse_event(
|
||||||
&self,
|
&self,
|
||||||
js_runtime: *mut JSRuntime,
|
js_runtime: *mut JSRuntime,
|
||||||
_button: MouseButton,
|
button: MouseButton,
|
||||||
client_point: Point2D<f32>,
|
client_point: Point2D<f32>,
|
||||||
mouse_event_type: MouseEventType,
|
mouse_event_type: MouseEventType,
|
||||||
node_address: Option<UntrustedNodeAddress>,
|
node_address: Option<UntrustedNodeAddress>,
|
||||||
|
@ -1244,7 +1244,11 @@ impl Document {
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
0i16,
|
match &button {
|
||||||
|
MouseButton::Left => 0i16,
|
||||||
|
MouseButton::Middle => 1i16,
|
||||||
|
MouseButton::Right => 2i16,
|
||||||
|
},
|
||||||
pressed_mouse_buttons,
|
pressed_mouse_buttons,
|
||||||
None,
|
None,
|
||||||
point_in_node,
|
point_in_node,
|
||||||
|
|
|
@ -261,14 +261,20 @@ impl Window {
|
||||||
use servo::script_traits::MouseButton;
|
use servo::script_traits::MouseButton;
|
||||||
|
|
||||||
let max_pixel_dist = 10.0 * self.servo_hidpi_factor().get();
|
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 {
|
let event = match action {
|
||||||
ElementState::Pressed => {
|
ElementState::Pressed => {
|
||||||
self.mouse_down_point.set(coords);
|
self.mouse_down_point.set(coords);
|
||||||
self.mouse_down_button.set(Some(button));
|
self.mouse_down_button.set(Some(button));
|
||||||
MouseWindowEvent::MouseDown(MouseButton::Left, coords.to_f32())
|
MouseWindowEvent::MouseDown(mouse_button, coords.to_f32())
|
||||||
},
|
},
|
||||||
ElementState::Released => {
|
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() {
|
match self.mouse_down_button.get() {
|
||||||
None => mouse_up_event,
|
None => mouse_up_event,
|
||||||
Some(but) if button == but => {
|
Some(but) if button == but => {
|
||||||
|
@ -280,7 +286,7 @@ impl Window {
|
||||||
self.event_queue
|
self.event_queue
|
||||||
.borrow_mut()
|
.borrow_mut()
|
||||||
.push(WindowEvent::MouseWindowEventClass(mouse_up_event));
|
.push(WindowEvent::MouseWindowEventClass(mouse_up_event));
|
||||||
MouseWindowEvent::Click(MouseButton::Left, coords.to_f32())
|
MouseWindowEvent::Click(mouse_button, coords.to_f32())
|
||||||
} else {
|
} else {
|
||||||
mouse_up_event
|
mouse_up_event
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue