mirror of
https://github.com/ratatui/ratatui.git
synced 2025-10-02 15:25:54 +00:00
feat(Line): add alignment convenience functions (#856)
This adds convenience functions `left_aligned()`, `centered()` and `right_aligned()` plus unit tests. Updated example code.
This commit is contained in:
parent
f780be31f3
commit
79ceb9f7b6
@ -185,7 +185,7 @@ fn create_groups<'a>(app: &'a App, combine_values_and_labels: bool) -> Vec<BarGr
|
|||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
BarGroup::default()
|
BarGroup::default()
|
||||||
.label(Line::from(month).alignment(Alignment::Center))
|
.label(Line::from(month).centered())
|
||||||
.bars(&bars)
|
.bars(&bars)
|
||||||
})
|
})
|
||||||
.collect()
|
.collect()
|
||||||
|
@ -58,8 +58,7 @@ fn ui(frame: &mut Frame) {
|
|||||||
// title
|
// title
|
||||||
frame.render_widget(
|
frame.render_widget(
|
||||||
Paragraph::new(vec![
|
Paragraph::new(vec![
|
||||||
Line::from("Horizontal Layout Example. Press q to quit".dark_gray())
|
Line::from("Horizontal Layout Example. Press q to quit".dark_gray()).centered(),
|
||||||
.alignment(Alignment::Center),
|
|
||||||
Line::from("Each line has 2 constraints, plus Min(0) to fill the remaining space."),
|
Line::from("Each line has 2 constraints, plus Min(0) to fill the remaining space."),
|
||||||
Line::from("E.g. the second line of the Len/Min box is [Length(2), Min(2), Min(0)]"),
|
Line::from("E.g. the second line of the Len/Min box is [Length(2), Min(2), Min(0)]"),
|
||||||
Line::from("Note: constraint labels that don't fit are truncated"),
|
Line::from("Note: constraint labels that don't fit are truncated"),
|
||||||
|
@ -212,7 +212,7 @@ fn ui(f: &mut Frame, app: &mut App) {
|
|||||||
.items
|
.items
|
||||||
.iter()
|
.iter()
|
||||||
.map(|i| {
|
.map(|i| {
|
||||||
let mut lines = vec![Line::from(i.0.bold()).alignment(Alignment::Center)];
|
let mut lines = vec![Line::from(i.0.bold()).centered()];
|
||||||
for _ in 0..i.1 {
|
for _ in 0..i.1 {
|
||||||
lines.push(
|
lines.push(
|
||||||
"Lorem ipsum dolor sit amet, consectetur adipiscing elit."
|
"Lorem ipsum dolor sit amet, consectetur adipiscing elit."
|
||||||
|
@ -198,6 +198,8 @@ impl<'a> Line<'a> {
|
|||||||
/// Sets the target alignment for this line of text.
|
/// Sets the target alignment for this line of text.
|
||||||
///
|
///
|
||||||
/// Defaults to: [`None`], meaning the alignment is determined by the rendering widget.
|
/// Defaults to: [`None`], meaning the alignment is determined by the rendering widget.
|
||||||
|
/// Setting the alignment of a Line generally overrides the alignment of its
|
||||||
|
/// parent Text or Widget.
|
||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
@ -218,6 +220,57 @@ impl<'a> Line<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Left-aligns this line of text.
|
||||||
|
///
|
||||||
|
/// Convenience shortcut for `Line::alignment(Alignment::Left)`.
|
||||||
|
/// Setting the alignment of a Line generally overrides the alignment of its
|
||||||
|
/// parent Text or Widget, with the default alignment being inherited from the parent.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// # use ratatui::prelude::*;
|
||||||
|
/// let line = Line::from("Hi, what's up?").left_aligned();
|
||||||
|
/// ```
|
||||||
|
#[must_use = "method moves the value of self and returns the modified value"]
|
||||||
|
pub fn left_aligned(self) -> Self {
|
||||||
|
self.alignment(Alignment::Left)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Center-aligns this line of text.
|
||||||
|
///
|
||||||
|
/// Convenience shortcut for `Line::alignment(Alignment::Center)`.
|
||||||
|
/// Setting the alignment of a Line generally overrides the alignment of its
|
||||||
|
/// parent Text or Widget, with the default alignment being inherited from the parent.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// # use ratatui::prelude::*;
|
||||||
|
/// let line = Line::from("Hi, what's up?").centered();
|
||||||
|
/// ```
|
||||||
|
#[must_use = "method moves the value of self and returns the modified value"]
|
||||||
|
pub fn centered(self) -> Self {
|
||||||
|
self.alignment(Alignment::Center)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Right-aligns this line of text.
|
||||||
|
///
|
||||||
|
/// Convenience shortcut for `Line::alignment(Alignment::Right)`.
|
||||||
|
/// Setting the alignment of a Line generally overrides the alignment of its
|
||||||
|
/// parent Text or Widget, with the default alignment being inherited from the parent.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// # use ratatui::prelude::*;
|
||||||
|
/// let line = Line::from("Hi, what's up?").right_aligned();
|
||||||
|
/// ```
|
||||||
|
#[must_use = "method moves the value of self and returns the modified value"]
|
||||||
|
pub fn right_aligned(self) -> Self {
|
||||||
|
self.alignment(Alignment::Right)
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns the width of the underlying string.
|
/// Returns the width of the underlying string.
|
||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
@ -665,4 +718,22 @@ mod tests {
|
|||||||
assert_buffer_eq!(buf, expected);
|
assert_buffer_eq!(buf, expected);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn left_aligned() {
|
||||||
|
let line = Line::from("Hello, world!").left_aligned();
|
||||||
|
assert_eq!(line.alignment, Some(Alignment::Left));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn centered() {
|
||||||
|
let line = Line::from("Hello, world!").centered();
|
||||||
|
assert_eq!(line.alignment, Some(Alignment::Center));
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn right_aligned() {
|
||||||
|
let line = Line::from("Hello, world!").right_aligned();
|
||||||
|
assert_eq!(line.alignment, Some(Alignment::Right));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user