Fix performance and UX issues

This commit is contained in:
2026-03-07 23:11:00 +02:00
parent 0ef3893bce
commit 72c519bebc
6 changed files with 249 additions and 65 deletions

View File

@@ -686,19 +686,32 @@ pub fn build_watermark_page(state: &AppState) -> adw::NavigationPage {
});
}
// Per-slider debounce counters (separate to avoid cross-slider cancellation)
let opacity_debounce: Rc<Cell<u32>> = Rc::new(Cell::new(0));
let rotation_debounce: Rc<Cell<u32>> = Rc::new(Cell::new(0));
let margin_debounce: Rc<Cell<u32>> = Rc::new(Cell::new(0));
let scale_debounce: Rc<Cell<u32>> = Rc::new(Cell::new(0));
// Opacity slider
{
let jc = state.job_config.clone();
let row = opacity_row.clone();
let up = update_preview.clone();
let rst = opacity_reset.clone();
let did = opacity_debounce.clone();
opacity_scale.connect_value_changed(move |scale| {
let val = scale.value().round() as i32;
let opacity = val as f32 / 100.0;
jc.borrow_mut().watermark_opacity = opacity;
row.set_subtitle(&format!("{}%", val));
rst.set_sensitive(val != 50);
up();
let up = up.clone();
let did = did.clone();
let id = did.get().wrapping_add(1);
did.set(id);
glib::timeout_add_local_once(std::time::Duration::from_millis(150), move || {
if did.get() == id { up(); }
});
});
}
{
@@ -714,12 +727,19 @@ pub fn build_watermark_page(state: &AppState) -> adw::NavigationPage {
let row = rotation_row.clone();
let up = update_preview.clone();
let rst = rotation_reset.clone();
let did = rotation_debounce.clone();
rotation_scale.connect_value_changed(move |scale| {
let val = scale.value().round() as i32;
jc.borrow_mut().watermark_rotation = val;
row.set_subtitle(&format!("{} degrees", val));
rst.set_sensitive(val != 0);
up();
let up = up.clone();
let did = did.clone();
let id = did.get().wrapping_add(1);
did.set(id);
glib::timeout_add_local_once(std::time::Duration::from_millis(150), move || {
if did.get() == id { up(); }
});
});
}
{
@@ -745,12 +765,19 @@ pub fn build_watermark_page(state: &AppState) -> adw::NavigationPage {
let row = margin_row.clone();
let up = update_preview.clone();
let rst = margin_reset.clone();
let did = margin_debounce.clone();
margin_scale.connect_value_changed(move |scale| {
let val = scale.value().round() as i32;
jc.borrow_mut().watermark_margin = val as u32;
row.set_subtitle(&format!("{} px", val));
rst.set_sensitive(val != 10);
up();
let up = up.clone();
let did = did.clone();
let id = did.get().wrapping_add(1);
did.set(id);
glib::timeout_add_local_once(std::time::Duration::from_millis(150), move || {
if did.get() == id { up(); }
});
});
}
{
@@ -766,12 +793,19 @@ pub fn build_watermark_page(state: &AppState) -> adw::NavigationPage {
let row = scale_row.clone();
let up = update_preview.clone();
let rst = scale_reset.clone();
let did = scale_debounce.clone();
scale_scale.connect_value_changed(move |scale| {
let val = scale.value().round() as i32;
jc.borrow_mut().watermark_scale = val as f32;
row.set_subtitle(&format!("{}%", val));
rst.set_sensitive((val - 20).abs() > 0);
up();
let up = up.clone();
let did = did.clone();
let id = did.get().wrapping_add(1);
did.set(id);
glib::timeout_add_local_once(std::time::Duration::from_millis(150), move || {
if did.get() == id { up(); }
});
});
}
{