umya_spreadsheet/structs/drawing/spreadsheet/
picture.rs1use std::io::Cursor;
3
4use quick_xml::{
5 Reader,
6 Writer,
7 events::{
8 BytesStart,
9 Event,
10 },
11};
12
13use super::{
14 BlipFill,
15 NonVisualPictureProperties,
16 ShapeProperties,
17};
18use crate::{
19 reader::driver::xml_read_loop,
20 structs::raw::RawRelationships,
21 writer::driver::{
22 write_end_tag,
23 write_start_tag,
24 },
25};
26
27#[derive(Clone, Default, Debug)]
28pub struct Picture {
29 non_visual_picture_properties: NonVisualPictureProperties,
30 blip_fill: BlipFill,
31 shape_properties: ShapeProperties,
32}
33
34impl Picture {
35 #[inline]
36 #[must_use]
37 pub fn non_visual_picture_properties(&self) -> &NonVisualPictureProperties {
38 &self.non_visual_picture_properties
39 }
40
41 #[inline]
42 #[must_use]
43 #[deprecated(since = "3.0.0", note = "Use non_visual_picture_properties()")]
44 pub fn get_non_visual_picture_properties(&self) -> &NonVisualPictureProperties {
45 self.non_visual_picture_properties()
46 }
47
48 #[inline]
49 pub fn non_visual_picture_properties_mut(&mut self) -> &mut NonVisualPictureProperties {
50 &mut self.non_visual_picture_properties
51 }
52
53 #[inline]
54 #[deprecated(since = "3.0.0", note = "Use non_visual_picture_properties_mut()")]
55 pub fn get_non_visual_picture_properties_mut(&mut self) -> &mut NonVisualPictureProperties {
56 self.non_visual_picture_properties_mut()
57 }
58
59 #[inline]
60 pub fn set_non_visual_picture_properties(&mut self, value: NonVisualPictureProperties) {
61 self.non_visual_picture_properties = value;
62 }
63
64 #[inline]
65 #[must_use]
66 pub fn blip_fill(&self) -> &BlipFill {
67 &self.blip_fill
68 }
69
70 #[inline]
71 #[must_use]
72 #[deprecated(since = "3.0.0", note = "Use blip_fill()")]
73 pub fn get_blip_fill(&self) -> &BlipFill {
74 self.blip_fill()
75 }
76
77 #[inline]
78 pub fn blip_fill_mut(&mut self) -> &mut BlipFill {
79 &mut self.blip_fill
80 }
81
82 #[inline]
83 #[deprecated(since = "3.0.0", note = "Use blip_fill_mut()")]
84 pub fn get_blip_fill_mut(&mut self) -> &mut BlipFill {
85 self.blip_fill_mut()
86 }
87
88 #[inline]
89 pub fn set_blip_fill(&mut self, value: BlipFill) {
90 self.blip_fill = value;
91 }
92
93 #[inline]
94 #[must_use]
95 pub fn shape_properties(&self) -> &ShapeProperties {
96 &self.shape_properties
97 }
98
99 #[inline]
100 #[must_use]
101 #[deprecated(since = "3.0.0", note = "Use shape_properties()")]
102 pub fn get_shape_properties(&self) -> &ShapeProperties {
103 self.shape_properties()
104 }
105
106 #[inline]
107 pub fn shape_properties_mut(&mut self) -> &mut ShapeProperties {
108 &mut self.shape_properties
109 }
110
111 #[inline]
112 #[deprecated(since = "3.0.0", note = "Use shape_properties_mut()")]
113 pub fn get_shape_properties_mut(&mut self) -> &mut ShapeProperties {
114 self.shape_properties_mut()
115 }
116
117 #[inline]
118 pub fn set_shape_properties(&mut self, value: ShapeProperties) {
119 self.shape_properties = value;
120 }
121
122 pub(crate) fn set_attributes<R: std::io::BufRead>(
123 &mut self,
124 reader: &mut Reader<R>,
125 _e: &BytesStart,
126 drawing_relationships: Option<&RawRelationships>,
127 ) {
128 xml_read_loop!(
129 reader,
130 Event::Start(ref e) => {
131 match e.name().into_inner() {
132 b"xdr:nvPicPr" | b"nvPicPr" => {
133 self.non_visual_picture_properties.set_attributes(reader, e);
134 }
135 b"xdr:blipFill" | b"blipFill" => {
136 self.blip_fill
137 .set_attributes(reader, e, drawing_relationships);
138 }
139 b"xdr:spPr" | b"spPr" => {
140 self.shape_properties.set_attributes(reader, e, drawing_relationships);
141 }
142 _ => (),
143 }
144 },
145 Event::End(ref e) => {
146 if matches!(e.name().into_inner(), b"xdr:pic" | b"pic") {
147 return;
148 }
149 },
150 Event::Eof => panic!("Error: Could not find {} end element", "pic")
151 );
152 }
153
154 pub(crate) fn write_to(
155 &self,
156 writer: &mut Writer<Cursor<Vec<u8>>>,
157 rel_list: &mut Vec<(String, String)>,
158 ) {
159 write_start_tag(writer, "xdr:pic", vec![], false);
161
162 self.non_visual_picture_properties.write_to(writer);
164
165 self.blip_fill.write_to(writer, rel_list);
167
168 self.shape_properties.write_to(writer, rel_list);
170
171 write_end_tag(writer, "xdr:pic");
172 }
173}