inputHandling: Claim double-click gesture

This commit is contained in:
Sophie Herold 2024-11-18 14:47:21 +01:00
parent 689401dffc
commit 8e8751d41a

View file

@ -142,9 +142,14 @@ impl imp::LpImage {
move |gesture, n_press, x, y| { move |gesture, n_press, x, y| {
// only handle double clicks // only handle double clicks
if n_press != 2 { if n_press != 2 {
log::trace!("Gesture {n_press} click");
gesture.set_state(gtk::EventSequenceState::Denied);
return; return;
} }
log::trace!("Gesture double click");
gesture.set_state(gtk::EventSequenceState::Claimed);
if gesture.device().map(|x| x.source()) == Some(gdk::InputSource::Touchscreen) { if gesture.device().map(|x| x.source()) == Some(gdk::InputSource::Touchscreen) {
// zoom // zoom
obj.imp().pointer_position.set(Some((x, y))); obj.imp().pointer_position.set(Some((x, y)));
@ -170,6 +175,7 @@ impl imp::LpImage {
#[weak] #[weak]
obj, obj,
move |gesture, _, _| { move |gesture, _, _| {
log::trace!("Drag gesture begin");
let imp = obj.imp(); let imp = obj.imp();
// Allow only left and middle button // Allow only left and middle button
@ -210,6 +216,7 @@ impl imp::LpImage {
#[weak] #[weak]
obj, obj,
move |_, _, _| { move |_, _, _| {
log::trace!("Drag gesture end");
obj.set_cursor(None); obj.set_cursor(None);
obj.imp().last_drag_value.set(None); obj.imp().last_drag_value.set(None);
} }
@ -222,7 +229,10 @@ impl imp::LpImage {
rotation_gesture.connect_begin(glib::clone!( rotation_gesture.connect_begin(glib::clone!(
#[weak] #[weak]
obj, obj,
move |_, _| obj.imp().cancel_deceleration() move |_, _| {
log::trace!("Rotate gesture begin");
obj.imp().cancel_deceleration();
}
)); ));
rotation_gesture.connect_angle_changed(glib::clone!( rotation_gesture.connect_angle_changed(glib::clone!(
@ -260,7 +270,7 @@ impl imp::LpImage {
#[weak] #[weak]
obj, obj,
move |_, _| { move |_, _| {
log::debug!("Rotate gesture ended"); log::debug!("Rotate gesture end");
let angle = (obj.rotation() / 90.).round() * 90. - obj.imp().rotation_target.get(); let angle = (obj.rotation() / 90.).round() * 90. - obj.imp().rotation_target.get();
obj.rotate_by(angle); obj.rotate_by(angle);
@ -276,6 +286,8 @@ impl imp::LpImage {
#[weak] #[weak]
obj, obj,
move |gesture, _| { move |gesture, _| {
log::trace!("Zoom gesture begin");
let imp = obj.imp(); let imp = obj.imp();
imp.cancel_deceleration(); imp.cancel_deceleration();
imp.zoom_gesture_center.set(gesture.bounding_box_center()); imp.zoom_gesture_center.set(gesture.bounding_box_center());
@ -324,7 +336,7 @@ impl imp::LpImage {
obj, obj,
move |_, _| { move |_, _| {
let imp = obj.imp(); let imp = obj.imp();
log::debug!("Zoom gesture ended"); log::debug!("Zoom gesture end");
let rotation_target = (obj.rotation() / 90.).round() * 90.; let rotation_target = (obj.rotation() / 90.).round() * 90.;
if obj.zoom() < imp.zoom_level_best_fit_for_rotation(rotation_target) { if obj.zoom() < imp.zoom_level_best_fit_for_rotation(rotation_target) {