Expose adjacent_pane instead of focus_adjacent

This commit is contained in:
Héctor Ramón Jiménez 2020-03-14 04:06:32 +01:00
parent 858c086eee
commit 6e8585e88c

View file

@ -321,8 +321,8 @@ enum FocusedPane {
#[derive(Debug, Clone, Copy, PartialEq, Eq)] #[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Direction { pub enum Direction {
Top, Up,
Bottom, Down,
Left, Left,
Right, Right,
} }
@ -378,18 +378,16 @@ impl<T> State<T> {
} }
} }
pub fn focus(&mut self, pane: &Pane) { pub fn adjacent_pane(
self.internal.focused_pane = FocusedPane::Some { &self,
pane: *pane, pane: &Pane,
focus: Focus::Idle, direction: Direction,
}; ) -> Option<Pane> {
}
pub fn focus_adjacent(&mut self, pane: &Pane, direction: Direction) {
let regions = let regions =
self.internal.layout.regions(0.0, Size::new(4096.0, 4096.0)); self.internal.layout.regions(0.0, Size::new(4096.0, 4096.0));
if let Some(current_region) = regions.get(pane) { let current_region = regions.get(pane)?;
let target = match direction { let target = match direction {
Direction::Left => { Direction::Left => {
Point::new(current_region.x - 1.0, current_region.y + 1.0) Point::new(current_region.x - 1.0, current_region.y + 1.0)
@ -398,10 +396,10 @@ impl<T> State<T> {
current_region.x + current_region.width + 1.0, current_region.x + current_region.width + 1.0,
current_region.y + 1.0, current_region.y + 1.0,
), ),
Direction::Top => { Direction::Up => {
Point::new(current_region.x + 1.0, current_region.y - 1.0) Point::new(current_region.x + 1.0, current_region.y - 1.0)
} }
Direction::Bottom => Point::new( Direction::Down => Point::new(
current_region.x + 1.0, current_region.x + 1.0,
current_region.y + current_region.height + 1.0, current_region.y + current_region.height + 1.0,
), ),
@ -410,10 +408,16 @@ impl<T> State<T> {
let mut colliding_regions = let mut colliding_regions =
regions.iter().filter(|(_, region)| region.contains(target)); regions.iter().filter(|(_, region)| region.contains(target));
if let Some((pane, _)) = colliding_regions.next() { let (pane, _) = colliding_regions.next()?;
self.focus(&pane);
} Some(*pane)
} }
pub fn focus(&mut self, pane: &Pane) {
self.internal.focused_pane = FocusedPane::Some {
pane: *pane,
focus: Focus::Idle,
};
} }
pub fn split_vertically(&mut self, pane: &Pane, state: T) -> Option<Pane> { pub fn split_vertically(&mut self, pane: &Pane, state: T) -> Option<Pane> {