pub struct ComponentArea(pub Rect);Expand description
Context type for component render area
This is provided by the renderer and consumed by components via use_area().
Implements Deref<Target = Rect> so you can access Rect methods directly:
use reratui::prelude::*;
use ratatui::layout::Margin;
let area = use_area();
let width = area.width; // Direct access to Rect fields
let height = area.height;
let inner = area.inner(&Margin::new(1, 1)); // Call Rect methodsTuple Fields§
§0: RectMethods from Deref<Target = Rect>§
Sourcepub fn area(self) -> u32
pub 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 fn right(self) -> u16
pub 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 fn bottom(self) -> u16
pub 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 fn inner(self, margin: Margin) -> Rect
pub fn inner(self, margin: Margin) -> Rect
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: Rect) -> Rect
pub fn union(self, other: Rect) -> Rect
Returns a new Rect that contains both the current one and the given one.
Sourcepub fn intersection(self, other: Rect) -> Rect
pub fn intersection(self, other: Rect) -> Rect
Returns a new Rect that is the intersection of the current one and the given one.
If the two Rects do not intersect, the returned Rect will have no area.
Sourcepub fn intersects(self, other: Rect) -> bool
pub fn intersects(self, other: Rect) -> bool
Returns true if the two Rects intersect.
Sourcepub fn contains(self, position: Position) -> bool
pub 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: Rect) -> Rect
pub fn clamp(self, other: Rect) -> Rect
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 fn rows(self) -> Rows ⓘ
pub 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 fn columns(self) -> Columns ⓘ
pub 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 fn positions(self) -> Positions ⓘ
pub 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 fn as_position(self) -> Position
pub fn as_position(self) -> Position
Trait Implementations§
Source§impl Clone for ComponentArea
impl Clone for ComponentArea
impl Copy for ComponentArea
Source§impl Debug for ComponentArea
impl Debug for ComponentArea
Source§impl Deref for ComponentArea
impl Deref for ComponentArea
impl Eq for ComponentArea
Source§impl PartialEq for ComponentArea
impl PartialEq for ComponentArea
impl StructuralPartialEq for ComponentArea
Auto Trait Implementations§
impl Freeze for ComponentArea
impl RefUnwindSafe for ComponentArea
impl Send for ComponentArea
impl Sync for ComponentArea
impl Unpin for ComponentArea
impl UnsafeUnpin for ComponentArea
impl UnwindSafe for ComponentArea
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> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
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 more