mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-24 22:18:13 +08:00
Implement nudging selected layers with arrow keys (#245)
* Implement nudging selected layers with arrow keys * Normalize diagonal nudges and add constants * Replace sqrt(2.0) with a constant * Remove normalization of diagonal movement
This commit is contained in:
committed by
Keavon Chambers
parent
5d3a496456
commit
3353974a0b
@@ -124,6 +124,10 @@ pub fn translate_key(name: &str) -> Key {
|
|||||||
"alt" => KeyAlt,
|
"alt" => KeyAlt,
|
||||||
"escape" => KeyEscape,
|
"escape" => KeyEscape,
|
||||||
"tab" => KeyTab,
|
"tab" => KeyTab,
|
||||||
|
"arrowup" => KeyArrowUp,
|
||||||
|
"arrowdown" => KeyArrowDown,
|
||||||
|
"arrowleft" => KeyArrowLeft,
|
||||||
|
"arrowright" => KeyArrowRight,
|
||||||
_ => UnknownKey,
|
_ => UnknownKey,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ pub enum DocumentMessage {
|
|||||||
MouseMove,
|
MouseMove,
|
||||||
TranslateDown,
|
TranslateDown,
|
||||||
TranslateUp,
|
TranslateUp,
|
||||||
|
NudgeSelectedLayers(f64, f64),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<DocumentOperation> for DocumentMessage {
|
impl From<DocumentOperation> for DocumentMessage {
|
||||||
@@ -351,12 +352,22 @@ impl MessageHandler<DocumentMessage, &InputPreprocessor> for DocumentMessageHand
|
|||||||
self.mouse_pos = ipp.mouse.position;
|
self.mouse_pos = ipp.mouse.position;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
NudgeSelectedLayers(x, y) => {
|
||||||
|
let paths: Vec<Vec<LayerId>> = self.selected_layers_sorted();
|
||||||
|
for path in paths {
|
||||||
|
let operation = DocumentOperation::TransformLayer {
|
||||||
|
path,
|
||||||
|
transform: DAffine2::from_translation(DVec2::new(x, y)).to_cols_array(),
|
||||||
|
};
|
||||||
|
responses.push_back(operation.into());
|
||||||
|
}
|
||||||
|
}
|
||||||
message => todo!("document_action_handler does not implement: {}", message.to_discriminant().global_name()),
|
message => todo!("document_action_handler does not implement: {}", message.to_discriminant().global_name()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn actions(&self) -> ActionList {
|
fn actions(&self) -> ActionList {
|
||||||
if self.active_document().layer_data.values().any(|data| data.selected) {
|
if self.active_document().layer_data.values().any(|data| data.selected) {
|
||||||
actions!(DocumentMessageDiscriminant; Undo, SelectAllLayers, DeselectAllLayers, DeleteSelectedLayers, DuplicateSelectedLayers, RenderDocument, ExportDocument, NewDocument, CloseActiveDocument, NextDocument, PrevDocument, MouseMove, TranslateUp, TranslateDown, CopySelectedLayers, PasteLayers, )
|
actions!(DocumentMessageDiscriminant; Undo, SelectAllLayers, DeselectAllLayers, DeleteSelectedLayers, DuplicateSelectedLayers, RenderDocument, ExportDocument, NewDocument, CloseActiveDocument, NextDocument, PrevDocument, MouseMove, TranslateUp, TranslateDown, CopySelectedLayers, PasteLayers, NudgeSelectedLayers)
|
||||||
} else {
|
} else {
|
||||||
actions!(DocumentMessageDiscriminant; Undo, SelectAllLayers, DeselectAllLayers, RenderDocument, ExportDocument, NewDocument, CloseActiveDocument, NextDocument, PrevDocument, MouseMove, TranslateUp, TranslateDown, PasteLayers)
|
actions!(DocumentMessageDiscriminant; Undo, SelectAllLayers, DeselectAllLayers, RenderDocument, ExportDocument, NewDocument, CloseActiveDocument, NextDocument, PrevDocument, MouseMove, TranslateUp, TranslateDown, PasteLayers)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,9 @@ use super::{
|
|||||||
InputPreprocessor,
|
InputPreprocessor,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const NUDGE_AMOUNT: f64 = 1.;
|
||||||
|
const SHIFT_NUDGE_AMOUNT: f64 = 10.;
|
||||||
|
|
||||||
#[impl_message(Message, InputMapper)]
|
#[impl_message(Message, InputMapper)]
|
||||||
#[derive(PartialEq, Clone, Debug)]
|
#[derive(PartialEq, Clone, Debug)]
|
||||||
pub enum InputMapperMessage {
|
pub enum InputMapperMessage {
|
||||||
@@ -185,6 +188,30 @@ impl Default for Mapping {
|
|||||||
entry! {action=DocumentMessage::CloseActiveDocument, key_down=KeyW, modifiers=[KeyShift]},
|
entry! {action=DocumentMessage::CloseActiveDocument, key_down=KeyW, modifiers=[KeyShift]},
|
||||||
entry! {action=DocumentMessage::DuplicateSelectedLayers, key_down=KeyD, modifiers=[KeyControl]},
|
entry! {action=DocumentMessage::DuplicateSelectedLayers, key_down=KeyD, modifiers=[KeyControl]},
|
||||||
entry! {action=DocumentMessage::CopySelectedLayers, key_down=KeyC, modifiers=[KeyControl]},
|
entry! {action=DocumentMessage::CopySelectedLayers, key_down=KeyC, modifiers=[KeyControl]},
|
||||||
|
entry! {action=DocumentMessage::NudgeSelectedLayers(-SHIFT_NUDGE_AMOUNT, -SHIFT_NUDGE_AMOUNT), key_down=KeyArrowUp, modifiers=[KeyShift, KeyArrowLeft]},
|
||||||
|
entry! {action=DocumentMessage::NudgeSelectedLayers(SHIFT_NUDGE_AMOUNT, -SHIFT_NUDGE_AMOUNT), key_down=KeyArrowUp, modifiers=[KeyShift, KeyArrowRight]},
|
||||||
|
entry! {action=DocumentMessage::NudgeSelectedLayers(0., -SHIFT_NUDGE_AMOUNT), key_down=KeyArrowUp, modifiers=[KeyShift]},
|
||||||
|
entry! {action=DocumentMessage::NudgeSelectedLayers(-SHIFT_NUDGE_AMOUNT, SHIFT_NUDGE_AMOUNT), key_down=KeyArrowDown, modifiers=[KeyShift, KeyArrowLeft]},
|
||||||
|
entry! {action=DocumentMessage::NudgeSelectedLayers(SHIFT_NUDGE_AMOUNT, SHIFT_NUDGE_AMOUNT), key_down=KeyArrowDown, modifiers=[KeyShift, KeyArrowRight]},
|
||||||
|
entry! {action=DocumentMessage::NudgeSelectedLayers(0., SHIFT_NUDGE_AMOUNT), key_down=KeyArrowDown, modifiers=[KeyShift]},
|
||||||
|
entry! {action=DocumentMessage::NudgeSelectedLayers(-SHIFT_NUDGE_AMOUNT, -SHIFT_NUDGE_AMOUNT), key_down=KeyArrowLeft, modifiers=[KeyShift, KeyArrowUp]},
|
||||||
|
entry! {action=DocumentMessage::NudgeSelectedLayers(-SHIFT_NUDGE_AMOUNT, SHIFT_NUDGE_AMOUNT), key_down=KeyArrowLeft, modifiers=[KeyShift, KeyArrowDown]},
|
||||||
|
entry! {action=DocumentMessage::NudgeSelectedLayers(-SHIFT_NUDGE_AMOUNT, 0.), key_down=KeyArrowLeft, modifiers=[KeyShift]},
|
||||||
|
entry! {action=DocumentMessage::NudgeSelectedLayers(SHIFT_NUDGE_AMOUNT, -SHIFT_NUDGE_AMOUNT), key_down=KeyArrowRight, modifiers=[KeyShift, KeyArrowUp]},
|
||||||
|
entry! {action=DocumentMessage::NudgeSelectedLayers(SHIFT_NUDGE_AMOUNT, SHIFT_NUDGE_AMOUNT), key_down=KeyArrowRight, modifiers=[KeyShift, KeyArrowDown]},
|
||||||
|
entry! {action=DocumentMessage::NudgeSelectedLayers(SHIFT_NUDGE_AMOUNT, 0.), key_down=KeyArrowRight, modifiers=[KeyShift]},
|
||||||
|
entry! {action=DocumentMessage::NudgeSelectedLayers(-NUDGE_AMOUNT, -NUDGE_AMOUNT), key_down=KeyArrowUp, modifiers=[KeyArrowLeft]},
|
||||||
|
entry! {action=DocumentMessage::NudgeSelectedLayers(NUDGE_AMOUNT, -NUDGE_AMOUNT), key_down=KeyArrowUp, modifiers=[KeyArrowRight]},
|
||||||
|
entry! {action=DocumentMessage::NudgeSelectedLayers(0., -NUDGE_AMOUNT), key_down=KeyArrowUp},
|
||||||
|
entry! {action=DocumentMessage::NudgeSelectedLayers(-NUDGE_AMOUNT, NUDGE_AMOUNT), key_down=KeyArrowDown, modifiers=[KeyArrowLeft]},
|
||||||
|
entry! {action=DocumentMessage::NudgeSelectedLayers(NUDGE_AMOUNT, NUDGE_AMOUNT), key_down=KeyArrowDown, modifiers=[KeyArrowRight]},
|
||||||
|
entry! {action=DocumentMessage::NudgeSelectedLayers(0., NUDGE_AMOUNT), key_down=KeyArrowDown},
|
||||||
|
entry! {action=DocumentMessage::NudgeSelectedLayers(-NUDGE_AMOUNT, -NUDGE_AMOUNT), key_down=KeyArrowLeft, modifiers=[KeyArrowUp]},
|
||||||
|
entry! {action=DocumentMessage::NudgeSelectedLayers(-NUDGE_AMOUNT, NUDGE_AMOUNT), key_down=KeyArrowLeft, modifiers=[KeyArrowDown]},
|
||||||
|
entry! {action=DocumentMessage::NudgeSelectedLayers(-NUDGE_AMOUNT, 0.), key_down=KeyArrowLeft},
|
||||||
|
entry! {action=DocumentMessage::NudgeSelectedLayers(NUDGE_AMOUNT, -NUDGE_AMOUNT), key_down=KeyArrowRight, modifiers=[KeyArrowUp]},
|
||||||
|
entry! {action=DocumentMessage::NudgeSelectedLayers(NUDGE_AMOUNT, NUDGE_AMOUNT), key_down=KeyArrowRight, modifiers=[KeyArrowDown]},
|
||||||
|
entry! {action=DocumentMessage::NudgeSelectedLayers(NUDGE_AMOUNT, 0.), key_down=KeyArrowRight},
|
||||||
// Global Actions
|
// Global Actions
|
||||||
entry! {action=GlobalMessage::LogInfo, key_down=Key1},
|
entry! {action=GlobalMessage::LogInfo, key_down=Key1},
|
||||||
entry! {action=GlobalMessage::LogDebug, key_down=Key2},
|
entry! {action=GlobalMessage::LogDebug, key_down=Key2},
|
||||||
|
|||||||
@@ -62,6 +62,10 @@ pub enum Key {
|
|||||||
KeyAlt,
|
KeyAlt,
|
||||||
KeyEscape,
|
KeyEscape,
|
||||||
KeyTab,
|
KeyTab,
|
||||||
|
KeyArrowUp,
|
||||||
|
KeyArrowDown,
|
||||||
|
KeyArrowLeft,
|
||||||
|
KeyArrowRight,
|
||||||
|
|
||||||
// This has to be the last element in the enum.
|
// This has to be the last element in the enum.
|
||||||
NumKeys,
|
NumKeys,
|
||||||
|
|||||||
Reference in New Issue
Block a user