[−][src]Struct cursive_core::XY
A generic structure with a value for each axis.
Fields
x: T
X-axis value
y: T
Y-axis value
Implementations
impl XY<Offset>
[src]
pub fn center() -> Self
[src]
Returns a position centered on both axis.
pub fn absolute<T: Into<Vec2>>(offset: T) -> Self
[src]
Returns a position absolute on both axis.
pub fn parent<T: Into<XY<isize>>>(offset: T) -> Self
[src]
Returns a position relative to the parent on both axis.
pub fn compute_offset<S, A, P>(&self, size: S, available: A, parent: P) -> Vec2 where
S: Into<Vec2>,
A: Into<Vec2>,
P: Into<Vec2>,
[src]
S: Into<Vec2>,
A: Into<Vec2>,
P: Into<Vec2>,
Computes the offset required to draw a view.
When drawing a view with size
in a container with available
,
and a parent with the absolute coordinates parent
, drawing the
child with its top-left corner at the returned coordinates will
position him appropriately.
impl XY<usize>
[src]
pub fn max_value() -> Self
[src]
Returns a Vec2
with usize::max_value()
in each axis.
Examples
assert!(Vec2::new(9999, 9999) < Vec2::max_value());
pub fn saturating_sub<O: Into<Self>>(&self, other: O) -> Self
[src]
Saturating subtraction. Computes self - other
, saturating at 0.
Never panics.
Examples
let u = Vec2::new(1, 2); let v = Vec2::new(2, 1); assert_eq!(u.saturating_sub(v), Vec2::new(0, 1));
pub fn saturating_add<O: Into<XY<isize>>>(&self, other: O) -> Self
[src]
Saturating addition with a signed vec.
Any coordinates saturates to 0.
Examples
let u = Vec2::new(1, 2); let v = XY::<isize>::new(-2, 1); assert_eq!(u.saturating_add(v), Vec2::new(0, 3));
pub fn checked_add<O: Into<XY<isize>>>(&self, other: O) -> Option<Self>
[src]
Checked addition with a signed vec.
Will return None
if any coordinates exceeds bounds.
pub fn div_up<O>(&self, other: O) -> Self where
O: Into<Self>,
[src]
O: Into<Self>,
Term-by-term integer division that rounds up.
Examples
let u = Vec2::new(1, 6); let v = Vec2::new(2, 3); assert_eq!(u.div_up(v), Vec2::new(1, 2));
pub fn checked_sub<O: Into<Self>>(&self, other: O) -> Option<Self>
[src]
Checked subtraction. Computes self - other
if possible.
Returns None
if self.x < other.x || self.y < other.y
.
Never panics.
Examples
let xy = Vec2::new(1, 2); assert_eq!(xy.checked_sub((1, 1)), Some(Vec2::new(0, 1))); assert_eq!(xy.checked_sub((2, 2)), None);
pub fn signed(self) -> XY<isize>
[src]
Returns a XY<isize>
from self
.
Examples
let v: XY<isize> = Vec2::new(1, 2).signed().map(|i| i - 5); assert_eq!(v, XY::new(-4, -3)); let u = Vec2::new(3, 4); assert_eq!(u.saturating_add(v), Vec2::new(0, 1));
impl<T: Ord> XY<T>
[src]
pub fn fits_in<O: Into<Self>>(&self, other: O) -> bool
[src]
Returns true
if self
could fit inside other
.
Shortcut for self.x <= other.x && self.y <= other.y
.
If this returns true
, then other - self
will not underflow.
Examples
let v = Vec2::new(1, 2); assert!(v.fits_in((1, 2))); assert!(v.fits_in((3, 3))); assert!(!v.fits_in((2, 1)));
pub fn fits<O: Into<Self>>(&self, other: O) -> bool
[src]
Returns true
if other
could fit inside self
.
Shortcut for self.x >= other.x && self.y >= other.y
.
If this returns true
, then self - other
will not underflow.
Examples
let v = Vec2::new(1, 2); assert!(v.fits((1, 2))); assert!(v.fits((0, 0))); assert!(!v.fits((2, 1)));
pub fn strictly_lt<O: Into<Self>>(&self, other: O) -> bool
[src]
Returns true
if other
is strictly less than self
in each axis.
pub fn strictly_gt<O: Into<Self>>(&self, other: O) -> bool
[src]
Returns true
if other
is strictly greater than self
in each axis.
pub fn max<A: Into<XY<T>>, B: Into<XY<T>>>(a: A, b: B) -> Self
[src]
Returns a new Vec2 that is a maximum per coordinate.
Examples
assert_eq!(Vec2::max((1, 2), (3, 1)), Vec2::new(3, 2));
pub fn min<A: Into<XY<T>>, B: Into<XY<T>>>(a: A, b: B) -> Self
[src]
Returns a new Vec2 that is no larger than any input in both dimensions.
Examples
assert_eq!(Vec2::min((1, 2), (3, 1)), Vec2::new(1, 1));
pub fn or_min<O: Into<XY<T>>>(self, other: O) -> Self
[src]
Returns the minimum of self
and other
.
This is equivalent to Vec2::min(self, other)
.
pub fn or_max<O: Into<XY<T>>>(self, other: O) -> Self
[src]
Returns the maximum of self
and other
.
This is equivalent to Vec2::max(self, other)
.
impl<T: Ord + Add<Output = T> + Clone> XY<T>
[src]
pub fn stack_vertical(&self, other: &Self) -> Self
[src]
Returns (max(self.x,other.x), self.y+other.y)
pub fn stack_horizontal(&self, other: &Self) -> Self
[src]
Returns (self.x+other.x, max(self.y,other.y))
pub fn fits_in_rect<O1, O2>(&self, top_left: O1, size: O2) -> bool where
O1: Into<Self>,
O2: Into<Self>,
[src]
O1: Into<Self>,
O2: Into<Self>,
Returns true
if self
fits in the given rectangle.
impl<T: Add> XY<T>
[src]
impl<T: Mul> XY<T>
[src]
impl<T: Zero + Clone> XY<T>
[src]
pub fn keep_x(&self) -> Self
[src]
Returns a vector with the X component of self, and y=0.
Examples
let xy = XY::new(1, 2); assert_eq!(xy.keep_x(), XY::new(1, 0));
pub fn keep_y(&self) -> Self
[src]
Returns a vector with the Y component of self, and x=0.
Examples
let xy = XY::new(1, 2); assert_eq!(xy.keep_y(), XY::new(0, 2));
pub fn zero() -> Self
[src]
impl<T> XY<T>
[src]
pub fn new(x: T, y: T) -> Self
[src]
Creates a new XY
from the given values.
pub fn swap(self) -> Self
[src]
pub fn fold<U, F>(self, f: F) -> U where
F: FnOnce(T, T) -> U,
[src]
F: FnOnce(T, T) -> U,
Returns f(self.x, self.y)
Examples
let xy = XY::new(1, 2); assert_eq!(xy.fold(std::ops::Add::add), 3); assert_eq!(xy.fold(std::ops::Mul::mul), 2); assert_eq!(xy.fold(|x, y| x < y), true);
pub fn map<U, F>(self, f: F) -> XY<U> where
F: Fn(T) -> U,
[src]
F: Fn(T) -> U,
Creates a new XY
by applying f
to x
and y
.
Examples
let xy = XY::new(1, 2); assert_eq!(xy.map(|v| v * 2), XY::new(2, 4)); assert_eq!(xy.map(|v| v > 1), XY::new(false, true));
pub fn map_if<F>(self, condition: XY<bool>, f: F) -> Self where
F: Fn(T) -> T,
[src]
F: Fn(T) -> T,
Applies f
on axis where condition
is true.
Carries over self
otherwise.
Examples
let xy = XY::new(1, 2); let cond = XY::new(true, false); assert_eq!(xy.map_if(cond, |v| v * 3), XY::new(3, 2));
pub fn run_if<F, U>(self, condition: XY<bool>, f: F) -> XY<Option<U>> where
F: Fn(T) -> U,
[src]
F: Fn(T) -> U,
Applies f
on axis where condition
is true.
Returns None
otherwise.
Examples
let xy = XY::new(1, 2); let cond = XY::new(true, false); assert_eq!(xy.run_if(cond, |v| v * 3), XY::new(Some(3), None));
pub fn map_x<F>(self, f: F) -> Self where
F: FnOnce(T) -> T,
[src]
F: FnOnce(T) -> T,
Creates a new XY
by applying f
to x
, and carrying y
over.
Examples
let xy = XY::new(1, 2); assert_eq!(xy.map_x(|x| x * 10), XY::new(10, 2));
pub fn map_y<F>(self, f: F) -> Self where
F: FnOnce(T) -> T,
[src]
F: FnOnce(T) -> T,
Creates a new XY
by applying f
to y
, and carrying x
over.
Examples
let xy = XY::new(1, 2); assert_eq!(xy.map_y(|y| y * 10), XY::new(1, 20));
pub fn pair(self) -> (T, T)
[src]
Destructure self into a pair.
Examples
let xy = XY::new(1, 2); let (x, y) = xy.pair(); assert_eq!((x, y), (1, 2));
pub fn as_ref(&self) -> XY<&T>
[src]
Return a XY
with references to this one's values.
Examples
fn longer(xy: &XY<String>, l: usize) -> XY<bool> { // `XY::map` takes ownership // So we need to get a XY<&String> from a &XY<String> let by_ref: XY<&String> = xy.as_ref(); by_ref.map(|s| s.len() > l) } let xy = XY::new(String::from("a"), String::from("bbb")); assert_eq!(longer(&xy, 2), XY::new(false, true));
pub fn iter(&self) -> Chain<Once<&T>, Once<&T>>
[src]
Creates an iterator that returns references to x
, then y
.
Examples
let xy = XY::new(1, 2); let vec: Vec<bool> = xy.iter().map(|&i| i > 1).collect(); assert_eq!(vec, vec![false, true]);
pub fn get(&self, o: Orientation) -> &T
[src]
Returns a reference to the value on the given axis.
Examples
let xy = XY::new(1, 2); assert_eq!(xy.get(Orientation::Horizontal), &1); assert_eq!(xy.get(Orientation::Vertical), &2);
pub fn get_mut(&mut self, o: Orientation) -> &mut T
[src]
Returns a mutable reference to the value on the given axis.
Examples
let mut xy = XY::new(1, 2); *xy.get_mut(Orientation::Horizontal) = 10; assert_eq!(xy, XY::new(10, 2));
pub fn zip<U>(self, other: XY<U>) -> XY<(T, U)>
[src]
Returns a new XY
of tuples made by zipping self
and other
.
Examples
let a = XY::new(1, 2); let b = XY::new(true, false); assert_eq!(a.zip(b), XY::new((1, true), (2, false)));
pub fn zip3<U, V>(self, a: XY<U>, b: XY<V>) -> XY<(T, U, V)>
[src]
Returns a new XY
of tuples made by zipping self
, a
and b
.
Examples
let a = XY::new(1, 2); let b = XY::new(true, false); let c = XY::new("x", "y"); assert_eq!(a.zip3(b, c), XY::new((1, true, "x"), (2, false, "y")));
pub fn zip4<U, V, W>(self, a: XY<U>, b: XY<V>, c: XY<W>) -> XY<(T, U, V, W)>
[src]
Returns a new XY
of tuples made by zipping self
, a
, b
and c
.
Examples
let a = XY::new(1, 2); let b = XY::new(true, false); let c = XY::new("x", "y"); let d = XY::new(vec![1], vec![2, 3, 4]); assert_eq!( XY::zip4(a, b, c, d), XY::new((1, true, "x", vec![1]), (2, false, "y", vec![2, 3, 4])) );
pub fn zip5<U, V, W, Z>(
self,
a: XY<U>,
b: XY<V>,
c: XY<W>,
d: XY<Z>
) -> XY<(T, U, V, W, Z)>
[src]
self,
a: XY<U>,
b: XY<V>,
c: XY<W>,
d: XY<Z>
) -> XY<(T, U, V, W, Z)>
Returns a new XY
of tuples made by zipping self
, a
, b
, c
and d
.
Examples
let a = XY::new(1, 2); let b = XY::new(true, false); let c = XY::new("x", "y"); let d = XY::new(vec![1], vec![2, 3, 4]); let e = XY::new('a', 'b'); let xy: XY<Option<char>> = XY::zip5(a, b, c, d, e) .map(|(a, b, c, d, e)| { if b && d.contains(&a) { Some(e) } else { c.chars().next() } }); assert_eq!(xy, XY::new(Some('a'), Some('y')));
pub fn zip_map<U, V, F>(self, other: XY<U>, f: F) -> XY<V> where
F: Fn(T, U) -> V,
[src]
F: Fn(T, U) -> V,
Returns a new XY
by calling f
on self
and other
for each axis.
Examples
let a = XY::new((1, 10), (2, 20)); let b = XY::new(true, false); let xy = a.zip_map(b, |(a1, a2), b| if b { a1 } else { a2 }); assert_eq!(xy, XY::new(1, 20));
pub fn keep(self, keep: XY<bool>) -> XY<Option<T>>
[src]
For each axis, keep the element from self
if keep
is true
.
Examples
let xy = XY::new(1, 2); let cond = XY::new(true, false); assert_eq!(xy.keep(cond), XY::new(Some(1), None));
impl<T: Clone> XY<T>
[src]
pub fn with_axis(&self, o: Orientation, value: T) -> Self
[src]
Returns a new XY
with the axis o
set to value
.
Examples
let xy = XY::new(1, 2).with_axis(Orientation::Horizontal, 42); assert_eq!(xy, XY::new(42, 2));
pub fn with_axis_from(&self, o: Orientation, other: &Self) -> Self
[src]
Returns a new XY
with the axis o
set to the value from other
.
Examples
let other = XY::new(3, 4); let xy = XY::new(1, 2).with_axis_from(Orientation::Horizontal, &other); assert_eq!(xy, XY::new(3, 2));
pub fn set_axis_from(&mut self, o: Orientation, other: &Self)
[src]
Sets the axis o
on self
to the value from other
.
Examples
let mut xy = XY::new(1, 2); let other = XY::new(3, 4); xy.set_axis_from(Orientation::Horizontal, &other); assert_eq!(xy, XY::new(3, 2));
pub fn both_from(value: T) -> Self
[src]
Creates a XY
with both x
and y
set to value
.
Examples
let xy = XY::both_from(42); assert_eq!(xy, XY::new(42, 42));
impl<T> XY<Option<T>>
[src]
pub fn unwrap_or(self, other: XY<T>) -> XY<T>
[src]
Returns a new XY
by calling unwrap_or
on each axis.
Examples
let xy = XY::new(Some(1), None); assert_eq!(xy.unwrap_or(XY::new(10, 20)), XY::new(1, 20));
pub fn both(self) -> Option<XY<T>>
[src]
Returns a new XY
if both components are present in self
.
Examples
assert_eq!(XY::new(Some(1), None).both(), None); assert_eq!(XY::new(Some(1), Some(2)).both(), Some(XY::new(1, 2)));
impl XY<bool>
[src]
pub fn any(self) -> bool
[src]
Returns true
if any of x
or y
is true
.
Examples
assert_eq!(XY::new(true, false).any(), true); assert_eq!(XY::new(false, false).any(), false); assert_eq!(XY::new('a', 'b').map(|c| c == 'a').any(), true);
pub fn both(self) -> bool
[src]
Returns true
if both x
and y
are true
.
Examples
assert_eq!(XY::new(true, false).both(), false); assert_eq!(XY::new(true, true).both(), true); assert_eq!(XY::new("abc", "de").map(|s| s.len() > 2).both(), false);
pub fn select<T>(self, other: XY<T>) -> XY<Option<T>>
[src]
For each axis, keeps elements from other
if self
is true
.
Examples
let choice = XY::new(true, false); let values = XY::new(1, 2); let selection = choice.select(values); assert_eq!(selection, XY::new(Some(1), None));
pub fn select_or<T>(self, if_true: XY<T>, if_false: XY<T>) -> XY<T>
[src]
For each axis, selects if_true
if self
is true, else if_false
.
Examples
let choice = XY::new(true, false); let values = XY::new(1, 2); let fallback = XY::new(3, 4); let selection = choice.select_or(values, fallback); assert_eq!(selection, XY::new(1, 4));
pub fn and(self, other: Self) -> Self
[src]
Returns a term-by-term AND operation.
Examples
let a = XY::new(true, false); let b = XY::new(true, true); assert_eq!(a.and(b), XY::new(true, false));
pub fn or(self, other: Self) -> Self
[src]
Returns a term-by-term OR operation.
Examples
let a = XY::new(true, false); let b = XY::new(true, true); assert_eq!(a.or(b), XY::new(true, true));
Trait Implementations
impl<T, O> Add<O> for XY<T> where
T: Add<Output = T>,
O: Into<XY<T>>,
[src]
T: Add<Output = T>,
O: Into<XY<T>>,
type Output = Self
The resulting type after applying the +
operator.
fn add(self, other: O) -> Self
[src]
Examples
let xy = XY::new(1, 2); assert_eq!(xy + (2, 3), XY::new(3, 5));
impl<T: Clone> Clone for XY<T>
[src]
impl<T: Copy> Copy for XY<T>
[src]
impl<T: Debug> Debug for XY<T>
[src]
impl<T: Clone + Div<Output = T>> Div<T> for XY<T>
[src]
type Output = Self
The resulting type after applying the /
operator.
fn div(self, other: T) -> Self
[src]
Examples
let xy = XY::new(1, 4); assert_eq!(xy / 2, XY::new(0, 2));
impl<T> Div<XY<T>> for XY<T> where
T: Div<T>,
[src]
T: Div<T>,
type Output = XY<T::Output>
The resulting type after applying the /
operator.
fn div(self, other: XY<T>) -> Self::Output
[src]
Examples
let u = XY::new(2, 3); let v = XY::new(1, 2); assert_eq!(u / v, XY::new(2, 1));
impl<T: Eq> Eq for XY<T>
[src]
impl<'a, T> From<&'a XY<T>> for XY<T> where
T: Clone,
[src]
T: Clone,
fn from(t: &'a XY<T>) -> Self
[src]
Clone a XY
Examples
let xy = XY::new(String::from("a"), String::from("ab")); assert_eq!(XY::from(&xy), xy);
impl<T> From<(T, T)> for XY<T>
[src]
impl<T, U> From<(XY<T>, XY<U>)> for XY<(T, U)>
[src]
impl From<(i32, i32)> for XY<usize>
[src]
fn from((x, y): (i32, i32)) -> Self
[src]
Examples
let xy: XY<isize> = XY::from((-1i32, -2i32)); assert_eq!(xy, XY::new(-1, -2));
impl From<(u16, u16)> for XY<usize>
[src]
fn from((x, y): (u16, u16)) -> Self
[src]
Examples
let v = Vec2::from((1u16, 2u16)); assert_eq!(v, Vec2::new(1, 2));
impl From<(u32, u32)> for XY<usize>
[src]
fn from((x, y): (u32, u32)) -> Self
[src]
Examples
let v = Vec2::from((1u32, 2u32)); assert_eq!(v, Vec2::new(1, 2));
impl From<(u8, u8)> for XY<usize>
[src]
fn from((x, y): (u8, u8)) -> Self
[src]
Examples
let v = Vec2::from((1u8, 2u8)); assert_eq!(v, Vec2::new(1, 2));
impl<T> From<T> for XY<isize> where
T: Into<XY<usize>>,
[src]
T: Into<XY<usize>>,
fn from(t: T) -> Self
[src]
Examples
let u = Vec2::new(1, 2); let v: XY<isize> = XY::from(u); assert_eq!(v, XY::new(1, 2));
impl<T: Hash> Hash for XY<T>
[src]
fn hash<__H: Hasher>(&self, state: &mut __H)
[src]
fn hash_slice<H>(data: &[Self], state: &mut H) where
H: Hasher,
1.3.0[src]
H: Hasher,
impl<T> IntoIterator for XY<T>
[src]
type Item = T
The type of the elements being iterated over.
type IntoIter = Chain<Once<T>, Once<T>>
Which kind of iterator are we turning this into?
fn into_iter(self) -> Self::IntoIter
[src]
Iterate over x, then y.
impl<T> Mul<XY<T>> for XY<T> where
T: Mul<T>,
[src]
T: Mul<T>,
type Output = XY<T::Output>
The resulting type after applying the *
operator.
fn mul(self, other: XY<T>) -> Self::Output
[src]
Examples
let u = XY::new(1, 2); let v = XY::new(2, 3); assert_eq!(u * v, XY::new(2, 6));
impl Mul<usize> for XY<usize>
[src]
type Output = Vec2
The resulting type after applying the *
operator.
fn mul(self, other: usize) -> Vec2
[src]
Examples
let v = Vec2::new(1, 2); assert_eq!(v * 2, Vec2::new(2, 4));
impl<T: PartialEq> PartialEq<XY<T>> for XY<T>
[src]
impl<T: PartialOrd> PartialOrd<XY<T>> for XY<T>
[src]
fn partial_cmp(&self, other: &XY<T>) -> Option<Ordering>
[src]
a < b
<=> a.x < b.x && a.y < b.y
#[must_use]fn lt(&self, other: &Rhs) -> bool
1.0.0[src]
#[must_use]fn le(&self, other: &Rhs) -> bool
1.0.0[src]
#[must_use]fn gt(&self, other: &Rhs) -> bool
1.0.0[src]
#[must_use]fn ge(&self, other: &Rhs) -> bool
1.0.0[src]
impl<T> StructuralEq for XY<T>
[src]
impl<T> StructuralPartialEq for XY<T>
[src]
impl<T, O> Sub<O> for XY<T> where
T: Sub<Output = T>,
O: Into<XY<T>>,
[src]
T: Sub<Output = T>,
O: Into<XY<T>>,
Auto Trait Implementations
impl<T> RefUnwindSafe for XY<T> where
T: RefUnwindSafe,
T: RefUnwindSafe,
impl<T> Send for XY<T> where
T: Send,
T: Send,
impl<T> Sync for XY<T> where
T: Sync,
T: Sync,
impl<T> Unpin for XY<T> where
T: Unpin,
T: Unpin,
impl<T> UnwindSafe for XY<T> where
T: UnwindSafe,
T: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> CallHasher for T where
T: Hash,
[src]
T: Hash,
impl<T> Erased for T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<I> IntoIterator for I where
I: Iterator,
[src]
I: Iterator,
type Item = <I as Iterator>::Item
The type of the elements being iterated over.
type IntoIter = I
Which kind of iterator are we turning this into?
fn into_iter(self) -> I
[src]
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
fn to_owned(&self) -> T
[src]
fn clone_into(&self, target: &mut T)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,