1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
use ::libc; use ::pty; use std::fmt; use super::Cardinal; #[repr(C)] #[derive(Clone, Copy, Eq, PartialEq)] pub struct Position { cardinal: Cardinal, cartesian: [libc::c_ushort; 2], } impl Position { pub fn get_coordinate(&self, size: &pty::Winszed) -> (usize, usize) { match self.cartesian { [0, 0] => self.cardinal.get_coordinate(size), [x, y] => (x as usize, y as usize), } } pub fn set_cardinal(&mut self, cardinal: Cardinal) { self.cardinal = cardinal; } } impl fmt::Debug for Position { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "Position {{ cardinal: {:?}, cartesian: {:?} }}", self.cardinal, self.cartesian) } } impl From<Cardinal> for Position { fn from(cardinal: Cardinal) -> Position { Position { cardinal: cardinal, cartesian: [0, 0], } } } impl From<[libc::c_ushort; 2]> for Position { fn from(cartesian: [libc::c_ushort; 2]) -> Position { Position { cardinal: Cardinal::default(), cartesian: cartesian, } } } impl Default for Position { fn default() -> Position { Position { cardinal: Cardinal::default(), cartesian: [0, 0], } } }