@@ -12,7 +12,8 @@ use web_sys::{Document, KeyboardEvent, Navigator, PageTransitionEvent, PointerEv
1212use web_time:: { Duration , Instant } ;
1313use winit_core:: application:: ApplicationHandler ;
1414use winit_core:: event:: {
15- DeviceEvent , DeviceId , ElementState , RawKeyEvent , StartCause , WindowEvent ,
15+ ButtonSource , DeviceEvent , DeviceId , ElementState , PointerSource , RawKeyEvent , StartCause ,
16+ WindowEvent ,
1617} ;
1718use winit_core:: event_loop:: { ControlFlow , DeviceEvents } ;
1819use winit_core:: window:: WindowId ;
@@ -315,9 +316,10 @@ impl Shared {
315316 return ;
316317 }
317318
318- // chorded button event
319- let device_id = event:: mkdid ( event . pointer_id ( ) ) ;
319+ let pointer_id = event. pointer_id ( ) ;
320+ let device_id = event:: mkdid ( pointer_id) ;
320321
322+ // chorded button event
321323 if let Some ( button) = backend:: event:: raw_button ( & event) {
322324 let state = if backend:: event:: pointer_buttons ( & event)
323325 . contains ( ButtonsState :: from_bits_retain ( button) )
@@ -327,9 +329,25 @@ impl Shared {
327329 ElementState :: Released
328330 } ;
329331
332+ let kind = backend:: event:: pointer_kind ( & event, pointer_id) ;
333+ let source = match backend:: event:: pointer_source ( & event, kind) {
334+ PointerSource :: Mouse => {
335+ ButtonSource :: Mouse ( backend:: event:: mouse_button ( button) )
336+ } ,
337+ PointerSource :: Touch { finger_id, force } => {
338+ ButtonSource :: Touch { finger_id, force }
339+ } ,
340+ PointerSource :: TabletTool { kind, data } => ButtonSource :: TabletTool {
341+ kind,
342+ button : backend:: event:: tool_button ( button) ,
343+ data,
344+ } ,
345+ PointerSource :: Unknown => ButtonSource :: Unknown ( button) ,
346+ } ;
347+
330348 runner. send_event ( Event :: DeviceEvent {
331349 device_id,
332- event : DeviceEvent :: Button { button : button . into ( ) , state } ,
350+ event : DeviceEvent :: PointerButton { button : source , state } ,
333351 } ) ;
334352
335353 return ;
@@ -376,11 +394,28 @@ impl Shared {
376394 return ;
377395 }
378396
397+ let pointer_id = event. pointer_id ( ) ;
398+ let kind = backend:: event:: pointer_kind ( & event, pointer_id) ;
379399 let button = backend:: event:: raw_button ( & event) . expect ( "no pointer button pressed" ) ;
400+ let source = match backend:: event:: pointer_source ( & event, kind) {
401+ PointerSource :: Mouse => {
402+ ButtonSource :: Mouse ( backend:: event:: mouse_button ( button) )
403+ } ,
404+ PointerSource :: Touch { finger_id, force } => {
405+ ButtonSource :: Touch { finger_id, force }
406+ } ,
407+ PointerSource :: TabletTool { kind, data } => ButtonSource :: TabletTool {
408+ kind,
409+ button : backend:: event:: tool_button ( button) ,
410+ data,
411+ } ,
412+ PointerSource :: Unknown => ButtonSource :: Unknown ( button) ,
413+ } ;
414+
380415 runner. send_event ( Event :: DeviceEvent {
381- device_id : event:: mkdid ( event . pointer_id ( ) ) ,
382- event : DeviceEvent :: Button {
383- button : button . into ( ) ,
416+ device_id : event:: mkdid ( pointer_id) ,
417+ event : DeviceEvent :: PointerButton {
418+ button : source ,
384419 state : ElementState :: Pressed ,
385420 } ,
386421 } ) ;
@@ -395,11 +430,28 @@ impl Shared {
395430 return ;
396431 }
397432
433+ let pointer_id = event. pointer_id ( ) ;
434+ let kind = backend:: event:: pointer_kind ( & event, pointer_id) ;
398435 let button = backend:: event:: raw_button ( & event) . expect ( "no pointer button pressed" ) ;
436+ let source = match backend:: event:: pointer_source ( & event, kind) {
437+ PointerSource :: Mouse => {
438+ ButtonSource :: Mouse ( backend:: event:: mouse_button ( button) )
439+ } ,
440+ PointerSource :: Touch { finger_id, force } => {
441+ ButtonSource :: Touch { finger_id, force }
442+ } ,
443+ PointerSource :: TabletTool { kind, data } => ButtonSource :: TabletTool {
444+ kind,
445+ button : backend:: event:: tool_button ( button) ,
446+ data,
447+ } ,
448+ PointerSource :: Unknown => ButtonSource :: Unknown ( button) ,
449+ } ;
450+
399451 runner. send_event ( Event :: DeviceEvent {
400452 device_id : event:: mkdid ( event. pointer_id ( ) ) ,
401- event : DeviceEvent :: Button {
402- button : button . into ( ) ,
453+ event : DeviceEvent :: PointerButton {
454+ button : source ,
403455 state : ElementState :: Released ,
404456 } ,
405457 } ) ;
0 commit comments