Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

(G)rab, (R)otate, and (S)cale layers with hotkeys #356

Merged
merged 29 commits into from Aug 30, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
1ad454d
Add handler and input mapping.
0HyperCube Aug 24, 2021
f6f1da5
Selecting transform type
0HyperCube Aug 24, 2021
2a31b76
Add translation and axis constraints
0HyperCube Aug 25, 2021
0e00db9
Remove unnecessary Key::
0HyperCube Aug 25, 2021
17cda22
Add rotation
0HyperCube Aug 25, 2021
84ad3b3
Centre pivot point for rotation
0HyperCube Aug 25, 2021
0ef04c1
Add scaling
0HyperCube Aug 26, 2021
def617f
Select Tool bounding box now updates when transforming
Keavon Aug 26, 2021
9ac6f84
Merge branch 'master' into transform-layer
0HyperCube Aug 26, 2021
c6cf837
Add typing
0HyperCube Aug 26, 2021
7429f02
Shift to slow mouse movements
0HyperCube Aug 26, 2021
3de269a
Add snapping
0HyperCube Aug 26, 2021
6fb3cee
Merge branch 'master' into transform-layer
0HyperCube Aug 26, 2021
fe791b2
Refactor modifier keys
0HyperCube Aug 27, 2021
2688554
Merge branch 'master' into transform-layer
0HyperCube Aug 27, 2021
2402480
Refactor to apply only 1 operation per frame
0HyperCube Aug 27, 2021
139ba6d
Refactor to fix scale 0 issue
0HyperCube Aug 28, 2021
812a0e9
Remove logging
0HyperCube Aug 28, 2021
e0ab77a
Avoid multiple decimol points in queue
0HyperCube Aug 28, 2021
bd58652
Add typing negative
0HyperCube Aug 28, 2021
6e94e91
Add typing negative values
0HyperCube Aug 28, 2021
5ba4537
Fix bounding box on apply/abort; fix some variable names
Keavon Aug 28, 2021
2b00727
Merge branch 'master' into transform-layer
0HyperCube Aug 29, 2021
3218196
Allow transform to daffine2 identity
0HyperCube Aug 29, 2021
dafce92
Revert previous operation when changing operation
0HyperCube Aug 29, 2021
6c3f133
Merge branch 'master' into transform-layer
Keavon Aug 29, 2021
13efb78
Merge branch 'master' into transform-layer
0HyperCube Aug 30, 2021
6e4be30
Remove repopulate transforms method
0HyperCube Aug 30, 2021
1a2fec6
Code readability tweaks
Keavon Aug 30, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
5 changes: 5 additions & 0 deletions editor/src/consts.rs
Expand Up @@ -15,6 +15,11 @@ pub const VIEWPORT_SCROLL_RATE: f64 = 0.6;

pub const VIEWPORT_ROTATE_SNAP_INTERVAL: f64 = 15.;

// TRANSFORMING LAYER
pub const ROTATE_SNAP_ANGLE: f64 = 15.;
pub const SCALE_SNAP_INTERVAL: f64 = 0.1;
pub const SLOWING_DIVISOR: f64 = 10.;

// SELECT TOOL
pub const SELECTION_TOLERANCE: f64 = 1.;

Expand Down
8 changes: 8 additions & 0 deletions editor/src/document/document_file.rs
Expand Up @@ -18,6 +18,7 @@ use log::warn;
use std::collections::VecDeque;

use super::movement_handler::{MovementMessage, MovementMessageHandler};
use super::transform_layer_handler::{TransformLayerMessage, TransformLayerMessageHandler};

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

Expand Down Expand Up @@ -63,6 +64,7 @@ pub struct DocumentMessageHandler {
pub name: String,
pub layer_data: HashMap<Vec<LayerId>, LayerData>,
movement_handler: MovementMessageHandler,
transform_layer_handler: TransformLayerMessageHandler,
}

impl Default for DocumentMessageHandler {
Expand All @@ -74,6 +76,7 @@ impl Default for DocumentMessageHandler {
name: String::from("Untitled Document"),
layer_data: vec![(vec![], LayerData::new(true))].into_iter().collect(),
movement_handler: MovementMessageHandler::default(),
transform_layer_handler: TransformLayerMessageHandler::default(),
}
}
}
Expand All @@ -83,6 +86,8 @@ impl Default for DocumentMessageHandler {
pub enum DocumentMessage {
#[child]
Movement(MovementMessage),
#[child]
TransformLayers(TransformLayerMessage),
DispatchOperation(Box<DocumentOperation>),
SetSelectedLayers(Vec<Vec<LayerId>>),
AddSelectedLayers(Vec<Vec<LayerId>>),
Expand Down Expand Up @@ -260,6 +265,7 @@ impl DocumentMessageHandler {
name,
layer_data: vec![(vec![], LayerData::new(true))].into_iter().collect(),
movement_handler: MovementMessageHandler::default(),
transform_layer_handler: TransformLayerMessageHandler::default(),
}
}

Expand Down Expand Up @@ -361,6 +367,7 @@ impl MessageHandler<DocumentMessage, &InputPreprocessor> for DocumentMessageHand
use DocumentMessage::*;
match message {
Movement(message) => self.movement_handler.process_action(message, (layer_data(&mut self.layer_data, &[]), &self.document, ipp), responses),
TransformLayers(message) => self.transform_layer_handler.process_action(message, (&mut self.layer_data, &mut self.document, ipp), responses),
DeleteLayer(path) => responses.push_back(DocumentOperation::DeleteLayer { path }.into()),
StartTransaction => self.backup(),
RollbackTransaction => {
Expand Down Expand Up @@ -710,6 +717,7 @@ impl MessageHandler<DocumentMessage, &InputPreprocessor> for DocumentMessageHand
common.extend(select);
}
common.extend(self.movement_handler.actions());
common.extend(self.transform_layer_handler.actions());
common
}
}
2 changes: 1 addition & 1 deletion editor/src/document/document_message_handler.rs
@@ -1,6 +1,6 @@
use crate::input::InputPreprocessor;
use crate::message_prelude::*;
use graphene::layers::{Layer, LayerDataType};
use graphene::layers::Layer;
use graphene::{LayerId, Operation as DocumentOperation};
use log::warn;

Expand Down
3 changes: 3 additions & 0 deletions editor/src/document/mod.rs
Expand Up @@ -2,6 +2,7 @@ mod document_file;
mod document_message_handler;
pub mod layer_panel;
mod movement_handler;
mod transform_layer_handler;

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