veusz/style/
mod.rs

1use crate::api1::{cmd, AsVueszApi1ValueStr};
2use crate::CommandLineEmbeddingInterface;
3use std::io::Write;
4
5pub mod line;
6pub mod marker;
7pub mod plot;
8
9#[derive(Copy, Clone, PartialOrd, PartialEq)]
10pub enum ColorMap {
11    Blank,
12    Heat,
13    Spectrum2,
14    Spectrum2Step,
15    Spectrum,
16    Grey,
17    Blue,
18    Red,
19    Green,
20    BlueGreen,
21    TransBlack,
22    Royal,
23    Complement,
24    CoolWarm,
25    GreenMagenta,
26    BlueDarkred,
27    BlueDarkorange,
28    BrownBlue,
29    BlueOrange,
30    Seq,
31    HotDesaturated,
32    YellowGreen,
33    YellowGreenBlue,
34    YellowOrangeBrown,
35    YellowOrangeRed,
36    None,
37
38    // https://github.com/veusz/veusz/blob/5a1e2af5f24df0eb2a2842be51f2997c4999c7fb/veusz/utils/colormap.py#L878
39    CubeHelix,
40    BlueGreenStep,
41    ComplementStep,
42    GreyStep5,
43    GreyStep6,
44    RoyalStep,
45    SpectrumStep,
46    TransBlackStep5,
47    GreenMagentaStep16,
48    BlueDarkredStep12,
49    BlueDarkOrangeStep12,
50    BrownBlueStep12,
51    BlueOrangeStep12,
52    SeqStep25,
53}
54
55impl AsVueszApi1ValueStr for ColorMap {
56    fn as_veusz_api1_value_str(&self) -> &str {
57        match self {
58            ColorMap::Blank => "blank",
59            ColorMap::Heat => "heat",
60            ColorMap::Spectrum2 => "spectrum2",
61            ColorMap::Spectrum2Step => "spectrum2-step",
62            ColorMap::Spectrum => "spectrum",
63            ColorMap::Grey => "grey",
64            ColorMap::Blue => "blue",
65            ColorMap::Red => "red",
66            ColorMap::Green => "green",
67            ColorMap::BlueGreen => "bluegreen",
68            ColorMap::TransBlack => "transblack",
69            ColorMap::Royal => "royal",
70            ColorMap::Complement => "complement",
71            ColorMap::CoolWarm => "cool-warm",
72            ColorMap::GreenMagenta => "green-magenta",
73            ColorMap::BlueDarkred => "blue-darkred",
74            ColorMap::BlueDarkorange => "blue-darkorange",
75            ColorMap::BrownBlue => "brown-blue",
76            ColorMap::BlueOrange => "blue-orange",
77            ColorMap::Seq => "seq",
78            ColorMap::HotDesaturated => "hot_desaturated",
79            ColorMap::YellowGreen => "yellow-green",
80            ColorMap::YellowGreenBlue => "yellow-green-blue",
81            ColorMap::YellowOrangeBrown => "yellow-green-brown",
82            ColorMap::YellowOrangeRed => "yellow-orange-red",
83            ColorMap::None => "none",
84
85            ColorMap::CubeHelix => "cubehelix(0.5,-1.5,1,1)",
86            ColorMap::BlueGreenStep => "bluegreen-step",
87            ColorMap::ComplementStep => "complement-step",
88            ColorMap::GreyStep5 => "grey-step5",
89            ColorMap::GreyStep6 => "grey-step6",
90            ColorMap::RoyalStep => "royal-step",
91            ColorMap::SpectrumStep => "spectrum-step",
92            ColorMap::TransBlackStep5 => "transblack-step5",
93            ColorMap::GreenMagentaStep16 => "green-magenta-step16",
94            ColorMap::BlueDarkredStep12 => "blue-darkred-step12",
95            ColorMap::BlueDarkOrangeStep12 => "blue-darkorange-step12",
96            ColorMap::BrownBlueStep12 => "brown-blue-step12",
97            ColorMap::BlueOrangeStep12 => "blue-orange-step12",
98            ColorMap::SeqStep25 => "seq-step25",
99        }
100    }
101}
102
103/// https://github.com/veusz/veusz/blob/0227b68591accd1c46d25291ad6167e4d244eebb/veusz/document/colors.py#L131
104#[derive(Copy, Clone, PartialOrd, PartialEq)]
105pub enum ColorName {
106    Auto,
107    Foreground,
108    Transparent,
109    White,
110    Black,
111    Red,
112    Green,
113    Blue,
114    Cyan,
115    Magenta,
116    Yellow,
117    Grey,
118    Darkred,
119    Darkgreen,
120    Darkblue,
121    Darkcyan,
122    Darkmagenta,
123}
124
125impl AsVueszApi1ValueStr for ColorName {
126    fn as_veusz_api1_value_str(&self) -> &str {
127        match self {
128            ColorName::Auto => "auto",
129            ColorName::Foreground => "foreground",
130            ColorName::Transparent => "transparent",
131            ColorName::White => "white",
132            ColorName::Black => "black",
133            ColorName::Red => "red",
134            ColorName::Green => "green",
135            ColorName::Blue => "blue",
136            ColorName::Cyan => "cyan",
137            ColorName::Magenta => "magenta",
138            ColorName::Yellow => "yellow",
139            ColorName::Grey => "grey",
140            ColorName::Darkred => "darkred",
141            ColorName::Darkgreen => "darkgreen",
142            ColorName::Darkblue => "darkblue",
143            ColorName::Darkcyan => "darkcyan",
144            ColorName::Darkmagenta => "darkmagenta",
145        }
146    }
147}
148
149pub struct Color {
150    points: String,
151    min: Option<f32>,
152    max: Option<f32>,
153}
154
155impl Color {
156    pub fn points(points: impl Into<String>) -> Self {
157        Self {
158            points: points.into(),
159            min: None,
160            max: None,
161        }
162    }
163
164    pub fn set_min(&mut self, min: f32) {
165        self.min = Some(min);
166    }
167
168    pub fn with_min(mut self, min: f32) -> Self {
169        self.set_min(min);
170        self
171    }
172
173    pub fn set_max(&mut self, max: f32) {
174        self.max = Some(max);
175    }
176
177    pub fn with_max(mut self, max: f32) -> Self {
178        self.set_max(max);
179        self
180    }
181}
182
183impl CommandLineEmbeddingInterface for Color {
184    fn write<W: Write>(&self, writer: &mut W) -> std::io::Result<()> {
185        cmd::Set("Color/points", &self.points).write(writer)?;
186
187        if let Some(min) = &self.min {
188            cmd::SetRaw("Color/min", min).write(writer)?;
189        }
190
191        if let Some(max) = &self.max {
192            cmd::SetRaw("Color/max", max).write(writer)?;
193        }
194
195        Ok(())
196    }
197}