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 centered on both axis.

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 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));

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 the maximum of self and other.

This is equivalent to Vec2::max(self, other).

Returns (max(self.x,other.x), self.y+other.y)

Returns (self.x+other.x, max(self.y,other.y))

Returns true if self fits in the given rectangle.

Returns self.x + self.y.

Returns self.x * self.y

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));

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));

Alias for Self::new(0,0).

Examples

assert_eq!(Vec2::zero(), Vec2::new(0, 0));

Creates a new XY from the given values.

Swaps the x and y values.

Examples

let xy = XY::new(1, 2);
assert_eq!(xy.swap(), XY::new(2, 1));

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));

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));

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));

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));

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 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)));

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));

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

Examples

let xy = XY::new(1, 2);
assert_eq!(xy + (2, 3), XY::new(3, 5));

The resulting type after applying the + operator.

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

Returns the “default value” for a type. Read more

Examples

let xy = XY::new(1, 4);
assert_eq!(xy / 2, XY::new(0, 2));

The resulting type after applying the / operator.

Examples

let u = XY::new(2, 3);
let v = XY::new(1, 2);
assert_eq!(u / v, XY::new(2, 1));

The resulting type after applying the / operator.

Clone a XY

Examples

let xy = XY::new(String::from("a"), String::from("ab"));
assert_eq!(XY::from(&xy), xy);

A pair is assumed to be (x, y)

Easily zip a pair of XY into a XY of pair

Examples

let xy: XY<isize> = XY::from((-1i32, -2i32));
assert_eq!(xy, XY::new(-1, -2));

Examples

let v = Vec2::from((1u16, 2u16));
assert_eq!(v, Vec2::new(1, 2));

Examples

let v = Vec2::from((1u32, 2u32));
assert_eq!(v, Vec2::new(1, 2));

Examples

let v = Vec2::from((1u8, 2u8));
assert_eq!(v, Vec2::new(1, 2));

Examples

let u = Vec2::new(1, 2);
let v: XY<isize> = XY::from(u);
assert_eq!(v, XY::new(1, 2));

Feeds this value into the given Hasher. Read more

Feeds a slice of this type into the given Hasher. Read more

The returned type after indexing.

Performs the indexing (container[index]) operation. Read more

The returned type after indexing.

Performs the indexing (container[index]) operation. Read more

Performs the mutable indexing (container[index]) operation. Read more

Iterate over x, then y.

The type of the elements being iterated over.

Which kind of iterator are we turning this into?

Examples

let u = XY::new(1, 2);
let v = XY::new(2, 3);
assert_eq!(u * v, XY::new(2, 6));

The resulting type after applying the * operator.

Examples

let v = Vec2::new(1, 2);
assert_eq!(v * 2, Vec2::new(2, 4));

The resulting type after applying the * operator.

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

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

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more

Examples

let xy = XY::new(1, 2);
assert_eq!(xy - (1, 0), XY::new(0, 2));

The resulting type after applying the - operator.

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Performs the conversion.

Performs the conversion.

The resulting type after obtaining ownership.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

Calls the given closure and return the result. Read more

Calls the given closure on self.

Calls the given closure on self.

Calls the given closure if condition == true.