aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2025-05-09 09:18:22 +0300
committerIvan Molodetskikh <yalterz@gmail.com>2025-05-09 10:28:20 +0300
commit84323d10a487b3db300b5897371d278355cb31c3 (patch)
treec729a5dd662933010bfc3e043335e8cf8fa85308 /src
parentb956f2775c8e115964f78551a29d26dcced31f45 (diff)
downloadniri-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.rs42
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());