diff options
| author | Ivan Molodetskikh <yalterz@gmail.com> | 2024-12-15 10:53:15 +0300 |
|---|---|---|
| committer | Ivan Molodetskikh <yalterz@gmail.com> | 2024-12-30 20:12:37 +0300 |
| commit | 3c67b08488789d5781a4b58d4503559145755ba7 (patch) | |
| tree | 9391aa4bb4c242cb94e8dc3d4df21da0284727e5 /src/layout/floating.rs | |
| parent | 4add755a4d72132324be5cfd04fd119850519b5b (diff) | |
| download | niri-3c67b08488789d5781a4b58d4503559145755ba7.tar.gz niri-3c67b08488789d5781a4b58d4503559145755ba7.tar.bz2 niri-3c67b08488789d5781a4b58d4503559145755ba7.zip | |
floating: Implement directional move
Diffstat (limited to 'src/layout/floating.rs')
| -rw-r--r-- | src/layout/floating.rs | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/layout/floating.rs b/src/layout/floating.rs index c3cf8831..2d7d0457 100644 --- a/src/layout/floating.rs +++ b/src/layout/floating.rs @@ -22,6 +22,9 @@ use crate::utils::{ }; use crate::window::ResolvedWindowRules; +/// By how many logical pixels the directional move commands move floating windows. +const DIRECTIONAL_MOVE_PX: f64 = 50.; + /// Space for floating windows. #[derive(Debug)] pub struct FloatingSpace<W: LayoutElement> { @@ -691,6 +694,32 @@ impl<W: LayoutElement> FloatingSpace<W> { } } + fn move_by(&mut self, amount: Point<f64, Logical>) { + let Some(active_id) = &self.active_window_id else { + return; + }; + let active_idx = self.idx_of(active_id).unwrap(); + + let new_pos = self.data[active_idx].logical_pos + amount; + self.move_and_animate(active_idx, new_pos); + } + + pub fn move_left(&mut self) { + self.move_by(Point::from((-DIRECTIONAL_MOVE_PX, 0.))); + } + + pub fn move_right(&mut self) { + self.move_by(Point::from((DIRECTIONAL_MOVE_PX, 0.))); + } + + pub fn move_up(&mut self) { + self.move_by(Point::from((0., -DIRECTIONAL_MOVE_PX))); + } + + pub fn move_down(&mut self) { + self.move_by(Point::from((0., DIRECTIONAL_MOVE_PX))); + } + pub fn center_window(&mut self) { let Some(active_id) = &self.active_window_id else { return; |
