diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2025-05-09 09:18:22 +0300 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2025-05-09 10:28:20 +0300 |
| commit | 84323d10a487b3db300b5897371d278355cb31c3 (patch) | |
| tree | c729a5dd662933010bfc3e043335e8cf8fa85308 /src | |
| parent | b956f2775c8e115964f78551a29d26dcced31f45 (diff) | |
| download | niri-84323d10a487b3db300b5897371d278355cb31c3.tar.gz niri-84323d10a487b3db300b5897371d278355cb31c3.tar.bz2 niri-84323d10a487b3db300b5897371d278355cb31c3.zip | |
Support tablet input for screenshot UI selection
Diffstat (limited to 'src')
| -rw-r--r-- | src/input/mod.rs | 42 |
1 files changed, 41 insertions, 1 deletions
diff --git a/src/input/mod.rs b/src/input/mod.rs index b5a095c2..63a68142 100644 --- a/src/input/mod.rs +++ b/src/input/mod.rs @@ -3020,6 +3020,21 @@ impl State { return; }; + if let Some(output) = self.niri.screenshot_ui.selection_output() { + let geom = self.niri.global_space.output_geometry(output).unwrap(); + let mut point = (pos - geom.loc.to_f64()) + .to_physical(output.current_scale().fractional_scale()) + .to_i32_round::<i32>(); + + let size = output.current_mode().unwrap().size; + let transform = output.current_transform(); + let size = transform.transform_size(size); + point.x = point.x.clamp(0, size.w - 1); + point.y = point.y.clamp(0, size.h - 1); + + self.niri.screenshot_ui.pointer_motion(point); + } + let under = self.niri.contents_under(pos); let tablet_seat = self.niri.seat.tablet_seat(); @@ -3068,10 +3083,35 @@ impl State { let Some(tool) = tool else { return; }; + let tip_state = event.tip_state(); + + if self.niri.screenshot_ui.is_open() { + if let Some(pos) = self.niri.tablet_cursor_location { + if let Some((output, _)) = self.niri.output_under(pos) { + let output = output.clone(); + let geom = self.niri.global_space.output_geometry(&output).unwrap(); + let mut point = (pos - geom.loc.to_f64()) + .to_physical(output.current_scale().fractional_scale()) + .to_i32_round(); + + let size = output.current_mode().unwrap().size; + let transform = output.current_transform(); + let size = transform.transform_size(size); + point.x = min(size.w - 1, point.x); + point.y = min(size.h - 1, point.y); + + let down = tip_state == TabletToolTipState::Down; + + if self.niri.screenshot_ui.pointer_button(output, point, down) { + self.niri.queue_redraw_all(); + } + } + } + } let is_overview_open = self.niri.layout.is_overview_open(); - match event.tip_state() { + match tip_state { TabletToolTipState::Down => { let serial = SERIAL_COUNTER.next_serial(); tool.tip_down(serial, event.time_msec()); |
