Struct cursive::XY [−][src]
pub struct XY<T> {
pub x: T,
pub y: T,
}
Expand description
A generic structure with a value for each axis.
Fields
x: T
X-axis value
y: T
Y-axis value
Implementations
Returns a position absolute on both axis.
Returns a position relative to the parent on both axis.
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.
Returns a Vec2
with usize::max_value()
in each axis.
Examples
assert!(Vec2::new(9999, 9999) < Vec2::max_value());
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));
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));
Checked addition with a signed vec.
Will return None
if any coordinates exceeds bounds.
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));
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);
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)));
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)));
Returns true
if other
is strictly less than self
in each axis.
Returns true
if other
is strictly greater than self
in each axis.
Returns a new Vec2 that is a maximum per coordinate.
Examples
assert_eq!(Vec2::max((1, 2), (3, 1)), Vec2::new(3, 2));
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));
Returns the minimum of self
and other
.
This is equivalent to Vec2::min(self, other)
.
Returns (max(self.x,other.x), self.y+other.y)
Returns (self.x+other.x, max(self.y,other.y))
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);
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));
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));
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));
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));
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));
Destructure self into a pair.
Examples
let xy = XY::new(1, 2);
let (x, y) = xy.pair();
assert_eq!((x, y), (1, 2));
Returns 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));
Returns a XY
with mutable references to this one’s values.
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]);
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);
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));
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)));
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")));
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]))
);
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')));
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));
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));
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));
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));
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));
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);
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);
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));
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));
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));
Trait Implementations
a < b
<=> a.x < b.x && a.y < b.y
This method tests less than (for self
and other
) and is used by the <
operator. Read more
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
This method tests greater than (for self
and other
) and is used by the >
operator. Read more
Auto Trait Implementations
impl<T> RefUnwindSafe for XY<T> where
T: RefUnwindSafe,
impl<T> UnwindSafe for XY<T> where
T: UnwindSafe,
Blanket Implementations
Mutably borrows from an owned value. Read more
Calls the given closure and return the result. Read more
Calls the given closure on self
.