pub enum CssColor {
Rgba(u8, u8, u8, f32),
Current,
System(SystemColor),
}Expand description
A parsed CSS color value, before lowering to a terminal Color.
Terminal cells are opaque and know nothing of CSS inheritance, so translucency and contextual keywords survive parsing here and only collapse when a caller lowers them with the context it actually has.
Variants§
Rgba(u8, u8, u8, f32)
An absolute color: sRGB channel bytes plus an alpha in [0, 1].
Current
The currentcolor keyword: the element’s own foreground.
System(SystemColor)
A system color keyword, resolved against the Theme.
Implementations§
Source§impl CssColor
impl CssColor
Sourcepub fn parse(value: &str) -> Option<Self>
pub fn parse(value: &str) -> Option<Self>
Parses any supported CSS color; None when value is not one.
Sourcepub fn resolve(self, theme: &Theme) -> Color
pub fn resolve(self, theme: &Theme) -> Color
Lowers to a cell color with only a theme in hand: system colors
read the theme, while currentcolor and fully transparent values
become Color::Default — the terminal’s own pass-through
color is the nearest thing to “inherit” and “let the background
show”. Translucent values keep their color: without a backdrop
there is nothing to blend with (see Self::composite).
Sourcepub fn composite(self, theme: &Theme, current: Color, backdrop: Color) -> Color
pub fn composite(self, theme: &Theme, current: Color, backdrop: Color) -> Color
Lowers to a cell color with full context: currentcolor becomes
current, system colors read the theme, and translucency is
alpha-blended over backdrop. Blending needs concrete channels,
so over a default or indexed backdrop full transparency yields
the backdrop itself and partial translucency keeps the color.
§Example
use omp_tui::{Color, CssColor, Theme};
let red = CssColor::parse("rgb(255 0 0 / 50%)").unwrap();
let lowered = red.composite(&Theme::default(), Color::Default, Color::Rgb(0, 0, 0));
assert_eq!(lowered, Color::Rgb(128, 0, 0));Trait Implementations§
impl Copy for CssColor
impl StructuralPartialEq for CssColor
Auto Trait Implementations§
impl Freeze for CssColor
impl RefUnwindSafe for CssColor
impl Send for CssColor
impl Sync for CssColor
impl Unpin for CssColor
impl UnsafeUnpin for CssColor
impl UnwindSafe for CssColor
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<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
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