Skip to main content

umya_spreadsheet/structs/drawing/
linear_gradient_fill.rs

1// a:lin
2use std::io::Cursor;
3
4use quick_xml::{
5    Reader,
6    Writer,
7    events::{
8        BytesStart,
9        Event,
10    },
11};
12
13use super::super::super::{
14    BooleanValue,
15    Int32Value,
16};
17use crate::{
18    reader::driver::{
19        get_attribute,
20        set_string_from_xml,
21        xml_read_loop,
22    },
23    writer::driver::write_start_tag,
24};
25
26#[derive(Clone, Default, Debug)]
27pub struct LinearGradientFill {
28    angle:  Int32Value,
29    scaled: BooleanValue,
30}
31
32impl LinearGradientFill {
33    #[inline]
34    #[must_use]
35    pub fn angle(&self) -> i32 {
36        self.angle.value()
37    }
38
39    #[inline]
40    #[must_use]
41    #[deprecated(since = "3.0.0", note = "Use angle()")]
42    pub fn get_angle(&self) -> i32 {
43        self.angle()
44    }
45
46    #[inline]
47    pub fn set_angle(&mut self, value: i32) -> &mut LinearGradientFill {
48        self.angle.set_value(value);
49        self
50    }
51
52    #[inline]
53    #[must_use]
54    pub fn scaled(&self) -> bool {
55        self.scaled.value()
56    }
57
58    #[inline]
59    #[must_use]
60    #[deprecated(since = "3.0.0", note = "Use scaled()")]
61    pub fn get_scaled(&self) -> bool {
62        self.scaled()
63    }
64
65    #[inline]
66    pub fn set_scaled(&mut self, value: bool) -> &mut LinearGradientFill {
67        self.scaled.set_value(value);
68        self
69    }
70
71    #[inline]
72    pub(crate) fn set_attributes<R: std::io::BufRead>(
73        &mut self,
74        reader: &mut Reader<R>,
75        e: &BytesStart,
76        empty_flag: bool,
77    ) {
78        set_string_from_xml!(self, e, angle, "ang");
79        set_string_from_xml!(self, e, scaled, "scaled");
80
81        if empty_flag {
82            return;
83        }
84
85        xml_read_loop!(
86            reader,
87            Event::End(ref e) => {
88                if e.name().into_inner() == b"a:lin" {
89                    return;
90                }
91            },
92            Event::Eof => panic!("Error: Could not find {} end element", "a:lin")
93        );
94    }
95
96    pub(crate) fn write_to(&self, writer: &mut Writer<Cursor<Vec<u8>>>) {
97        // a:lin
98        let mut attributes: crate::structs::AttrCollection = Vec::new();
99        let ang = self.angle.value_string();
100        if self.angle.has_value() {
101            attributes.push(("ang", &ang).into());
102        }
103        if self.scaled.has_value() {
104            attributes.push(("scaled", self.scaled.value_string()).into());
105        }
106        write_start_tag(writer, "a:lin", attributes, true);
107    }
108}