umya_spreadsheet/structs/drawing/
solid_fill.rs1use super::rgb_color_model_hex::RgbColorModelHex;
3use super::scheme_color::SchemeColor;
4use super::SystemColor;
5use crate::reader::driver::*;
6use crate::writer::driver::*;
7use quick_xml::events::{BytesStart, Event};
8use quick_xml::Reader;
9use quick_xml::Writer;
10use std::io::Cursor;
11
12#[derive(Clone, Default, Debug)]
13pub struct SolidFill {
14 scheme_color: Option<Box<SchemeColor>>,
15 rgb_color_model_hex: Option<Box<RgbColorModelHex>>,
16 system_color: Option<Box<SystemColor>>,
17}
18
19impl SolidFill {
20 #[inline]
21 pub fn get_scheme_color(&self) -> Option<&SchemeColor> {
22 self.scheme_color.as_deref()
23 }
24
25 #[inline]
26 pub fn get_scheme_color_mut(&mut self) -> Option<&mut SchemeColor> {
27 self.scheme_color.as_deref_mut()
28 }
29
30 #[inline]
31 pub fn set_scheme_color(&mut self, value: SchemeColor) {
32 self.scheme_color = Some(Box::new(value));
33 }
34
35 #[inline]
36 pub fn get_rgb_color_model_hex(&self) -> Option<&RgbColorModelHex> {
37 self.rgb_color_model_hex.as_deref()
38 }
39
40 #[inline]
41 pub fn get_rgb_color_model_hex_mut(&mut self) -> Option<&mut RgbColorModelHex> {
42 self.rgb_color_model_hex.as_deref_mut()
43 }
44
45 #[inline]
46 pub fn set_rgb_color_model_hex(&mut self, value: RgbColorModelHex) {
47 self.rgb_color_model_hex = Some(Box::new(value));
48 }
49
50 #[inline]
51 pub fn get_system_color(&self) -> Option<&SystemColor> {
52 self.system_color.as_deref()
53 }
54
55 #[inline]
56 pub fn get_system_color_mut(&mut self) -> Option<&mut SystemColor> {
57 self.system_color.as_deref_mut()
58 }
59
60 #[inline]
61 pub fn set_system_color(&mut self, value: SystemColor) {
62 self.system_color = Some(Box::new(value));
63 }
64
65 pub(crate) fn set_attributes<R: std::io::BufRead>(
66 &mut self,
67 reader: &mut Reader<R>,
68 _e: &BytesStart,
69 ) {
70 xml_read_loop!(
71 reader,
72 Event::Start(ref e) => {
73 match e.name().into_inner() {
74 b"a:schemeClr" => {
75 let mut scheme_color = SchemeColor::default();
76 scheme_color.set_attributes(reader, e, false);
77 self.set_scheme_color(scheme_color);
78 }
79 b"a:srgbClr" => {
80 let mut rgb_color_model_hex = RgbColorModelHex::default();
81 rgb_color_model_hex.set_attributes(reader, e, false);
82 self.set_rgb_color_model_hex(rgb_color_model_hex);
83 }
84 b"a:sysClr" => {
85 let mut obj = SystemColor::default();
86 obj.set_attributes(reader, e, false);
87 self.set_system_color(obj);
88 }
89 _ => (),
90 }
91 },
92 Event::Empty(ref e) => {
93 match e.name().into_inner() {
94 b"a:schemeClr" => {
95 let mut scheme_color = SchemeColor::default();
96 scheme_color.set_attributes(reader, e, true);
97 self.set_scheme_color(scheme_color);
98 }
99 b"a:srgbClr" => {
100 let mut rgb_color_model_hex = RgbColorModelHex::default();
101 rgb_color_model_hex.set_attributes(reader, e, true);
102 self.set_rgb_color_model_hex(rgb_color_model_hex);
103 }
104 b"a:sysClr" => {
105 let mut obj = SystemColor::default();
106 obj.set_attributes(reader, e, true);
107 self.set_system_color(obj);
108 }
109 _ => (),
110 }
111 },
112 Event::End(ref e) => {
113 if e.name().into_inner() == b"a:solidFill" {
114 return;
115 }
116 },
117 Event::Eof => panic!("Error: Could not find {} end element", "a:solidFill")
118 );
119 }
120
121 pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
122 write_start_tag(writer, "a:solidFill", vec![], false);
124 if let Some(color) = &self.scheme_color {
125 color.write_to(writer);
126 }
127
128 if let Some(hex) = &self.rgb_color_model_hex {
130 hex.write_to(writer);
131 }
132
133 if let Some(v) = &self.system_color {
135 v.write_to(writer);
136 }
137
138 write_end_tag(writer, "a:solidFill");
139 }
140}