use std::str::FromStr;
use crate::units::RGBColor;
#[derive(Clone, Debug, Default, PartialEq, Eq, Hash)]
pub enum Color {
Scheme(SchemeColor),
Preset(PresetColor),
RGB(RGBColor),
#[default]
None,
}
impl Color {
pub fn write_xml(&self, w: &mut super::writer::XmlWriter, tag: &str) {
match self {
Color::None => {} Color::Scheme(s) => {
w.open_with(tag, &[("val", s.as_str())]);
w.close(tag);
}
Color::Preset(p) => {
w.open_with(tag, &[("val", p.as_str())]);
w.close(tag);
}
Color::RGB(c) => {
w.open(tag);
w.empty_with(
"a:srgbClr",
&[("val", &format!("{:02X}{:02X}{:02X}", c.0, c.1, c.2))],
);
w.close(tag);
}
}
}
pub fn write_solid_fill(&self, w: &mut super::writer::XmlWriter) {
self.write_solid_fill_with_alpha(w, None);
}
pub fn write_solid_fill_with_alpha(
&self,
w: &mut super::writer::XmlWriter,
alpha: Option<i32>,
) {
match self {
Color::None => {
w.empty("a:noFill");
}
Color::RGB(c) => {
w.open("a:solidFill");
let val_s = format!("{:02X}{:02X}{:02X}", c.0, c.1, c.2);
if alpha.is_some() {
w.open_with("a:srgbClr", &[("val", val_s.as_str())]);
if let Some(a) = alpha {
w.empty_with("a:alpha", &[("val", a.to_string().as_str())]);
}
w.close("a:srgbClr");
} else {
w.empty_with("a:srgbClr", &[("val", val_s.as_str())]);
}
w.close("a:solidFill");
}
Color::Scheme(s) => {
w.open("a:solidFill");
if alpha.is_some() {
w.open_with("a:schemeClr", &[("val", s.as_str())]);
if let Some(a) = alpha {
w.empty_with("a:alpha", &[("val", a.to_string().as_str())]);
}
w.close("a:schemeClr");
} else {
w.empty_with("a:schemeClr", &[("val", s.as_str())]);
}
w.close("a:solidFill");
}
Color::Preset(p) => {
w.open("a:solidFill");
if alpha.is_some() {
w.open_with("a:prstClr", &[("val", p.as_str())]);
if let Some(a) = alpha {
w.empty_with("a:alpha", &[("val", a.to_string().as_str())]);
}
w.close("a:prstClr");
} else {
w.empty_with("a:prstClr", &[("val", p.as_str())]);
}
w.close("a:solidFill");
}
}
}
}
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
pub enum SchemeColor {
Background1,
Background2,
Text1,
Text2,
Accent1,
Accent2,
Accent3,
Accent4,
Accent5,
Accent6,
Hlink,
FolHlink,
Lt1,
Lt2,
Dk1,
Dk2,
}
impl SchemeColor {
pub fn as_str(self) -> &'static str {
match self {
SchemeColor::Background1 => "bg1",
SchemeColor::Background2 => "bg2",
SchemeColor::Text1 => "tx1",
SchemeColor::Text2 => "tx2",
SchemeColor::Accent1 => "accent1",
SchemeColor::Accent2 => "accent2",
SchemeColor::Accent3 => "accent3",
SchemeColor::Accent4 => "accent4",
SchemeColor::Accent5 => "accent5",
SchemeColor::Accent6 => "accent6",
SchemeColor::Hlink => "hlink",
SchemeColor::FolHlink => "folHlink",
SchemeColor::Lt1 => "lt1",
SchemeColor::Lt2 => "lt2",
SchemeColor::Dk1 => "dk1",
SchemeColor::Dk2 => "dk2",
}
}
}
impl FromStr for SchemeColor {
type Err = ();
fn from_str(s: &str) -> Result<Self, Self::Err> {
Ok(match s {
"bg1" => SchemeColor::Background1,
"bg2" => SchemeColor::Background2,
"tx1" => SchemeColor::Text1,
"tx2" => SchemeColor::Text2,
"accent1" => SchemeColor::Accent1,
"accent2" => SchemeColor::Accent2,
"accent3" => SchemeColor::Accent3,
"accent4" => SchemeColor::Accent4,
"accent5" => SchemeColor::Accent5,
"accent6" => SchemeColor::Accent6,
"hlink" => SchemeColor::Hlink,
"folHlink" => SchemeColor::FolHlink,
"lt1" => SchemeColor::Lt1,
"lt2" => SchemeColor::Lt2,
"dk1" => SchemeColor::Dk1,
"dk2" => SchemeColor::Dk2,
_ => return Err(()),
})
}
}
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
pub enum PresetColor {
AliceBlue,
AntiqueWhite,
Aqua,
Aquamarine,
Azure,
Beige,
Bisque,
Black,
BlanchedAlmond,
Blue,
BlueViolet,
Brown,
BurlyWood,
CadetBlue,
Chartreuse,
Chocolate,
Coral,
CornflowerBlue,
Cornsilk,
Crimson,
Cyan,
DarkBlue,
DarkCyan,
DarkGoldenrod,
DarkGray,
DarkGreen,
DarkGrey,
DarkKhaki,
DarkMagenta,
DarkOliveGreen,
DarkOrange,
DarkOrchid,
DarkRed,
DarkSalmon,
DarkSeaGreen,
DarkSlateBlue,
DarkSlateGray,
DarkSlateGrey,
DarkTurquoise,
DarkViolet,
DeepPink,
DeepSkyBlue,
DimGray,
DimGrey,
DodgerBlue,
Firebrick,
FloralWhite,
ForestGreen,
Fuchsia,
Gainsboro,
GhostWhite,
Gold,
Goldenrod,
Gray,
Green,
GreenYellow,
Grey,
Honeydew,
HotPink,
IndianRed,
Indigo,
Ivory,
Khaki,
Lavender,
LavenderBlush,
LawnGreen,
LemonChiffon,
LightBlue,
LightCoral,
LightCyan,
LightGoldenrodYellow,
LightGray,
LightGreen,
LightGrey,
LightPink,
LightSalmon,
LightSeaGreen,
LightSkyBlue,
LightSlateGray,
LightSlateGrey,
LightSteelBlue,
LightYellow,
Lime,
LimeGreen,
Linen,
Magenta,
Maroon,
MediumAquamarine,
MediumBlue,
MediumOrchid,
MediumPurple,
MediumSeaGreen,
MediumSlateBlue,
MediumSpringGreen,
MediumTurquoise,
MediumVioletRed,
MidnightBlue,
MintCream,
MistyRose,
Moccasin,
NavajoWhite,
Navy,
OldLace,
Olive,
OliveDrab,
Orange,
OrangeRed,
Orchid,
PaleGoldenrod,
PaleGreen,
PaleTurquoise,
PaleVioletRed,
PapayaWhip,
PeachPuff,
Peru,
Pink,
Plum,
PowderBlue,
Purple,
Red,
RosyBrown,
RoyalBlue,
SaddleBrown,
Salmon,
SandyBrown,
SeaGreen,
SeaShell,
Sienna,
Silver,
SkyBlue,
SlateBlue,
SlateGray,
SlateGrey,
Snow,
SpringGreen,
SteelBlue,
Tan,
Teal,
Thistle,
Tomato,
Turquoise,
Violet,
Wheat,
White,
WhiteSmoke,
Yellow,
YellowGreen,
}
impl PresetColor {
pub fn as_str(self) -> &'static str {
match self {
PresetColor::AliceBlue => "aliceBlue",
PresetColor::AntiqueWhite => "antiqueWhite",
PresetColor::Aqua => "aqua",
PresetColor::Aquamarine => "aquamarine",
PresetColor::Azure => "azure",
PresetColor::Beige => "beige",
PresetColor::Bisque => "bisque",
PresetColor::Black => "black",
PresetColor::BlanchedAlmond => "blanchedAlmond",
PresetColor::Blue => "blue",
PresetColor::BlueViolet => "blueViolet",
PresetColor::Brown => "brown",
PresetColor::BurlyWood => "burlyWood",
PresetColor::CadetBlue => "cadetBlue",
PresetColor::Chartreuse => "chartreuse",
PresetColor::Chocolate => "chocolate",
PresetColor::Coral => "coral",
PresetColor::CornflowerBlue => "cornflowerBlue",
PresetColor::Cornsilk => "cornsilk",
PresetColor::Crimson => "crimson",
PresetColor::Cyan => "cyan",
PresetColor::DarkBlue => "darkBlue",
PresetColor::DarkCyan => "darkCyan",
PresetColor::DarkGoldenrod => "darkGoldenrod",
PresetColor::DarkGray => "darkGray",
PresetColor::DarkGreen => "darkGreen",
PresetColor::DarkGrey => "darkGrey",
PresetColor::DarkKhaki => "darkKhaki",
PresetColor::DarkMagenta => "darkMagenta",
PresetColor::DarkOliveGreen => "darkOliveGreen",
PresetColor::DarkOrange => "darkOrange",
PresetColor::DarkOrchid => "darkOrchid",
PresetColor::DarkRed => "darkRed",
PresetColor::DarkSalmon => "darkSalmon",
PresetColor::DarkSeaGreen => "darkSeaGreen",
PresetColor::DarkSlateBlue => "darkSlateBlue",
PresetColor::DarkSlateGray => "darkSlateGray",
PresetColor::DarkSlateGrey => "darkSlateGrey",
PresetColor::DarkTurquoise => "darkTurquoise",
PresetColor::DarkViolet => "darkViolet",
PresetColor::DeepPink => "deepPink",
PresetColor::DeepSkyBlue => "deepSkyBlue",
PresetColor::DimGray => "dimGray",
PresetColor::DimGrey => "dimGrey",
PresetColor::DodgerBlue => "dodgerBlue",
PresetColor::Firebrick => "firebrick",
PresetColor::FloralWhite => "floralWhite",
PresetColor::ForestGreen => "forestGreen",
PresetColor::Fuchsia => "fuchsia",
PresetColor::Gainsboro => "gainsboro",
PresetColor::GhostWhite => "ghostWhite",
PresetColor::Gold => "gold",
PresetColor::Goldenrod => "goldenrod",
PresetColor::Gray => "gray",
PresetColor::Green => "green",
PresetColor::GreenYellow => "greenYellow",
PresetColor::Grey => "grey",
PresetColor::Honeydew => "honeydew",
PresetColor::HotPink => "hotPink",
PresetColor::IndianRed => "indianRed",
PresetColor::Indigo => "indigo",
PresetColor::Ivory => "ivory",
PresetColor::Khaki => "khaki",
PresetColor::Lavender => "lavender",
PresetColor::LavenderBlush => "lavenderBlush",
PresetColor::LawnGreen => "lawnGreen",
PresetColor::LemonChiffon => "lemonChiffon",
PresetColor::LightBlue => "lightBlue",
PresetColor::LightCoral => "lightCoral",
PresetColor::LightCyan => "lightCyan",
PresetColor::LightGoldenrodYellow => "lightGoldenrodYellow",
PresetColor::LightGray => "lightGray",
PresetColor::LightGreen => "lightGreen",
PresetColor::LightGrey => "lightGrey",
PresetColor::LightPink => "lightPink",
PresetColor::LightSalmon => "lightSalmon",
PresetColor::LightSeaGreen => "lightSeaGreen",
PresetColor::LightSkyBlue => "lightSkyBlue",
PresetColor::LightSlateGray => "lightSlateGray",
PresetColor::LightSlateGrey => "lightSlateGrey",
PresetColor::LightSteelBlue => "lightSteelBlue",
PresetColor::LightYellow => "lightYellow",
PresetColor::Lime => "lime",
PresetColor::LimeGreen => "limeGreen",
PresetColor::Linen => "linen",
PresetColor::Magenta => "magenta",
PresetColor::Maroon => "maroon",
PresetColor::MediumAquamarine => "mediumAquamarine",
PresetColor::MediumBlue => "mediumBlue",
PresetColor::MediumOrchid => "mediumOrchid",
PresetColor::MediumPurple => "mediumPurple",
PresetColor::MediumSeaGreen => "mediumSeaGreen",
PresetColor::MediumSlateBlue => "mediumSlateBlue",
PresetColor::MediumSpringGreen => "mediumSpringGreen",
PresetColor::MediumTurquoise => "mediumTurquoise",
PresetColor::MediumVioletRed => "mediumVioletRed",
PresetColor::MidnightBlue => "midnightBlue",
PresetColor::MintCream => "mintCream",
PresetColor::MistyRose => "mistyRose",
PresetColor::Moccasin => "moccasin",
PresetColor::NavajoWhite => "navajoWhite",
PresetColor::Navy => "navy",
PresetColor::OldLace => "oldLace",
PresetColor::Olive => "olive",
PresetColor::OliveDrab => "oliveDrab",
PresetColor::Orange => "orange",
PresetColor::OrangeRed => "orangeRed",
PresetColor::Orchid => "orchid",
PresetColor::PaleGoldenrod => "paleGoldenrod",
PresetColor::PaleGreen => "paleGreen",
PresetColor::PaleTurquoise => "paleTurquoise",
PresetColor::PaleVioletRed => "paleVioletRed",
PresetColor::PapayaWhip => "papayaWhip",
PresetColor::PeachPuff => "peachPuff",
PresetColor::Peru => "peru",
PresetColor::Pink => "pink",
PresetColor::Plum => "plum",
PresetColor::PowderBlue => "powderBlue",
PresetColor::Purple => "purple",
PresetColor::Red => "red",
PresetColor::RosyBrown => "rosyBrown",
PresetColor::RoyalBlue => "royalBlue",
PresetColor::SaddleBrown => "saddleBrown",
PresetColor::Salmon => "salmon",
PresetColor::SandyBrown => "sandyBrown",
PresetColor::SeaGreen => "seaGreen",
PresetColor::SeaShell => "seaShell",
PresetColor::Sienna => "sienna",
PresetColor::Silver => "silver",
PresetColor::SkyBlue => "skyBlue",
PresetColor::SlateBlue => "slateBlue",
PresetColor::SlateGray => "slateGray",
PresetColor::SlateGrey => "slateGrey",
PresetColor::Snow => "snow",
PresetColor::SpringGreen => "springGreen",
PresetColor::SteelBlue => "steelBlue",
PresetColor::Tan => "tan",
PresetColor::Teal => "teal",
PresetColor::Thistle => "thistle",
PresetColor::Tomato => "tomato",
PresetColor::Turquoise => "turquoise",
PresetColor::Violet => "violet",
PresetColor::Wheat => "wheat",
PresetColor::White => "white",
PresetColor::WhiteSmoke => "whiteSmoke",
PresetColor::Yellow => "yellow",
PresetColor::YellowGreen => "yellowGreen",
}
}
}
impl FromStr for PresetColor {
type Err = ();
fn from_str(s: &str) -> Result<Self, Self::Err> {
let all = [
("aliceBlue", PresetColor::AliceBlue),
("antiqueWhite", PresetColor::AntiqueWhite),
("aqua", PresetColor::Aqua),
("aquamarine", PresetColor::Aquamarine),
("azure", PresetColor::Azure),
("beige", PresetColor::Beige),
("bisque", PresetColor::Bisque),
("black", PresetColor::Black),
("blanchedAlmond", PresetColor::BlanchedAlmond),
("blue", PresetColor::Blue),
("blueViolet", PresetColor::BlueViolet),
("brown", PresetColor::Brown),
("burlyWood", PresetColor::BurlyWood),
("cadetBlue", PresetColor::CadetBlue),
("chartreuse", PresetColor::Chartreuse),
("chocolate", PresetColor::Chocolate),
("coral", PresetColor::Coral),
("cornflowerBlue", PresetColor::CornflowerBlue),
("cornsilk", PresetColor::Cornsilk),
("crimson", PresetColor::Crimson),
("cyan", PresetColor::Cyan),
("darkBlue", PresetColor::DarkBlue),
("darkCyan", PresetColor::DarkCyan),
("darkGoldenrod", PresetColor::DarkGoldenrod),
("darkGray", PresetColor::DarkGray),
("darkGreen", PresetColor::DarkGreen),
("darkGrey", PresetColor::DarkGrey),
("darkKhaki", PresetColor::DarkKhaki),
("darkMagenta", PresetColor::DarkMagenta),
("darkOliveGreen", PresetColor::DarkOliveGreen),
("darkOrange", PresetColor::DarkOrange),
("darkOrchid", PresetColor::DarkOrchid),
("darkRed", PresetColor::DarkRed),
("darkSalmon", PresetColor::DarkSalmon),
("darkSeaGreen", PresetColor::DarkSeaGreen),
("darkSlateBlue", PresetColor::DarkSlateBlue),
("darkSlateGray", PresetColor::DarkSlateGray),
("darkSlateGrey", PresetColor::DarkSlateGrey),
("darkTurquoise", PresetColor::DarkTurquoise),
("darkViolet", PresetColor::DarkViolet),
("deepPink", PresetColor::DeepPink),
("deepSkyBlue", PresetColor::DeepSkyBlue),
("dimGray", PresetColor::DimGray),
("dimGrey", PresetColor::DimGrey),
("dodgerBlue", PresetColor::DodgerBlue),
("firebrick", PresetColor::Firebrick),
("floralWhite", PresetColor::FloralWhite),
("forestGreen", PresetColor::ForestGreen),
("fuchsia", PresetColor::Fuchsia),
("gainsboro", PresetColor::Gainsboro),
("ghostWhite", PresetColor::GhostWhite),
("gold", PresetColor::Gold),
("goldenrod", PresetColor::Goldenrod),
("gray", PresetColor::Gray),
("green", PresetColor::Green),
("greenYellow", PresetColor::GreenYellow),
("grey", PresetColor::Grey),
("honeydew", PresetColor::Honeydew),
("hotPink", PresetColor::HotPink),
("indianRed", PresetColor::IndianRed),
("indigo", PresetColor::Indigo),
("ivory", PresetColor::Ivory),
("khaki", PresetColor::Khaki),
("lavender", PresetColor::Lavender),
("lavenderBlush", PresetColor::LavenderBlush),
("lawnGreen", PresetColor::LawnGreen),
("lemonChiffon", PresetColor::LemonChiffon),
("lightBlue", PresetColor::LightBlue),
("lightCoral", PresetColor::LightCoral),
("lightCyan", PresetColor::LightCyan),
("lightGoldenrodYellow", PresetColor::LightGoldenrodYellow),
("lightGray", PresetColor::LightGray),
("lightGreen", PresetColor::LightGreen),
("lightGrey", PresetColor::LightGrey),
("lightPink", PresetColor::LightPink),
("lightSalmon", PresetColor::LightSalmon),
("lightSeaGreen", PresetColor::LightSeaGreen),
("lightSkyBlue", PresetColor::LightSkyBlue),
("lightSlateGray", PresetColor::LightSlateGray),
("lightSlateGrey", PresetColor::LightSlateGrey),
("lightSteelBlue", PresetColor::LightSteelBlue),
("lightYellow", PresetColor::LightYellow),
("lime", PresetColor::Lime),
("limeGreen", PresetColor::LimeGreen),
("linen", PresetColor::Linen),
("magenta", PresetColor::Magenta),
("maroon", PresetColor::Maroon),
("mediumAquamarine", PresetColor::MediumAquamarine),
("mediumBlue", PresetColor::MediumBlue),
("mediumOrchid", PresetColor::MediumOrchid),
("mediumPurple", PresetColor::MediumPurple),
("mediumSeaGreen", PresetColor::MediumSeaGreen),
("mediumSlateBlue", PresetColor::MediumSlateBlue),
("mediumSpringGreen", PresetColor::MediumSpringGreen),
("mediumTurquoise", PresetColor::MediumTurquoise),
("mediumVioletRed", PresetColor::MediumVioletRed),
("midnightBlue", PresetColor::MidnightBlue),
("mintCream", PresetColor::MintCream),
("mistyRose", PresetColor::MistyRose),
("moccasin", PresetColor::Moccasin),
("navajoWhite", PresetColor::NavajoWhite),
("navy", PresetColor::Navy),
("oldLace", PresetColor::OldLace),
("olive", PresetColor::Olive),
("oliveDrab", PresetColor::OliveDrab),
("orange", PresetColor::Orange),
("orangeRed", PresetColor::OrangeRed),
("orchid", PresetColor::Orchid),
("paleGoldenrod", PresetColor::PaleGoldenrod),
("paleGreen", PresetColor::PaleGreen),
("paleTurquoise", PresetColor::PaleTurquoise),
("paleVioletRed", PresetColor::PaleVioletRed),
("papayaWhip", PresetColor::PapayaWhip),
("peachPuff", PresetColor::PeachPuff),
("peru", PresetColor::Peru),
("pink", PresetColor::Pink),
("plum", PresetColor::Plum),
("powderBlue", PresetColor::PowderBlue),
("purple", PresetColor::Purple),
("red", PresetColor::Red),
("rosyBrown", PresetColor::RosyBrown),
("royalBlue", PresetColor::RoyalBlue),
("saddleBrown", PresetColor::SaddleBrown),
("salmon", PresetColor::Salmon),
("sandyBrown", PresetColor::SandyBrown),
("seaGreen", PresetColor::SeaGreen),
("seaShell", PresetColor::SeaShell),
("sienna", PresetColor::Sienna),
("silver", PresetColor::Silver),
("skyBlue", PresetColor::SkyBlue),
("slateBlue", PresetColor::SlateBlue),
("slateGray", PresetColor::SlateGray),
("slateGrey", PresetColor::SlateGrey),
("snow", PresetColor::Snow),
("springGreen", PresetColor::SpringGreen),
("steelBlue", PresetColor::SteelBlue),
("tan", PresetColor::Tan),
("teal", PresetColor::Teal),
("thistle", PresetColor::Thistle),
("tomato", PresetColor::Tomato),
("turquoise", PresetColor::Turquoise),
("violet", PresetColor::Violet),
("wheat", PresetColor::Wheat),
("white", PresetColor::White),
("whiteSmoke", PresetColor::WhiteSmoke),
("yellow", PresetColor::Yellow),
("yellowGreen", PresetColor::YellowGreen),
];
for (k, v) in &all {
if *k == s {
return Ok(*v);
}
}
Err(())
}
}
#[derive(Debug)]
pub struct ColorFormat<'a> {
color: &'a mut Color,
role: ColorRole,
}
#[derive(Copy, Clone, Debug, Eq, PartialEq, Default)]
pub enum ColorRole {
#[default]
Foreground,
Background,
Theme,
Unknown,
}
impl<'a> ColorFormat<'a> {
pub fn new(color: &'a mut Color) -> Self {
ColorFormat {
color,
role: ColorRole::Foreground,
}
}
pub fn with_role(color: &'a mut Color, role: ColorRole) -> Self {
ColorFormat { color, role }
}
pub fn role(&self) -> ColorRole {
self.role
}
pub fn color_type(&self) -> super::simpletypes::MsoColorType {
match self.color {
Color::None => super::simpletypes::MsoColorType::Mixed,
Color::Scheme(_) => super::simpletypes::MsoColorType::SchemeColor,
Color::Preset(_) => super::simpletypes::MsoColorType::PresetColor,
Color::RGB(_) => super::simpletypes::MsoColorType::Rgb,
}
}
pub fn is_set(&self) -> bool {
!matches!(self.color, Color::None)
}
pub fn color(&self) -> Color {
self.color.clone()
}
pub fn rgb(&self) -> Option<RGBColor> {
match &*self.color {
Color::RGB(c) => Some(*c),
_ => None,
}
}
pub fn theme_color(&self) -> Option<super::simpletypes::MsoThemeColorIndex> {
match &*self.color {
Color::Scheme(s) => Some(super::simpletypes::MsoThemeColorIndex::from_scheme(*s)),
_ => None,
}
}
pub fn brightness(&self) -> f32 {
match &*self.color {
Color::RGB(c) => {
let y = 0.299 * c.0 as f32 + 0.587 * c.1 as f32 + 0.114 * c.2 as f32;
y / 255.0
}
Color::Scheme(s) => match s {
SchemeColor::Background1 | SchemeColor::Text1 | SchemeColor::Lt1 => 1.0,
SchemeColor::Background2 | SchemeColor::Text2 | SchemeColor::Lt2 => 0.9,
SchemeColor::Dk1 | SchemeColor::Dk2 => 0.1,
_ => 0.5,
},
Color::Preset(p) => preset_brightness(*p),
Color::None => 0.0,
}
}
pub fn set(&mut self, c: impl Into<Color>) {
*self.color = c.into();
}
pub fn set_rgb(&mut self, c: impl Into<RGBColor>) {
*self.color = Color::RGB(c.into());
}
pub fn set_preset(&mut self, p: PresetColor) {
*self.color = Color::Preset(p);
}
pub fn set_theme(&mut self, t: super::simpletypes::MsoThemeColorIndex) {
if let Some(s) = t.as_str() {
if let Ok(sc) = s.parse::<SchemeColor>() {
*self.color = Color::Scheme(sc);
}
}
}
pub fn clear(&mut self) {
*self.color = Color::None;
}
}
fn preset_brightness(p: PresetColor) -> f32 {
use PresetColor::*;
match p {
White | WhiteSmoke | Snow | GhostWhite | Azure | Ivory | MintCream | Honeydew
| FloralWhite | AliceBlue | Lavender | LavenderBlush | MistyRose | SeaShell | Linen
| OldLace | Cornsilk | LemonChiffon | LightYellow | Beige | PapayaWhip | BlanchedAlmond
| Bisque | PeachPuff | NavajoWhite | Wheat | LightGoldenrodYellow | AntiqueWhite
| Gainsboro | LightGray | LightGrey | PowderBlue | LightCyan | LightBlue | LightPink
| LightCoral | LightSalmon | LightSkyBlue | LightSteelBlue | LightSeaGreen
| PaleGoldenrod | PaleGreen | PaleTurquoise | PaleVioletRed => 0.9,
Black | MidnightBlue | Navy | DarkBlue | DarkRed | DarkGreen | DarkMagenta | DarkViolet
| Indigo | DarkSlateBlue | DarkSlateGray | DarkSlateGrey | DarkCyan | DarkOliveGreen
| DarkKhaki | Maroon | Purple | DarkGoldenrod | DarkOrchid | Firebrick | SaddleBrown
| Sienna | Brown => 0.1,
_ => 0.5,
}
}
impl<'a> From<&'a mut Color> for ColorFormat<'a> {
fn from(c: &'a mut Color) -> Self {
ColorFormat::new(c)
}
}