umya_spreadsheet/structs/drawing/
scheme_color.rs1use super::super::EnumValue;
3use super::PercentageType;
4use super::PositiveFixedPercentageType;
5use super::SchemeColorValues;
6use crate::reader::driver::*;
7use crate::writer::driver::*;
8use quick_xml::events::{BytesStart, Event};
9use quick_xml::Reader;
10use quick_xml::Writer;
11use std::io::Cursor;
12
13#[derive(Clone, Default, Debug)]
14pub struct SchemeColor {
15 val: EnumValue<SchemeColorValues>,
16 luminance: Option<PercentageType>,
17 luminance_modulation: Option<PercentageType>,
18 luminance_offset: Option<PercentageType>,
19 saturation: Option<PercentageType>,
20 saturation_modulation: Option<PercentageType>,
21 shade: Option<PositiveFixedPercentageType>,
22 alpha: Option<PositiveFixedPercentageType>,
23 tint: Option<PositiveFixedPercentageType>,
24}
25
26impl SchemeColor {
27 #[inline]
28 pub fn get_val(&self) -> &SchemeColorValues {
29 self.val.get_value()
30 }
31
32 #[inline]
33 pub fn set_val(&mut self, value: SchemeColorValues) -> &mut Self {
34 self.val.set_value(value);
35 self
36 }
37
38 #[inline]
39 pub fn get_luminance(&self) -> Option<&PercentageType> {
40 self.luminance.as_ref()
41 }
42
43 #[inline]
44 pub fn get_luminance_mut(&mut self) -> Option<&mut PercentageType> {
45 self.luminance.as_mut()
46 }
47
48 #[inline]
49 pub fn set_luminance(&mut self, value: PercentageType) {
50 self.luminance = Some(value);
51 }
52
53 #[inline]
54 pub fn get_luminance_modulation(&self) -> Option<&PercentageType> {
55 self.luminance_modulation.as_ref()
56 }
57
58 #[inline]
59 pub fn get_luminance_modulation_mut(&mut self) -> Option<&mut PercentageType> {
60 self.luminance_modulation.as_mut()
61 }
62
63 #[inline]
64 pub fn set_luminance_modulation(&mut self, value: PercentageType) {
65 self.luminance_modulation = Some(value);
66 }
67
68 #[inline]
69 pub fn get_luminance_offset(&self) -> Option<&PercentageType> {
70 self.luminance_offset.as_ref()
71 }
72
73 #[inline]
74 pub fn get_luminance_offset_mut(&mut self) -> Option<&mut PercentageType> {
75 self.luminance_offset.as_mut()
76 }
77
78 #[inline]
79 pub fn set_luminance_offset(&mut self, value: PercentageType) {
80 self.luminance_offset = Some(value);
81 }
82
83 #[inline]
84 pub fn get_saturation(&self) -> Option<&PercentageType> {
85 self.saturation.as_ref()
86 }
87
88 #[inline]
89 pub fn get_saturation_mut(&mut self) -> Option<&mut PercentageType> {
90 self.saturation.as_mut()
91 }
92
93 #[inline]
94 pub fn set_saturation(&mut self, value: PercentageType) {
95 self.saturation = Some(value);
96 }
97
98 #[inline]
99 pub fn get_saturation_modulation(&self) -> Option<&PercentageType> {
100 self.saturation_modulation.as_ref()
101 }
102
103 #[inline]
104 pub fn get_saturation_modulation_mut(&mut self) -> Option<&mut PercentageType> {
105 self.saturation_modulation.as_mut()
106 }
107
108 #[inline]
109 pub fn set_saturation_modulation(&mut self, value: PercentageType) {
110 self.saturation_modulation = Some(value);
111 }
112
113 #[inline]
114 pub fn get_shade(&self) -> Option<&PositiveFixedPercentageType> {
115 self.shade.as_ref()
116 }
117
118 #[inline]
119 pub fn get_shade_mut(&mut self) -> Option<&mut PositiveFixedPercentageType> {
120 self.shade.as_mut()
121 }
122
123 #[inline]
124 pub fn set_shade(&mut self, value: PositiveFixedPercentageType) {
125 self.shade = Some(value);
126 }
127
128 #[inline]
129 pub fn get_alpha(&self) -> Option<&PositiveFixedPercentageType> {
130 self.alpha.as_ref()
131 }
132
133 #[inline]
134 pub fn get_alpha_mut(&mut self) -> Option<&mut PositiveFixedPercentageType> {
135 self.alpha.as_mut()
136 }
137
138 #[inline]
139 pub fn set_alpha(&mut self, value: PositiveFixedPercentageType) {
140 self.alpha = Some(value);
141 }
142
143 #[inline]
144 pub fn get_tint(&self) -> Option<&PositiveFixedPercentageType> {
145 self.tint.as_ref()
146 }
147
148 #[inline]
149 pub fn get_tint_mut(&mut self) -> Option<&mut PositiveFixedPercentageType> {
150 self.tint.as_mut()
151 }
152
153 #[inline]
154 pub fn set_tint(&mut self, value: PositiveFixedPercentageType) {
155 self.tint = Some(value);
156 }
157
158 #[inline]
159 pub(crate) fn with_inner_params(&self) -> bool {
160 self.luminance.is_some()
161 || self.luminance_modulation.is_some()
162 || self.luminance_offset.is_some()
163 || self.saturation.is_some()
164 || self.saturation_modulation.is_some()
165 || self.shade.is_some()
166 || self.alpha.is_some()
167 || self.tint.is_some()
168 }
169
170 pub(crate) fn set_attributes<R: std::io::BufRead>(
171 &mut self,
172 reader: &mut Reader<R>,
173 e: &BytesStart,
174 empty_flag: bool,
175 ) {
176 self.val.set_value_string(get_attribute(e, b"val").unwrap());
177
178 if empty_flag {
179 return;
180 }
181
182 xml_read_loop!(
183 reader,
184 Event::Empty(ref e) => {
185 match e.name().into_inner() {
186 b"a:lum" => {
187 let mut obj = PercentageType::default();
188 obj.set_attributes(reader, e, true);
189 self.luminance = Some(obj);
190 }
191 b"a:lumMod" => {
192 let mut obj = PercentageType::default();
193 obj.set_attributes(reader, e, true);
194 self.luminance_modulation = Some(obj);
195 }
196 b"a:lumOff" => {
197 let mut obj = PercentageType::default();
198 obj.set_attributes(reader, e, true);
199 self.luminance_offset = Some(obj);
200 }
201 b"a:sat" => {
202 let mut obj = PercentageType::default();
203 obj.set_attributes(reader, e, true);
204 self.saturation = Some(obj);
205 }
206 b"a:satMod" => {
207 let mut obj = PercentageType::default();
208 obj.set_attributes(reader, e, true);
209 self.saturation_modulation = Some(obj);
210 }
211 b"a:shade" => {
212 let mut obj = PositiveFixedPercentageType::default();
213 obj.set_attributes(reader, e, true);
214 self.shade = Some(obj);
215 }
216 b"a:alpha" => {
217 let mut obj = PositiveFixedPercentageType::default();
218 obj.set_attributes(reader, e, true);
219 self.alpha = Some(obj);
220 }
221 b"a:tint" => {
222 let mut obj = PositiveFixedPercentageType::default();
223 obj.set_attributes(reader, e, true);
224 self.tint = Some(obj);
225 }
226 _ => (),
227 }
228 },
229 Event::Start(ref e) => {
230 match e.name().into_inner() {
231 b"a:lum" => {
232 let mut obj = PercentageType::default();
233 obj.set_attributes(reader, e, false);
234 self.luminance = Some(obj);
235 }
236 b"a:lumMod" => {
237 let mut obj = PercentageType::default();
238 obj.set_attributes(reader, e, false);
239 self.luminance_modulation = Some(obj);
240 }
241 b"a:lumOff" => {
242 let mut obj = PercentageType::default();
243 obj.set_attributes(reader, e, false);
244 self.luminance_offset = Some(obj);
245 }
246 b"a:sat" => {
247 let mut obj = PercentageType::default();
248 obj.set_attributes(reader, e, false);
249 self.saturation = Some(obj);
250 }
251 b"a:satMod" => {
252 let mut obj = PercentageType::default();
253 obj.set_attributes(reader, e, false);
254 self.saturation_modulation = Some(obj);
255 }
256 b"a:shade" => {
257 let mut obj = PositiveFixedPercentageType::default();
258 obj.set_attributes(reader, e, false);
259 self.shade = Some(obj);
260 }
261 b"a:alpha" => {
262 let mut obj = PositiveFixedPercentageType::default();
263 obj.set_attributes(reader, e, false);
264 self.alpha = Some(obj);
265 }
266 b"a:tint" => {
267 let mut obj = PositiveFixedPercentageType::default();
268 obj.set_attributes(reader, e, false);
269 self.tint = Some(obj);
270 }
271 _ => (),
272 }
273 },
274 Event::End(ref e) => {
275 if e.name().into_inner() == b"a:schemeClr" {
276 return;
277 }
278 },
279 Event::Eof => panic!("Error: Could not find {} end element", "a:schemeClr")
280 );
281 }
282
283 pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
284 if self.with_inner_params() {
286 write_start_tag(
287 writer,
288 "a:schemeClr",
289 vec![("val", (self.val.get_value_string()))],
290 false,
291 );
292
293 if let Some(v) = &self.luminance {
295 v.write_to_lum(writer);
296 }
297
298 if let Some(v) = &self.luminance_modulation {
300 v.write_to_lum_mod(writer);
301 }
302
303 if let Some(v) = &self.luminance_offset {
305 v.write_to_lum_off(writer);
306 }
307
308 if let Some(v) = &self.saturation {
310 v.write_to_sat(writer);
311 }
312
313 if let Some(v) = &self.saturation_modulation {
315 v.write_to_sat_mod(writer);
316 }
317
318 if let Some(v) = &self.shade {
320 v.write_to_shade(writer);
321 }
322
323 if let Some(v) = &self.alpha {
325 v.write_to_alpha(writer);
326 }
327
328 if let Some(v) = &self.tint {
330 v.write_to_tint(writer);
331 }
332
333 write_end_tag(writer, "a:schemeClr");
334 } else {
335 write_start_tag(
336 writer,
337 "a:schemeClr",
338 vec![("val", (self.val.get_value_string()))],
339 true,
340 );
341 }
342 }
343}