Skip to main content

umya_spreadsheet/structs/drawing/
glow.rs

1// a:glow
2use std::io::Cursor;
3
4use quick_xml::{
5    Reader,
6    Writer,
7    events::{
8        BytesStart,
9        Event,
10    },
11};
12
13use super::{
14    super::super::Int64Value,
15    SchemeColor,
16};
17use crate::{
18    reader::driver::{
19        get_attribute,
20        xml_read_loop,
21    },
22    writer::driver::{
23        write_end_tag,
24        write_start_tag,
25    },
26};
27
28#[derive(Clone, Default, Debug)]
29pub struct Glow {
30    radius:       Int64Value,
31    scheme_color: Option<Box<SchemeColor>>,
32}
33
34impl Glow {
35    #[inline]
36    #[must_use]
37    pub fn radius(&self) -> i64 {
38        self.radius.value()
39    }
40
41    #[inline]
42    #[must_use]
43    #[deprecated(since = "3.0.0", note = "Use radius()")]
44    pub fn get_radius(&self) -> i64 {
45        self.radius()
46    }
47
48    #[inline]
49    pub fn set_radius(&mut self, value: i64) -> &mut Glow {
50        self.radius.set_value(value);
51        self
52    }
53
54    #[inline]
55    #[must_use]
56    pub fn scheme_color(&self) -> Option<&SchemeColor> {
57        self.scheme_color.as_deref()
58    }
59
60    #[inline]
61    #[must_use]
62    #[deprecated(since = "3.0.0", note = "Use scheme_color()")]
63    pub fn get_scheme_color(&self) -> Option<&SchemeColor> {
64        self.scheme_color()
65    }
66
67    #[inline]
68    pub fn set_scheme_color(&mut self, value: SchemeColor) {
69        self.scheme_color = Some(Box::new(value));
70    }
71
72    pub(crate) fn set_attributes<R: std::io::BufRead>(
73        &mut self,
74        reader: &mut Reader<R>,
75        e: &BytesStart,
76    ) {
77        self.radius
78            .set_value_string(get_attribute(e, b"rad").unwrap());
79
80        xml_read_loop!(
81            reader,
82            Event::Start(ref e) => {
83                if e.name().into_inner() == b"a:schemeClr" {
84                    let mut obj = SchemeColor::default();
85                    obj.set_attributes(reader, e, false);
86                    self.set_scheme_color(obj);
87                }
88            },
89            Event::End(ref e) => {
90                if e.name().into_inner() == b"a:glow" {
91                    return;
92                }
93            },
94            Event::Eof => panic!("Error: Could not find {} end element", "a:glow")
95        );
96    }
97
98    pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
99        // a:glow
100        write_start_tag(
101            writer,
102            "a:glow",
103            vec![("rad", &self.radius.value_string()).into()],
104            false,
105        );
106
107        // a:schemeClr
108        if let Some(v) = &self.scheme_color {
109            v.write_to(writer);
110        }
111
112        write_end_tag(writer, "a:glow");
113    }
114}