#1202: look for empty canvas under the pointer only on a triple click

This commit is contained in:
bflatastic
2026-10-24 09:39:53 +07:00
parent 7fad345e48
commit a8363f062b
+12 -9
View File
@@ -613,15 +613,18 @@ fn input(app: &mut FigApp, ui: &mut Ui, resp: &egui::Response) -> bool {
// mode counts on, so leaving it right away would otherwise take a fourth click or a pause.
let ds = app.session.ds().ok();
let editing = ds.is_some_and(|d| d.vector_edit.is_some() || d.text_edit.is_some());
let empty_canvas = ds.is_some_and(|d| {
let Some(ve) = d.vector_edit.as_ref().filter(|v| v.anchor.is_none() && d.text_edit.is_none()) else {
return false;
};
let p = app.to_page(pos);
let tol = 6.0 / d.view.zoom.max(1e-6);
ve.parts().iter().all(|part| d.doc.world_render_bounds(part.id).is_none_or(|b| !b.inflate(tol * 4.0, tol * 4.0).contains(p)))
});
if resp.double_clicked() || (resp.triple_clicked() && (!editing || empty_canvas)) {
// Only a triple click asks (it walks the parts' render bounds).
let empty_canvas = || {
ds.is_some_and(|d| {
let Some(ve) = d.vector_edit.as_ref().filter(|v| v.anchor.is_none() && d.text_edit.is_none()) else {
return false;
};
let p = app.to_page(pos);
let tol = 6.0 / d.view.zoom.max(1e-6);
ve.parts().iter().all(|part| d.doc.world_render_bounds(part.id).is_none_or(|b| !b.inflate(tol * 4.0, tol * 4.0).contains(p)))
})
};
if resp.double_clicked() || (resp.triple_clicked() && (!editing || empty_canvas())) {
let ev = pointer_event(app, PointerKind::DoubleClick, pos, &mods);
if let Err(e) = app.session.pointer(&ev) {
app.toast(e.to_string());