use bladvak::{
ErrorManager,
eframe::egui::{self, Color32, Image, ImageSource, include_image},
};
use crate::TarsierApp;
impl TarsierApp {
const RESET_ICON: ImageSource<'_> = include_image!("../assets/icon_x-circle.png");
const SAVE_STATE_ICON: ImageSource<'_> = include_image!("../assets/icon_check.png");
const ROTATE_CCW_ICON: ImageSource<'_> = include_image!("../assets/icon_rotate_ccw.png");
const ROTATE_CW_ICON: ImageSource<'_> = include_image!("../assets/icon_rotate_cw.png");
const FLIP_H_ICON: ImageSource<'_> = include_image!("../assets/icon_flip_h.png");
const FLIP_V_ICON: ImageSource<'_> = include_image!("../assets/icon_flip_v.png");
pub(crate) fn quick_operations(&mut self, ui: &mut egui::Ui, error_manager: &mut ErrorManager) {
let is_dark_theme = ui.ctx().global_style().visuals.dark_mode;
ui.horizontal(|ui| {
let ico_image = Image::new(Self::RESET_ICON);
if ui
.add(egui::Button::image(if is_dark_theme {
ico_image
} else {
ico_image.tint(Color32::BLACK)
}))
.on_hover_text("Reset the image to the saved state")
.clicked()
{
let Some(document) = self.documents.get_current_doc_mut() else {
return;
};
let new_img = document.saved_img.clone();
self.update_image(new_img);
}
let ico_image = Image::new(Self::SAVE_STATE_ICON);
if ui
.add(egui::Button::image(if is_dark_theme {
ico_image
} else {
ico_image.tint(Color32::BLACK)
}))
.on_hover_text("Save the current image state")
.clicked()
{
let Some(document) = self.documents.get_current_doc_mut() else {
return;
};
document.saved_img = document.img.clone();
}
});
ui.horizontal(|ui| {
let ico_image = Image::new(Self::ROTATE_CW_ICON);
if ui
.add(egui::Button::image(if is_dark_theme {
ico_image
} else {
ico_image.tint(Color32::BLACK)
}))
.on_hover_text("Rotate 90 degrees clockwise")
.clicked()
{
self.apply_op(image::DynamicImage::rotate90, error_manager);
}
let ico_image = Image::new(Self::ROTATE_CCW_ICON);
if ui
.add(egui::Button::image(if is_dark_theme {
ico_image
} else {
ico_image.tint(Color32::BLACK)
}))
.on_hover_text("Rotate 90 degrees counter-clockwise")
.clicked()
{
self.apply_op(image::DynamicImage::rotate270, error_manager);
}
let ico_image = Image::new(Self::FLIP_H_ICON);
if ui
.add(egui::Button::image(if is_dark_theme {
ico_image
} else {
ico_image.tint(Color32::BLACK)
}))
.on_hover_text("Flip horizontally")
.clicked()
{
self.apply_op(image::DynamicImage::fliph, error_manager);
}
let ico_image = Image::new(Self::FLIP_V_ICON);
if ui
.add(egui::Button::image(if is_dark_theme {
ico_image
} else {
ico_image.tint(Color32::BLACK)
}))
.on_hover_text("Flip vertically")
.clicked()
{
self.apply_op(image::DynamicImage::flipv, error_manager);
}
});
}
}