mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2025-08-19 04:30:16 +00:00
Remove snap rotate from layerdata (#435)
This commit is contained in:
parent
4c74462be0
commit
3811c78b70
3 changed files with 20 additions and 21 deletions
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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<Message>) {
|
||||
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<MovementMessage, (&mut LayerData, &Document, &InputPreproces
|
|||
RotateCanvasBegin { snap } => {
|
||||
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<MovementMessage, (&mut LayerData, &Document, &InputPreproces
|
|||
self.mouse_pos = ipp.mouse.position;
|
||||
}
|
||||
TransformCanvasEnd => {
|
||||
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<MovementMessage, (&mut LayerData, &Document, &InputPreproces
|
|||
let snapping = self.snapping;
|
||||
|
||||
layerdata.rotation += rotation;
|
||||
layerdata.snap_rotate = snapping;
|
||||
self.snap_rotate = snapping;
|
||||
responses.push_back(ToolMessage::SelectedLayersChanged.into());
|
||||
responses.push_back(
|
||||
FrontendMessage::SetCanvasRotation {
|
||||
new_radians: layerdata.snapped_angle(),
|
||||
new_radians: self.snapped_angle(layerdata),
|
||||
}
|
||||
.into(),
|
||||
);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue