Skip to main content

Color

Enum Color 

Source
pub enum Color {
    Reset,
    Black,
    Red,
    Green,
    Yellow,
    Blue,
    Magenta,
    Cyan,
    White,
    Rgb(u8, u8, u8),
    Indexed(u8),
}
Expand description

Terminal color.

Covers the standard 16 named colors, 256-color palette indices, and 24-bit RGB true color. Use Color::Reset to restore the terminal’s default foreground or background.

Variants§

§

Reset

Reset to the terminal’s default color.

§

Black

Standard black (color index 0).

§

Red

Standard red (color index 1).

§

Green

Standard green (color index 2).

§

Yellow

Standard yellow (color index 3).

§

Blue

Standard blue (color index 4).

§

Magenta

Standard magenta (color index 5).

§

Cyan

Standard cyan (color index 6).

§

White

Standard white (color index 7).

§

Rgb(u8, u8, u8)

24-bit true color.

§

Indexed(u8)

256-color palette index.

Implementations§

Source§

impl Color

Source

pub fn luminance(self) -> f32

Compute relative luminance using ITU-R BT.709 coefficients.

Returns a value in [0.0, 1.0] where 0 is darkest and 1 is brightest. Use this to determine whether text on a given background should be light or dark.

§Example
use slt::Color;

let dark = Color::Rgb(30, 30, 46);
assert!(dark.luminance() < 0.15);

let light = Color::Rgb(205, 214, 244);
assert!(light.luminance() > 0.6);
Source

pub fn contrast_fg(bg: Color) -> Color

Return a contrasting foreground color for the given background.

Uses the BT.709 luminance threshold (0.5) to decide between white and black text. For theme-aware contrast, prefer using this over hardcoding theme.bg as the foreground.

§Example
use slt::Color;

let bg = Color::Rgb(189, 147, 249); // Dracula purple
let fg = Color::contrast_fg(bg);
// Purple is mid-bright → returns black for readable text
Source

pub fn blend(self, other: Color, alpha: f32) -> Color

Blend this color over another with the given alpha.

alpha is in [0.0, 1.0] where 0.0 returns other unchanged and 1.0 returns self unchanged. Both colors are resolved to RGB.

§Example
use slt::Color;

let white = Color::Rgb(255, 255, 255);
let black = Color::Rgb(0, 0, 0);
let gray = white.blend(black, 0.5);
// ≈ Rgb(128, 128, 128)
Source

pub fn lighten(self, amount: f32) -> Color

Lighten this color by the given amount (0.0–1.0).

Blends toward white. amount = 0.0 returns the original color; amount = 1.0 returns white.

Source

pub fn darken(self, amount: f32) -> Color

Darken this color by the given amount (0.0–1.0).

Blends toward black. amount = 0.0 returns the original color; amount = 1.0 returns black.

Source

pub fn downsampled(self, depth: ColorDepth) -> Color

Downsample this color to fit the given color depth.

  • TrueColor: returns self unchanged.
  • EightBit: converts Rgb to the nearest Indexed color.
  • Basic: converts Rgb and Indexed to the nearest named color.

Named colors (Red, Green, etc.) and Reset pass through all depths.

Trait Implementations§

Source§

impl Clone for Color

Source§

fn clone(&self) -> Color

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Color

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Hash for Color

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for Color

Source§

fn eq(&self, other: &Color) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for Color

Source§

impl Eq for Color

Source§

impl StructuralPartialEq for Color

Auto Trait Implementations§

§

impl Freeze for Color

§

impl RefUnwindSafe for Color

§

impl Send for Color

§

impl Sync for Color

§

impl Unpin for Color

§

impl UnsafeUnpin for Color

§

impl UnwindSafe for Color

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.