pub struct Style {
pub fg: Option<Color>,
pub bg: Option<Color>,
pub underline_color: Option<Color>,
pub add_modifier: Modifier,
pub sub_modifier: Modifier,
}
Expand description
Style lets you control the main characteristics of the displayed elements.
use ratatui::style::{Color, Modifier, Style};
Style::default()
.fg(Color::Black)
.bg(Color::Green)
.add_modifier(Modifier::ITALIC | Modifier::BOLD);
Styles can also be created with a shorthand notation.
use ratatui::style::{Style, Stylize};
Style::new().black().on_green().italic().bold();
For more information about the style shorthands, see the Stylize
trait.
We implement conversions from Color
and Modifier
to Style
so you can use them
anywhere that accepts Into<Style>
.
use ratatui::{
style::{Color, Modifier, Style},
text::Line,
};
Line::styled("hello", Style::new().fg(Color::Red));
// simplifies to
Line::styled("hello", Color::Red);
Line::styled("hello", Style::new().add_modifier(Modifier::BOLD));
// simplifies to
Line::styled("hello", Modifier::BOLD);
Styles represents an incremental change. If you apply the styles S1, S2, S3 to a cell of the terminal buffer, the style of this cell will be the result of the merge of S1, S2 and S3, not just S3.
use ratatui::{
buffer::Buffer,
layout::Rect,
style::{Color, Modifier, Style},
};
let styles = [
Style::default()
.fg(Color::Blue)
.add_modifier(Modifier::BOLD | Modifier::ITALIC),
Style::default()
.bg(Color::Red)
.add_modifier(Modifier::UNDERLINED),
#[cfg(feature = "underline-color")]
Style::default().underline_color(Color::Green),
Style::default()
.fg(Color::Yellow)
.remove_modifier(Modifier::ITALIC),
];
let mut buffer = Buffer::empty(Rect::new(0, 0, 1, 1));
for style in &styles {
buffer[(0, 0)].set_style(*style);
}
assert_eq!(
Style {
fg: Some(Color::Yellow),
bg: Some(Color::Red),
#[cfg(feature = "underline-color")]
underline_color: Some(Color::Green),
add_modifier: Modifier::BOLD | Modifier::UNDERLINED,
sub_modifier: Modifier::empty(),
},
buffer[(0, 0)].style(),
);
The default implementation returns a Style
that does not modify anything. If you wish to
reset all properties until that point use Style::reset
.
use ratatui::{
buffer::Buffer,
layout::Rect,
style::{Color, Modifier, Style},
};
let styles = [
Style::default()
.fg(Color::Blue)
.add_modifier(Modifier::BOLD | Modifier::ITALIC),
Style::reset().fg(Color::Yellow),
];
let mut buffer = Buffer::empty(Rect::new(0, 0, 1, 1));
for style in &styles {
buffer[(0, 0)].set_style(*style);
}
assert_eq!(
Style {
fg: Some(Color::Yellow),
bg: Some(Color::Reset),
#[cfg(feature = "underline-color")]
underline_color: Some(Color::Reset),
add_modifier: Modifier::empty(),
sub_modifier: Modifier::empty(),
},
buffer[(0, 0)].style(),
);
Fields§
§fg: Option<Color>
§bg: Option<Color>
§underline_color: Option<Color>
§add_modifier: Modifier
§sub_modifier: Modifier
Implementations§
Source§impl Style
impl Style
pub const fn new() -> Self
Sourcepub const fn fg(self, color: Color) -> Self
pub const fn fg(self, color: Color) -> Self
Changes the foreground color.
§Examples
use ratatui::style::{Color, Style};
let style = Style::default().fg(Color::Blue);
let diff = Style::default().fg(Color::Red);
assert_eq!(style.patch(diff), Style::default().fg(Color::Red));
Sourcepub const fn bg(self, color: Color) -> Self
pub const fn bg(self, color: Color) -> Self
Changes the background color.
§Examples
use ratatui::style::{Color, Style};
let style = Style::default().bg(Color::Blue);
let diff = Style::default().bg(Color::Red);
assert_eq!(style.patch(diff), Style::default().bg(Color::Red));
Sourcepub const fn underline_color(self, color: Color) -> Self
pub const fn underline_color(self, color: Color) -> Self
Changes the underline color. The text must be underlined with a modifier for this to work.
This uses a non-standard ANSI escape sequence. It is supported by most terminal emulators,
but is only implemented in the crossterm backend and enabled by the underline-color
feature flag.
See
Wikipedia
code 58
and 59
for more information.
§Examples
use ratatui::style::{Color, Modifier, Style};
let style = Style::default()
.underline_color(Color::Blue)
.add_modifier(Modifier::UNDERLINED);
let diff = Style::default()
.underline_color(Color::Red)
.add_modifier(Modifier::UNDERLINED);
assert_eq!(
style.patch(diff),
Style::default()
.underline_color(Color::Red)
.add_modifier(Modifier::UNDERLINED)
);
Sourcepub const fn add_modifier(self, modifier: Modifier) -> Self
pub const fn add_modifier(self, modifier: Modifier) -> Self
Changes the text emphasis.
When applied, it adds the given modifier to the Style
modifiers.
§Examples
use ratatui::style::{Modifier, Style};
let style = Style::default().add_modifier(Modifier::BOLD);
let diff = Style::default().add_modifier(Modifier::ITALIC);
let patched = style.patch(diff);
assert_eq!(patched.add_modifier, Modifier::BOLD | Modifier::ITALIC);
assert_eq!(patched.sub_modifier, Modifier::empty());
Sourcepub const fn remove_modifier(self, modifier: Modifier) -> Self
pub const fn remove_modifier(self, modifier: Modifier) -> Self
Changes the text emphasis.
When applied, it removes the given modifier from the Style
modifiers.
§Examples
use ratatui::style::{Modifier, Style};
let style = Style::default().add_modifier(Modifier::BOLD | Modifier::ITALIC);
let diff = Style::default().remove_modifier(Modifier::ITALIC);
let patched = style.patch(diff);
assert_eq!(patched.add_modifier, Modifier::BOLD);
assert_eq!(patched.sub_modifier, Modifier::ITALIC);
Sourcepub fn patch<S: Into<Self>>(self, other: S) -> Self
pub fn patch<S: Into<Self>>(self, other: S) -> Self
Results in a combined style that is equivalent to applying the two individual styles to a style one after the other.
style
accepts any type that is convertible to Style
(e.g. Style
, Color
, or
your own type that implements Into<Style>
).
§Examples
use ratatui::style::{Color, Modifier, Style};
let style_1 = Style::default().fg(Color::Yellow);
let style_2 = Style::default().bg(Color::Red);
let combined = style_1.patch(style_2);
assert_eq!(
Style::default().patch(style_1).patch(style_2),
Style::default().patch(combined)
);
Trait Implementations§
Source§impl Debug for Style
impl Debug for Style
A custom debug implementation that prints only the fields that are not the default, and unwraps
the Option
s.
Source§impl From<(Color, Color)> for Style
impl From<(Color, Color)> for Style
Source§fn from((fg, bg): (Color, Color)) -> Self
fn from((fg, bg): (Color, Color)) -> Self
Creates a new Style
with the given foreground and background colors.
§Example
use ratatui::style::{Color, Style};
// red foreground, blue background
let style = Style::from((Color::Red, Color::Blue));
// default foreground, blue background
let style = Style::from((Color::Reset, Color::Blue));
Source§impl From<(Color, Color, Modifier)> for Style
impl From<(Color, Color, Modifier)> for Style
Source§fn from((fg, bg, modifier): (Color, Color, Modifier)) -> Self
fn from((fg, bg, modifier): (Color, Color, Modifier)) -> Self
Creates a new Style
with the given foreground and background colors and modifier added.
To specify multiple modifiers, use the |
operator.
§Example
use ratatui::style::{Color, Modifier, Style};
// red foreground, blue background, add bold and italic
let style = Style::from((Color::Red, Color::Blue, Modifier::BOLD | Modifier::ITALIC));
Source§impl From<(Color, Color, Modifier, Modifier)> for Style
impl From<(Color, Color, Modifier, Modifier)> for Style
Source§fn from(
(fg, bg, add_modifier, sub_modifier): (Color, Color, Modifier, Modifier),
) -> Self
fn from( (fg, bg, add_modifier, sub_modifier): (Color, Color, Modifier, Modifier), ) -> Self
Creates a new Style
with the given foreground and background colors and modifiers added
and removed.
§Example
use ratatui::style::{Color, Modifier, Style};
// red foreground, blue background, add bold and italic, remove dim
let style = Style::from((
Color::Red,
Color::Blue,
Modifier::BOLD | Modifier::ITALIC,
Modifier::DIM,
));
Source§impl From<(Color, Modifier)> for Style
impl From<(Color, Modifier)> for Style
Source§fn from((fg, modifier): (Color, Modifier)) -> Self
fn from((fg, modifier): (Color, Modifier)) -> Self
Creates a new Style
with the given foreground color and modifier added.
To specify multiple modifiers, use the |
operator.
§Example
use ratatui::style::{Color, Modifier, Style};
// red foreground, add bold and italic
let style = Style::from((Color::Red, Modifier::BOLD | Modifier::ITALIC));
Source§impl From<ContentStyle> for Style
impl From<ContentStyle> for Style
Source§fn from(value: ContentStyle) -> Self
fn from(value: ContentStyle) -> Self
Source§impl From<Modifier> for Style
impl From<Modifier> for Style
Source§fn from(modifier: Modifier) -> Self
fn from(modifier: Modifier) -> Self
Creates a new Style
with the given modifier added.
To specify multiple modifiers, use the |
operator.
To specify modifiers to add and remove, use the from((add_modifier, sub_modifier))
constructor.
§Example
use ratatui::style::{Style, Modifier};
// add bold and italic
let style = Style::from(Modifier::BOLD|Modifier::ITALIC);
impl Copy for Style
impl Eq for Style
impl StructuralPartialEq for Style
Auto Trait Implementations§
impl Freeze for Style
impl RefUnwindSafe for Style
impl Send for Style
impl Sync for Style
impl Unpin for Style
impl UnwindSafe for Style
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<'a, T, U> Stylize<'a, T> for Uwhere
U: Styled<Item = T>,
impl<'a, T, U> Stylize<'a, T> for Uwhere
U: Styled<Item = T>,
fn bg<C>(self, color: C) -> T
fn fg<C>(self, color: C) -> T
fn add_modifier(self, modifier: Modifier) -> T
fn remove_modifier(self, modifier: Modifier) -> T
fn reset(self) -> T
Source§fn on_magenta(self) -> T
fn on_magenta(self) -> T
magenta
.Source§fn on_dark_gray(self) -> T
fn on_dark_gray(self) -> T
dark_gray
.Source§fn on_light_red(self) -> T
fn on_light_red(self) -> T
light_red
.Source§fn light_green(self) -> T
fn light_green(self) -> T
light_green
.Source§fn on_light_green(self) -> T
fn on_light_green(self) -> T
light_green
.Source§fn light_yellow(self) -> T
fn light_yellow(self) -> T
light_yellow
.Source§fn on_light_yellow(self) -> T
fn on_light_yellow(self) -> T
light_yellow
.Source§fn light_blue(self) -> T
fn light_blue(self) -> T
light_blue
.Source§fn on_light_blue(self) -> T
fn on_light_blue(self) -> T
light_blue
.Source§fn light_magenta(self) -> T
fn light_magenta(self) -> T
light_magenta
.Source§fn on_light_magenta(self) -> T
fn on_light_magenta(self) -> T
light_magenta
.Source§fn light_cyan(self) -> T
fn light_cyan(self) -> T
light_cyan
.Source§fn on_light_cyan(self) -> T
fn on_light_cyan(self) -> T
light_cyan
.Source§fn not_italic(self) -> T
fn not_italic(self) -> T
ITALIC
modifier.Source§fn underlined(self) -> T
fn underlined(self) -> T
UNDERLINED
modifier.Source§fn not_underlined(self) -> T
fn not_underlined(self) -> T
UNDERLINED
modifier.Source§fn slow_blink(self) -> T
fn slow_blink(self) -> T
SLOW_BLINK
modifier.Source§fn not_slow_blink(self) -> T
fn not_slow_blink(self) -> T
SLOW_BLINK
modifier.Source§fn rapid_blink(self) -> T
fn rapid_blink(self) -> T
RAPID_BLINK
modifier.Source§fn not_rapid_blink(self) -> T
fn not_rapid_blink(self) -> T
RAPID_BLINK
modifier.Source§fn not_reversed(self) -> T
fn not_reversed(self) -> T
REVERSED
modifier.HIDDEN
modifier.HIDDEN
modifier.Source§fn crossed_out(self) -> T
fn crossed_out(self) -> T
CROSSED_OUT
modifier.Source§fn not_crossed_out(self) -> T
fn not_crossed_out(self) -> T
CROSSED_OUT
modifier.