umya_spreadsheet/structs/drawing/
linear_gradient_fill.rs1use 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 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}