Skip to content

Commit 134381f

Browse files
0HyperCubeKeavon
andcommitted
(G)rab, (R)otate, and (S)cale layers with hotkeys (#356)
* Add handler and input mapping. * Selecting transform type * Add translation and axis constraints * Remove unnecessary Key:: * Add rotation * Centre pivot point for rotation * Add scaling * Select Tool bounding box now updates when transforming * Add typing * Shift to slow mouse movements * Add snapping * Refactor modifier keys * Refactor to apply only 1 operation per frame * Refactor to fix scale 0 issue * Remove logging * Avoid multiple decimol points in queue * Add typing negative * Add typing negative values * Fix bounding box on apply/abort; fix some variable names * Allow transform to daffine2 identity * Revert previous operation when changing operation * Remove repopulate transforms method * Code readability tweaks Co-authored-by: Keavon Chambers <[email protected]>
1 parent 4f87191 commit 134381f

File tree

10 files changed

+610
-3
lines changed

10 files changed

+610
-3
lines changed

editor/src/consts.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@ pub const VIEWPORT_SCROLL_RATE: f64 = 0.6;
1515

1616
pub const VIEWPORT_ROTATE_SNAP_INTERVAL: f64 = 15.;
1717

18+
// TRANSFORMING LAYER
19+
pub const ROTATE_SNAP_ANGLE: f64 = 15.;
20+
pub const SCALE_SNAP_INTERVAL: f64 = 0.1;
21+
pub const SLOWING_DIVISOR: f64 = 10.;
22+
1823
// SELECT TOOL
1924
pub const SELECTION_TOLERANCE: f64 = 1.;
2025

editor/src/document/document_file.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ use log::warn;
1818
use std::collections::VecDeque;
1919

2020
use super::movement_handler::{MovementMessage, MovementMessageHandler};
21+
use super::transform_layer_handler::{TransformLayerMessage, TransformLayerMessageHandler};
2122

2223
type DocumentSave = (InternalDocument, HashMap<Vec<LayerId>, LayerData>);
2324

@@ -63,6 +64,7 @@ pub struct DocumentMessageHandler {
6364
pub name: String,
6465
pub layer_data: HashMap<Vec<LayerId>, LayerData>,
6566
movement_handler: MovementMessageHandler,
67+
transform_layer_handler: TransformLayerMessageHandler,
6668
}
6769

6870
impl Default for DocumentMessageHandler {
@@ -74,6 +76,7 @@ impl Default for DocumentMessageHandler {
7476
name: String::from("Untitled Document"),
7577
layer_data: vec![(vec![], LayerData::new(true))].into_iter().collect(),
7678
movement_handler: MovementMessageHandler::default(),
79+
transform_layer_handler: TransformLayerMessageHandler::default(),
7780
}
7881
}
7982
}
@@ -83,6 +86,8 @@ impl Default for DocumentMessageHandler {
8386
pub enum DocumentMessage {
8487
#[child]
8588
Movement(MovementMessage),
89+
#[child]
90+
TransformLayers(TransformLayerMessage),
8691
DispatchOperation(Box<DocumentOperation>),
8792
SetSelectedLayers(Vec<Vec<LayerId>>),
8893
AddSelectedLayers(Vec<Vec<LayerId>>),
@@ -260,6 +265,7 @@ impl DocumentMessageHandler {
260265
name,
261266
layer_data: vec![(vec![], LayerData::new(true))].into_iter().collect(),
262267
movement_handler: MovementMessageHandler::default(),
268+
transform_layer_handler: TransformLayerMessageHandler::default(),
263269
}
264270
}
265271

@@ -361,6 +367,7 @@ impl MessageHandler<DocumentMessage, &InputPreprocessor> for DocumentMessageHand
361367
use DocumentMessage::*;
362368
match message {
363369
Movement(message) => self.movement_handler.process_action(message, (layer_data(&mut self.layer_data, &[]), &self.document, ipp), responses),
370+
TransformLayers(message) => self.transform_layer_handler.process_action(message, (&mut self.layer_data, &mut self.document, ipp), responses),
364371
DeleteLayer(path) => responses.push_back(DocumentOperation::DeleteLayer { path }.into()),
365372
StartTransaction => self.backup(),
366373
RollbackTransaction => {
@@ -710,6 +717,7 @@ impl MessageHandler<DocumentMessage, &InputPreprocessor> for DocumentMessageHand
710717
common.extend(select);
711718
}
712719
common.extend(self.movement_handler.actions());
720+
common.extend(self.transform_layer_handler.actions());
713721
common
714722
}
715723
}

editor/src/document/document_message_handler.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::input::InputPreprocessor;
22
use crate::message_prelude::*;
3-
use graphene::layers::{Layer, LayerDataType};
3+
use graphene::layers::Layer;
44
use graphene::{LayerId, Operation as DocumentOperation};
55
use log::warn;
66

editor/src/document/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ mod document_file;
22
mod document_message_handler;
33
pub mod layer_panel;
44
mod movement_handler;
5+
mod transform_layer_handler;
56

67
#[doc(inline)]
78
pub use document_file::LayerData;
@@ -12,3 +13,5 @@ pub use document_file::{AlignAggregate, AlignAxis, DocumentMessage, DocumentMess
1213
pub use document_message_handler::{DocumentsMessage, DocumentsMessageDiscriminant, DocumentsMessageHandler};
1314
#[doc(inline)]
1415
pub use movement_handler::{MovementMessage, MovementMessageDiscriminant};
16+
#[doc(inline)]
17+
pub use transform_layer_handler::{TransformLayerMessage, TransformLayerMessageDiscriminant};

0 commit comments

Comments
 (0)