pub trait IntoRgb {
fn into_rgb(self) -> Rgb;
}
impl<T: Into<u32>> IntoRgb for T {
fn into_rgb(self: T) -> Rgb {
Rgb::from_raw(self.into())
}
}
#[derive(Default, Debug, Clone, Copy, PartialEq, Eq)]
pub struct Rgb {
pub r: u8,
pub g: u8,
pub b: u8,
}
impl Rgb {
pub const ALICE_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_ALICE_BLUE);
pub const ANTIQUE_WHITE: Rgb = Rgb::from_raw(pros_sys::COLOR_ANTIQUE_WHITE);
pub const AQUA: Rgb = Rgb::from_raw(pros_sys::COLOR_AQUA);
pub const AQUAMARINE: Rgb = Rgb::from_raw(pros_sys::COLOR_AQUAMARINE);
pub const AZURE: Rgb = Rgb::from_raw(pros_sys::COLOR_AZURE);
pub const BEIGE: Rgb = Rgb::from_raw(pros_sys::COLOR_BEIGE);
pub const BISQUE: Rgb = Rgb::from_raw(pros_sys::COLOR_BISQUE);
pub const BLACK: Rgb = Rgb::from_raw(pros_sys::COLOR_BLACK);
pub const BLANCHED_ALMOND: Rgb = Rgb::from_raw(pros_sys::COLOR_BLANCHED_ALMOND);
pub const BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_BLUE);
pub const BLUE_VIOLET: Rgb = Rgb::from_raw(pros_sys::COLOR_BLUE_VIOLET);
pub const BROWN: Rgb = Rgb::from_raw(pros_sys::COLOR_BROWN);
pub const BURLY_WOOD: Rgb = Rgb::from_raw(pros_sys::COLOR_BURLY_WOOD);
pub const CADET_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_CADET_BLUE);
pub const CHARTREUSE: Rgb = Rgb::from_raw(pros_sys::COLOR_CHARTREUSE);
pub const CHOCOLATE: Rgb = Rgb::from_raw(pros_sys::COLOR_CHOCOLATE);
pub const CORAL: Rgb = Rgb::from_raw(pros_sys::COLOR_CORAL);
pub const CORNFLOWER_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_CORNFLOWER_BLUE);
pub const CORNSILK: Rgb = Rgb::from_raw(pros_sys::COLOR_CORNSILK);
pub const CRIMSON: Rgb = Rgb::from_raw(pros_sys::COLOR_CRIMSON);
pub const CYAN: Rgb = Rgb::from_raw(pros_sys::COLOR_CYAN);
pub const DARK_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_BLUE);
pub const DARK_CYAN: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_CYAN);
pub const DARK_GOLDENROD: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_GOLDENROD);
pub const DARK_GRAY: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_GRAY);
pub const DARK_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_GREEN);
pub const DARK_KHAKI: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_KHAKI);
pub const DARK_MAGENTA: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_MAGENTA);
pub const DARK_OLIVE_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_OLIVE_GREEN);
pub const DARK_ORANGE: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_ORANGE);
pub const DARK_ORCHID: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_ORCHID);
pub const DARK_RED: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_RED);
pub const DARK_SALMON: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_SALMON);
pub const DARK_SEA_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_SEA_GREEN);
pub const DARK_SLATE_GRAY: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_SLATE_GRAY);
pub const DARK_TURQUOISE: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_TURQUOISE);
pub const DARK_VIOLET: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_VIOLET);
pub const DEEP_PINK: Rgb = Rgb::from_raw(pros_sys::COLOR_DEEP_PINK);
pub const DEEP_SKY_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_DEEP_SKY_BLUE);
pub const DIM_GRAY: Rgb = Rgb::from_raw(pros_sys::COLOR_DIM_GRAY);
pub const DODGER_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_DODGER_BLUE);
pub const FIRE_BRICK: Rgb = Rgb::from_raw(pros_sys::COLOR_FIRE_BRICK);
pub const FLORAL_WHITE: Rgb = Rgb::from_raw(pros_sys::COLOR_FLORAL_WHITE);
pub const FOREST_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_FOREST_GREEN);
pub const FUCHSIA: Rgb = Rgb::from_raw(pros_sys::COLOR_FUCHSIA);
pub const GAINSBORO: Rgb = Rgb::from_raw(pros_sys::COLOR_GAINSBORO);
pub const GHOST_WHITE: Rgb = Rgb::from_raw(pros_sys::COLOR_GHOST_WHITE);
pub const GOLD: Rgb = Rgb::from_raw(pros_sys::COLOR_GOLD);
pub const GOLDENROD: Rgb = Rgb::from_raw(pros_sys::COLOR_GOLDENROD);
pub const GRAY: Rgb = Rgb::from_raw(pros_sys::COLOR_GRAY);
pub const GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_GREEN);
pub const GREEN_YELLOW: Rgb = Rgb::from_raw(pros_sys::COLOR_GREEN_YELLOW);
pub const HONEYDEW: Rgb = Rgb::from_raw(pros_sys::COLOR_HONEYDEW);
pub const HOT_PINK: Rgb = Rgb::from_raw(pros_sys::COLOR_HOT_PINK);
pub const INDIAN_RED: Rgb = Rgb::from_raw(pros_sys::COLOR_INDIAN_RED);
pub const INDIGO: Rgb = Rgb::from_raw(pros_sys::COLOR_INDIGO);
pub const IVORY: Rgb = Rgb::from_raw(pros_sys::COLOR_IVORY);
pub const KHAKI: Rgb = Rgb::from_raw(pros_sys::COLOR_KHAKI);
pub const LAVENDER: Rgb = Rgb::from_raw(pros_sys::COLOR_LAVENDER);
pub const LAVENDER_BLUSH: Rgb = Rgb::from_raw(pros_sys::COLOR_LAVENDER_BLUSH);
pub const LAWN_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_LAWN_GREEN);
pub const LEMON_CHIFFON: Rgb = Rgb::from_raw(pros_sys::COLOR_LEMON_CHIFFON);
pub const LIGHT_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_BLUE);
pub const LIGHT_CORAL: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_CORAL);
pub const LIGHT_CYAN: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_CYAN);
pub const LIGHT_GOLDENROD_YELLOW: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_GOLDENROD_YELLOW);
pub const LIGHT_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_GREEN);
pub const LIGHT_GRAY: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_GRAY);
pub const LIGHT_PINK: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_PINK);
pub const LIGHT_SALMON: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_SALMON);
pub const LIGHT_SEA_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_SEA_GREEN);
pub const LIGHT_SKY_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_SKY_BLUE);
pub const LIGHT_SLATE_GRAY: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_SLATE_GRAY);
pub const LIGHT_STEEL_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_STEEL_BLUE);
pub const LIGHT_YELLOW: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_YELLOW);
pub const LIME: Rgb = Rgb::from_raw(pros_sys::COLOR_LIME);
pub const LIME_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_LIME_GREEN);
pub const LINEN: Rgb = Rgb::from_raw(pros_sys::COLOR_LINEN);
pub const MAGENTA: Rgb = Rgb::from_raw(pros_sys::COLOR_MAGENTA);
pub const MAROON: Rgb = Rgb::from_raw(pros_sys::COLOR_MAROON);
pub const MEDIUM_AQUAMARINE: Rgb = Rgb::from_raw(pros_sys::COLOR_MEDIUM_AQUAMARINE);
pub const MEDIUM_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_MEDIUM_BLUE);
pub const MEDIUM_ORCHID: Rgb = Rgb::from_raw(pros_sys::COLOR_MEDIUM_ORCHID);
pub const MEDIUM_PURPLE: Rgb = Rgb::from_raw(pros_sys::COLOR_MEDIUM_PURPLE);
pub const MEDIUM_SEA_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_MEDIUM_SEA_GREEN);
pub const MEDIUM_SLATE_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_MEDIUM_SLATE_BLUE);
pub const MEDIUM_SPRING_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_MEDIUM_SPRING_GREEN);
pub const MEDIUM_TURQUOISE: Rgb = Rgb::from_raw(pros_sys::COLOR_MEDIUM_TURQUOISE);
pub const MEDIUM_VIOLET_RED: Rgb = Rgb::from_raw(pros_sys::COLOR_MEDIUM_VIOLET_RED);
pub const MIDNIGHT_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_MIDNIGHT_BLUE);
pub const MINT_CREAM: Rgb = Rgb::from_raw(pros_sys::COLOR_MINT_CREAM);
pub const MISTY_ROSE: Rgb = Rgb::from_raw(pros_sys::COLOR_MISTY_ROSE);
pub const MOCCASIN: Rgb = Rgb::from_raw(pros_sys::COLOR_MOCCASIN);
pub const NAVAJO_WHITE: Rgb = Rgb::from_raw(pros_sys::COLOR_NAVAJO_WHITE);
pub const NAVY: Rgb = Rgb::from_raw(pros_sys::COLOR_NAVY);
pub const OLD_LACE: Rgb = Rgb::from_raw(pros_sys::COLOR_OLD_LACE);
pub const OLIVE: Rgb = Rgb::from_raw(pros_sys::COLOR_OLIVE);
pub const OLIVE_DRAB: Rgb = Rgb::from_raw(pros_sys::COLOR_OLIVE_DRAB);
pub const ORANGE: Rgb = Rgb::from_raw(pros_sys::COLOR_ORANGE);
pub const ORANGE_RED: Rgb = Rgb::from_raw(pros_sys::COLOR_ORANGE_RED);
pub const ORCHID: Rgb = Rgb::from_raw(pros_sys::COLOR_ORCHID);
pub const PALE_GOLDENROD: Rgb = Rgb::from_raw(pros_sys::COLOR_PALE_GOLDENROD);
pub const PALE_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_PALE_GREEN);
pub const PALE_TURQUOISE: Rgb = Rgb::from_raw(pros_sys::COLOR_PALE_TURQUOISE);
pub const PALE_VIOLET_RED: Rgb = Rgb::from_raw(pros_sys::COLOR_PALE_VIOLET_RED);
pub const PAPAY_WHIP: Rgb = Rgb::from_raw(pros_sys::COLOR_PAPAY_WHIP);
pub const PEACH_PUFF: Rgb = Rgb::from_raw(pros_sys::COLOR_PEACH_PUFF);
pub const PERU: Rgb = Rgb::from_raw(pros_sys::COLOR_PERU);
pub const PINK: Rgb = Rgb::from_raw(pros_sys::COLOR_PINK);
pub const PLUM: Rgb = Rgb::from_raw(pros_sys::COLOR_PLUM);
pub const POWDER_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_POWDER_BLUE);
pub const PURPLE: Rgb = Rgb::from_raw(pros_sys::COLOR_PURPLE);
pub const RED: Rgb = Rgb::from_raw(pros_sys::COLOR_RED);
pub const ROSY_BROWN: Rgb = Rgb::from_raw(pros_sys::COLOR_ROSY_BROWN);
pub const ROYAL_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_ROYAL_BLUE);
pub const SADDLE_BROWN: Rgb = Rgb::from_raw(pros_sys::COLOR_SADDLE_BROWN);
pub const SALMON: Rgb = Rgb::from_raw(pros_sys::COLOR_SALMON);
pub const SANDY_BROWN: Rgb = Rgb::from_raw(pros_sys::COLOR_SANDY_BROWN);
pub const SEA_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_SEA_GREEN);
pub const SEASHELL: Rgb = Rgb::from_raw(pros_sys::COLOR_SEASHELL);
pub const SIENNA: Rgb = Rgb::from_raw(pros_sys::COLOR_SIENNA);
pub const SILVER: Rgb = Rgb::from_raw(pros_sys::COLOR_SILVER);
pub const SKY_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_SKY_BLUE);
pub const SLATE_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_SLATE_BLUE);
pub const SLATE_GRAY: Rgb = Rgb::from_raw(pros_sys::COLOR_SLATE_GRAY);
pub const SNOW: Rgb = Rgb::from_raw(pros_sys::COLOR_SNOW);
pub const SPRING_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_SPRING_GREEN);
pub const STEEL_BLUE: Rgb = Rgb::from_raw(pros_sys::COLOR_STEEL_BLUE);
pub const TAN: Rgb = Rgb::from_raw(pros_sys::COLOR_TAN);
pub const TEAL: Rgb = Rgb::from_raw(pros_sys::COLOR_TEAL);
pub const THISTLE: Rgb = Rgb::from_raw(pros_sys::COLOR_THISTLE);
pub const TOMATO: Rgb = Rgb::from_raw(pros_sys::COLOR_TOMATO);
pub const TURQUOISE: Rgb = Rgb::from_raw(pros_sys::COLOR_TURQUOISE);
pub const VIOLET: Rgb = Rgb::from_raw(pros_sys::COLOR_VIOLET);
pub const WHEAT: Rgb = Rgb::from_raw(pros_sys::COLOR_WHEAT);
pub const WHITE: Rgb = Rgb::from_raw(pros_sys::COLOR_WHITE);
pub const WHITE_SMOKE: Rgb = Rgb::from_raw(pros_sys::COLOR_WHITE_SMOKE);
pub const YELLOW: Rgb = Rgb::from_raw(pros_sys::COLOR_YELLOW);
pub const YELLOW_GREEN: Rgb = Rgb::from_raw(pros_sys::COLOR_YELLOW_GREEN);
pub const DARK_GREY: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_GREY);
pub const DARK_SLATE_GREY: Rgb = Rgb::from_raw(pros_sys::COLOR_DARK_SLATE_GREY);
pub const DIM_GREY: Rgb = Rgb::from_raw(pros_sys::COLOR_DIM_GREY);
pub const GREY: Rgb = Rgb::from_raw(pros_sys::COLOR_GREY);
pub const LIGHT_GREY: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_GREY);
pub const LIGHT_SLATE_GREY: Rgb = Rgb::from_raw(pros_sys::COLOR_LIGHT_SLATE_GREY);
pub const SLATE_GREY: Rgb = Rgb::from_raw(pros_sys::COLOR_SLATE_GREY);
const BITMASK: u32 = 0b11111111;
pub const fn new(red: u8, green: u8, blue: u8) -> Self {
Self {
r: red,
g: green,
b: blue,
}
}
pub const fn from_raw(raw: u32) -> Self {
Self {
r: ((raw >> 16) & Self::BITMASK) as _,
g: ((raw >> 8) & Self::BITMASK) as _,
b: (raw & Self::BITMASK) as _,
}
}
pub const fn red(&self) -> u8 {
self.r
}
pub const fn green(&self) -> u8 {
self.g
}
pub const fn blue(&self) -> u8 {
self.b
}
}
impl From<(u8, u8, u8)> for Rgb {
fn from(tuple: (u8, u8, u8)) -> Self {
Self {
r: tuple.0,
g: tuple.1,
b: tuple.2,
}
}
}
impl From<Rgb> for (u8, u8, u8) {
fn from(value: Rgb) -> (u8, u8, u8) {
(value.r, value.g, value.b)
}
}
impl From<Rgb> for u32 {
fn from(value: Rgb) -> u32 {
((value.r as u32) << 16) + ((value.g as u32) << 8) + value.b as u32
}
}
impl From<u32> for Rgb {
fn from(value: u32) -> Self {
Self::from_raw(value)
}
}