Files
avif-maker/src/ui/settings.rs

176 lines
5.5 KiB
Rust
Raw Normal View History

2026-02-05 00:15:54 -05:00
use crate::app::EncodingSettings;
use eframe::egui;
pub struct Settings;
impl Settings {
pub fn new() -> Self {
Self
}
pub fn show(&mut self, ui: &mut egui::Ui, settings: &mut EncodingSettings) {
ui.heading("Encoding Settings");
ui.add_space(12.0);
2026-02-05 00:50:13 -05:00
// Quality setting with editable number
2026-02-05 00:15:54 -05:00
ui.horizontal(|ui| {
ui.label("Quality:");
ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| {
2026-02-05 00:50:13 -05:00
let mut quality = settings.quality as i32;
let drag = egui::DragValue::new(&mut quality)
.range(0..=100)
.speed(1);
if ui.add(drag).changed() {
settings.quality = quality.clamp(0, 100) as u8;
}
2026-02-05 00:15:54 -05:00
});
});
let quality_slider = egui::Slider::new(&mut settings.quality, 0..=100)
.show_value(false);
ui.add(quality_slider);
ui.add_space(4.0);
ui.label(
egui::RichText::new("0 = smallest file, 100 = best quality")
.weak(),
);
ui.add_space(12.0);
2026-02-05 00:50:13 -05:00
// Alpha quality setting with editable number
2026-02-05 00:15:54 -05:00
ui.horizontal(|ui| {
ui.label("Alpha Quality:");
ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| {
2026-02-05 00:50:13 -05:00
let mut alpha = settings.alpha_quality as i32;
let drag = egui::DragValue::new(&mut alpha)
.range(0..=100)
.speed(1);
if ui.add(drag).changed() {
settings.alpha_quality = alpha.clamp(0, 100) as u8;
}
2026-02-05 00:15:54 -05:00
});
});
let alpha_slider = egui::Slider::new(&mut settings.alpha_quality, 0..=100)
.show_value(false);
ui.add(alpha_slider);
ui.add_space(4.0);
ui.label(
egui::RichText::new("Separate quality for transparency")
.weak(),
);
ui.add_space(12.0);
2026-02-05 00:50:13 -05:00
// Speed setting with editable number
2026-02-05 00:15:54 -05:00
ui.horizontal(|ui| {
ui.label("Speed:");
ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| {
2026-02-05 00:50:13 -05:00
let mut speed = settings.speed as i32;
let drag = egui::DragValue::new(&mut speed)
.range(0..=10)
.speed(0.1);
if ui.add(drag).changed() {
settings.speed = speed.clamp(0, 10) as u8;
}
2026-02-05 00:15:54 -05:00
});
});
let speed_slider = egui::Slider::new(&mut settings.speed, 0..=10)
.show_value(false);
ui.add(speed_slider);
ui.add_space(4.0);
ui.label(
egui::RichText::new("0 = slowest/best, 10 = fastest")
.weak(),
);
ui.add_space(16.0);
ui.separator();
ui.add_space(8.0);
// Lossless checkbox
let mut lossless = settings.lossless;
if ui.checkbox(&mut lossless, "Lossless mode").changed() {
settings.lossless = lossless;
if lossless {
settings.quality = 100;
settings.alpha_quality = 100;
}
}
ui.add_space(4.0);
ui.label(
egui::RichText::new("Perfect quality, larger files")
.weak(),
);
ui.add_space(16.0);
ui.separator();
ui.add_space(8.0);
// FPS Override
ui.label("FPS Override (for videos):");
ui.add_space(4.0);
let has_override = settings.fps_override.is_some();
let mut fps_value = settings.fps_override.unwrap_or(30.0);
ui.horizontal(|ui| {
let mut use_override = has_override;
if ui.checkbox(&mut use_override, "").changed() {
if use_override {
settings.fps_override = Some(fps_value);
} else {
settings.fps_override = None;
}
}
ui.add_enabled_ui(has_override, |ui| {
let fps_edit = egui::DragValue::new(&mut fps_value)
.speed(0.5)
.range(1.0..=120.0)
.suffix(" fps");
if ui.add(fps_edit).changed() && has_override {
settings.fps_override = Some(fps_value);
}
});
if !has_override {
ui.label(egui::RichText::new("Auto-detect").weak());
}
});
ui.add_space(16.0);
ui.separator();
ui.add_space(8.0);
// Output directory
ui.label("Output Directory:");
ui.add_space(4.0);
if ui
.checkbox(&mut settings.use_same_directory, "Same as source")
.changed()
{
if settings.use_same_directory {
settings.output_directory = None;
}
}
ui.add_enabled_ui(!settings.use_same_directory, |ui| {
ui.horizontal(|ui| {
let dir_text = settings
.output_directory
.as_ref()
.map(|p| p.display().to_string())
.unwrap_or_else(|| "Not set".to_string());
2026-02-05 00:50:13 -05:00
ui.label(egui::RichText::new(&dir_text));
2026-02-05 00:15:54 -05:00
});
if ui.button("Browse...").clicked() {
if let Some(path) = rfd::FileDialog::new().pick_folder() {
settings.output_directory = Some(path);
}
}
});
}
}