From 3811c78b70fa4879875ece12206a67b52503aca5 Mon Sep 17 00:00:00 2001 From: 0HyperCube <78500760+0HyperCube@users.noreply.github.com> Date: Tue, 28 Dec 2021 17:30:41 +0000 Subject: [PATCH] Remove snap rotate from layerdata (#435) --- editor/src/document/document_file.rs | 2 +- editor/src/document/layer_panel.rs | 16 ++-------------- editor/src/document/movement_handler.rs | 23 +++++++++++++++++------ 3 files changed, 20 insertions(+), 21 deletions(-) diff --git a/editor/src/document/document_file.rs b/editor/src/document/document_file.rs index a553a50b4..87a343020 100644 --- a/editor/src/document/document_file.rs +++ b/editor/src/document/document_file.rs @@ -171,7 +171,7 @@ impl DocumentMessageHandler { snapping_enabled: true, view_mode: ViewMode::default(), }; - document.graphene_document.root.transform = document.layerdata(&[]).calculate_offset_transform(ipp.viewport_bounds.size() / 2.); + document.graphene_document.root.transform = document.layerdata(&[]).calculate_offset_transform(ipp.viewport_bounds.size() / 2., 0.); document } diff --git a/editor/src/document/layer_panel.rs b/editor/src/document/layer_panel.rs index 21f72559a..d92a38a67 100644 --- a/editor/src/document/layer_panel.rs +++ b/editor/src/document/layer_panel.rs @@ -1,4 +1,3 @@ -use crate::consts::VIEWPORT_ROTATE_SNAP_INTERVAL; use glam::{DAffine2, DVec2}; use graphene::layers::{style::ViewMode, BlendMode, Layer, LayerData as DocumentLayerData, LayerDataType}; use graphene::LayerId; @@ -12,7 +11,6 @@ pub struct LayerData { pub expanded: bool, pub translation: DVec2, pub rotation: f64, - pub snap_rotate: bool, pub scale: f64, } @@ -23,25 +21,15 @@ impl LayerData { expanded, translation: DVec2::ZERO, rotation: 0., - snap_rotate: false, scale: 1., } } - pub fn snapped_angle(&self) -> f64 { - let increment_radians: f64 = VIEWPORT_ROTATE_SNAP_INTERVAL.to_radians(); - if self.snap_rotate { - (self.rotation / increment_radians).round() * increment_radians - } else { - self.rotation - } - } - - pub fn calculate_offset_transform(&self, offset: DVec2) -> DAffine2 { + pub fn calculate_offset_transform(&self, offset: DVec2, snapped_angle: f64) -> DAffine2 { // TODO: replace with DAffine2::from_scale_angle_translation and fix the errors let offset_transform = DAffine2::from_translation(offset); let scale_transform = DAffine2::from_scale(DVec2::new(self.scale, self.scale)); - let angle_transform = DAffine2::from_angle(self.snapped_angle()); + let angle_transform = DAffine2::from_angle(snapped_angle); let translation_transform = DAffine2::from_translation(self.translation); scale_transform * offset_transform * angle_transform * translation_transform } diff --git a/editor/src/document/movement_handler.rs b/editor/src/document/movement_handler.rs index 5a2b0ec0f..5df7789c5 100644 --- a/editor/src/document/movement_handler.rs +++ b/editor/src/document/movement_handler.rs @@ -1,3 +1,4 @@ +use crate::consts::VIEWPORT_ROTATE_SNAP_INTERVAL; pub use crate::document::layer_panel::*; use crate::document::{DocumentMessage, LayerData}; use crate::message_prelude::*; @@ -40,16 +41,26 @@ pub struct MovementMessageHandler { zooming: bool, snapping: bool, mouse_pos: ViewportPosition, + snap_rotate: bool, } impl MovementMessageHandler { + pub fn snapped_angle(&self, layerdata: &LayerData) -> f64 { + let increment_radians: f64 = VIEWPORT_ROTATE_SNAP_INTERVAL.to_radians(); + if self.snap_rotate { + (layerdata.rotation / increment_radians).round() * increment_radians + } else { + layerdata.rotation + } + } + fn create_document_transform_from_layerdata(&self, layerdata: &LayerData, viewport_bounds: &ViewportBounds, responses: &mut VecDeque) { let half_viewport = viewport_bounds.size() / 2.; let scaled_half_viewport = half_viewport / layerdata.scale; responses.push_back( DocumentOperation::SetLayerTransform { path: vec![], - transform: layerdata.calculate_offset_transform(scaled_half_viewport).to_cols_array(), + transform: layerdata.calculate_offset_transform(scaled_half_viewport, self.snapped_angle(layerdata)).to_cols_array(), } .into(), ); @@ -68,7 +79,7 @@ impl MessageHandler { self.rotating = true; self.snapping = snap; - layerdata.snap_rotate = snap; + self.snap_rotate = snap; self.mouse_pos = ipp.mouse.position; } EnableSnapping => self.snapping = true, @@ -78,8 +89,8 @@ impl MessageHandler { - layerdata.rotation = layerdata.snapped_angle(); - layerdata.snap_rotate = false; + layerdata.rotation = self.snapped_angle(layerdata); + self.snap_rotate = false; self.translating = false; self.rotating = false; self.zooming = false; @@ -104,11 +115,11 @@ impl MessageHandler