pub struct Rect {
pub x: u16,
pub y: u16,
pub width: u16,
pub height: u16,
}
Expand description
A Rectangular area.
A simple rectangle used in the computation of the layout and to give widgets a hint about the area they are supposed to render to.
Fields§
§x: u16
The x coordinate of the top left corner of the Rect
.
y: u16
The y coordinate of the top left corner of the Rect
.
width: u16
The width of the Rect
.
height: u16
The height of the Rect
.
Implementations§
Source§impl Rect
impl Rect
Sourcepub const fn new(x: u16, y: u16, width: u16, height: u16) -> Self
pub const fn new(x: u16, y: u16, width: u16, height: u16) -> Self
Creates a new Rect
, with width and height limited to keep both bounds within u16
.
If the width or height would cause the right or bottom coordinate to be larger than the
maximum value of u16
, the width or height will be clamped to keep the right or bottom
coordinate within u16
.
§Examples
use ratatui::layout::Rect;
let rect = Rect::new(1, 2, 3, 4);
Sourcepub const fn area(self) -> u32
pub const fn area(self) -> u32
The area of the Rect
. If the area is larger than the maximum value of u16
, it will be
clamped to u16::MAX
.
Sourcepub const fn right(self) -> u16
pub const fn right(self) -> u16
Returns the right coordinate of the Rect
. This is the first coordinate outside of the
Rect
.
If the right coordinate is larger than the maximum value of u16, it will be clamped to
u16::MAX
.
Sourcepub const fn bottom(self) -> u16
pub const fn bottom(self) -> u16
Returns the bottom coordinate of the Rect
. This is the first coordinate outside of the
Rect
.
If the bottom coordinate is larger than the maximum value of u16, it will be clamped to
u16::MAX
.
Sourcepub const fn inner(self, margin: Margin) -> Self
pub const fn inner(self, margin: Margin) -> Self
Returns a new Rect
inside the current one, with the given margin on each side.
If the margin is larger than the Rect
, the returned Rect
will have no area.
Sourcepub fn union(self, other: Self) -> Self
pub fn union(self, other: Self) -> Self
Returns a new Rect
that contains both the current one and the given one.
Sourcepub fn intersection(self, other: Self) -> Self
pub fn intersection(self, other: Self) -> Self
Returns a new Rect
that is the intersection of the current one and the given one.
If the two Rect
s do not intersect, the returned Rect
will have no area.
Sourcepub const fn intersects(self, other: Self) -> bool
pub const fn intersects(self, other: Self) -> bool
Returns true if the two Rect
s intersect.
Sourcepub const fn contains(self, position: Position) -> bool
pub const fn contains(self, position: Position) -> bool
Returns true if the given position is inside the Rect
.
The position is considered inside the Rect
if it is on the Rect
’s border.
§Examples
use ratatui::layout::{Position, Rect};
let rect = Rect::new(1, 2, 3, 4);
assert!(rect.contains(Position { x: 1, y: 2 }));
Sourcepub fn clamp(self, other: Self) -> Self
pub fn clamp(self, other: Self) -> Self
Clamp this Rect
to fit inside the other Rect
.
If the width or height of this Rect
is larger than the other Rect
, it will be clamped to
the other Rect
’s width or height.
If the left or top coordinate of this Rect
is smaller than the other Rect
, it will be
clamped to the other Rect
’s left or top coordinate.
If the right or bottom coordinate of this Rect
is larger than the other Rect
, it will be
clamped to the other Rect
’s right or bottom coordinate.
This is different from Rect::intersection
because it will move this Rect
to fit inside
the other Rect
, while Rect::intersection
instead would keep this Rect
’s position and
truncate its size to only that which is inside the other Rect
.
§Examples
use ratatui::{layout::Rect, Frame};
let area = frame.area();
let rect = Rect::new(0, 0, 100, 100).clamp(area);
Sourcepub const fn rows(self) -> Rows ⓘ
pub const fn rows(self) -> Rows ⓘ
An iterator over rows within the Rect
.
§Example
use ratatui::{buffer::Buffer, layout::Rect, text::Line, widgets::Widget};
fn render(area: Rect, buf: &mut Buffer) {
for row in area.rows() {
Line::raw("Hello, world!").render(row, buf);
}
}
Sourcepub const fn columns(self) -> Columns ⓘ
pub const fn columns(self) -> Columns ⓘ
An iterator over columns within the Rect
.
§Example
use ratatui::{
buffer::Buffer,
layout::Rect,
widgets::{Block, Borders, Widget},
};
fn render(area: Rect, buf: &mut Buffer) {
if let Some(left) = area.columns().next() {
Block::new().borders(Borders::LEFT).render(left, buf);
}
}
Sourcepub const fn positions(self) -> Positions ⓘ
pub const fn positions(self) -> Positions ⓘ
An iterator over the positions within the Rect
.
The positions are returned in a row-major order (left-to-right, top-to-bottom).
§Example
use ratatui::{buffer::Buffer, layout::Rect};
fn render(area: Rect, buf: &mut Buffer) {
for position in area.positions() {
buf[(position.x, position.y)].set_symbol("x");
}
}
Sourcepub const fn as_position(self) -> Position
pub const fn as_position(self) -> Position
Trait Implementations§
impl Copy for Rect
impl Eq for Rect
impl StructuralPartialEq for Rect
Auto Trait Implementations§
impl Freeze for Rect
impl RefUnwindSafe for Rect
impl Send for Rect
impl Sync for Rect
impl Unpin for Rect
impl UnwindSafe for Rect
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> ToCompactString for Twhere
T: Display,
impl<T> ToCompactString for Twhere
T: Display,
Source§fn try_to_compact_string(&self) -> Result<CompactString, ToCompactStringError>
fn try_to_compact_string(&self) -> Result<CompactString, ToCompactStringError>
ToCompactString::to_compact_string()
Read moreSource§fn to_compact_string(&self) -> CompactString
fn to_compact_string(&self) -> CompactString
CompactString
. Read more