/ src / ui / image_format.rs
image_format.rs
 1  #[derive(serde::Serialize, serde::Deserialize)]
 2  #[serde(default)]
 3  pub struct ImageFormatSelector {
 4      image_format: image::ImageFormat,
 5  }
 6  
 7  impl Default for ImageFormatSelector {
 8      fn default() -> Self {
 9          Self {
10              image_format: image::ImageFormat::Png,
11          }
12      }
13  }
14  
15  impl ImageFormatSelector {
16      pub fn show(&mut self, ui: &mut egui::Ui) {
17          egui::ComboBox::from_label("Export format")
18              .selected_text(format!("{:?}", self.image_format))
19              .show_ui(ui, |ui| {
20                  ui.selectable_value(&mut self.image_format, image::ImageFormat::Png, "png");
21                  ui.selectable_value(&mut self.image_format, image::ImageFormat::Jpeg, "jpeg");
22                  ui.selectable_value(&mut self.image_format, image::ImageFormat::Bmp, "bmp");
23                  ui.selectable_value(&mut self.image_format, image::ImageFormat::WebP, "webp");
24                  ui.selectable_value(&mut self.image_format, image::ImageFormat::Tiff, "tiff");
25                  ui.selectable_value(&mut self.image_format, image::ImageFormat::Gif, "gif");
26                  ui.selectable_value(&mut self.image_format, image::ImageFormat::Avif, "avif");
27              });
28  
29          if self.image_format != image::ImageFormat::Png {
30              let warning_color = ui.style().visuals.warn_fg_color;
31  
32              let warning_text =
33                  egui::RichText::new("Image will be downloaded in this format").color(warning_color);
34  
35              ui.add(egui::Label::new(warning_text));
36          }
37      }
38  
39      pub fn get(&self) -> image::ImageFormat {
40          self.image_format
41      }
42  }