From 129d1cfc7a9445d2368f809176a245f2e9571757 Mon Sep 17 00:00:00 2001 From: Sophie Herold Date: Wed, 29 Jan 2025 12:29:26 +0100 Subject: [PATCH] edit/crop: Add keyboard shortcuts Closes #442 --- data/resources/gtk/help-overlay.ui | 35 ++++++++++++++++++++ src/widgets/edit/crop.rs | 52 ++++++++++++++++++++++++++++++ src/widgets/edit/crop_selection.rs | 2 ++ 3 files changed, 89 insertions(+) diff --git a/data/resources/gtk/help-overlay.ui b/data/resources/gtk/help-overlay.ui index 42951d2..f5f9ce6 100644 --- a/data/resources/gtk/help-overlay.ui +++ b/data/resources/gtk/help-overlay.ui @@ -283,6 +283,41 @@ + + + Editing + + + Rotate Clockwise + <Ctrl>R + + + + + Rotate Counterclockwise + <Ctrl><Shift>R + + + + + Mirror Horizontally + H + + + + + Mirror Vertically + V + + + + + Apply Crop + <Ctrl>Return + + + + diff --git a/src/widgets/edit/crop.rs b/src/widgets/edit/crop.rs index 1a9f609..8bb7928 100644 --- a/src/widgets/edit/crop.rs +++ b/src/widgets/edit/crop.rs @@ -60,6 +60,8 @@ pub enum LpOrientation { mod imp { + use gtk::gdk; + use super::*; #[derive(Debug, Default, gtk::CompositeTemplate, glib::Properties)] @@ -105,6 +107,56 @@ mod imp { klass.install_action("edit-crop.apply-crop", None, |obj, _, _| { obj.imp().apply_crop() }); + + klass.add_shortcut( + >k::Shortcut::builder() + .action(>k::NamedAction::new("edit-crop.mirror-horizontally")) + .trigger(>k::KeyvalTrigger::new( + gdk::Key::H, + gdk::ModifierType::NO_MODIFIER_MASK, + )) + .build(), + ); + + klass.add_shortcut( + >k::Shortcut::builder() + .action(>k::NamedAction::new("edit-crop.mirror-vertically")) + .trigger(>k::KeyvalTrigger::new( + gdk::Key::V, + gdk::ModifierType::NO_MODIFIER_MASK, + )) + .build(), + ); + + klass.add_shortcut( + >k::Shortcut::builder() + .action(>k::NamedAction::new("edit-crop.rotate-cw")) + .trigger(>k::KeyvalTrigger::new( + gdk::Key::R, + gdk::ModifierType::CONTROL_MASK, + )) + .build(), + ); + + klass.add_shortcut( + >k::Shortcut::builder() + .action(>k::NamedAction::new("edit-crop.rotate-ccw")) + .trigger(>k::KeyvalTrigger::new( + gdk::Key::R, + gdk::ModifierType::CONTROL_MASK.union(gdk::ModifierType::SHIFT_MASK), + )) + .build(), + ); + + klass.add_shortcut( + >k::Shortcut::builder() + .action(>k::NamedAction::new("edit-crop.apply-crop")) + .trigger(>k::KeyvalTrigger::new( + gdk::Key::Return, + gdk::ModifierType::CONTROL_MASK, + )) + .build(), + ); } fn instance_init(obj: &glib::subclass::InitializingObject) { diff --git a/src/widgets/edit/crop_selection.rs b/src/widgets/edit/crop_selection.rs index e68169e..27db2a1 100644 --- a/src/widgets/edit/crop_selection.rs +++ b/src/widgets/edit/crop_selection.rs @@ -194,6 +194,8 @@ mod imp { #[template_child] selection_move: TemplateChild, + #[template_child] + shortcuts: TemplateChild, #[template_child] selection_overlay: TemplateChild,