| 29 | |
| 30 | impl MoveEvent { |
| 31 | pub(crate) fn from_keyboard(event: &Event<KeyboardData>, step: f64) -> Option<Self> { |
| 32 | let modifiers = event.data().modifiers(); |
| 33 | let modifiers = MoveModifiers { |
| 34 | alt_key: modifiers.alt(), |
| 35 | ctrl_key: modifiers.ctrl(), |
| 36 | meta_key: modifiers.meta(), |
| 37 | shift_key: modifiers.shift(), |
| 38 | }; |
| 39 | let delta = if modifiers.shift_key { |
| 40 | step * 10.0 |
| 41 | } else { |
| 42 | step |
| 43 | }; |
| 44 | |
| 45 | let (delta_x, delta_y) = match event.data().key() { |
| 46 | Key::ArrowUp => (0.0, delta), |
| 47 | Key::ArrowDown => (0.0, -delta), |
| 48 | Key::ArrowRight => (delta, 0.0), |
| 49 | Key::ArrowLeft => (-delta, 0.0), |
| 50 | _ => return None, |
| 51 | }; |
| 52 | |
| 53 | Some(Self { |
| 54 | delta_x, |
| 55 | delta_y, |
| 56 | modifiers, |
| 57 | }) |
| 58 | } |
| 59 | } |
| 60 | |
| 61 | /// Shared movement state for controls that support pointer dragging and arrow keys. |