From f8d748c07b59c7e23265c9dd9f5ee30b1a803dac Mon Sep 17 00:00:00 2001 From: TrueDoctor Date: Thu, 27 Jan 2022 18:49:49 +0100 Subject: [PATCH] Simplify point storage for pen tool (#500) Store points as vectors instead of representing them as transforms to avoid confusion and improve efficiency --- editor/src/viewport_tools/tools/pen.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/editor/src/viewport_tools/tools/pen.rs b/editor/src/viewport_tools/tools/pen.rs index 08d272e6..336b4626 100644 --- a/editor/src/viewport_tools/tools/pen.rs +++ b/editor/src/viewport_tools/tools/pen.rs @@ -11,7 +11,7 @@ use crate::viewport_tools::tool_options::ToolOptions; use graphene::layers::style; use graphene::Operation; -use glam::DAffine2; +use glam::{DAffine2, DVec2}; use serde::{Deserialize, Serialize}; #[derive(Default)] @@ -80,8 +80,8 @@ impl Default for PenToolFsmState { } #[derive(Clone, Debug, Default)] struct PenToolData { - points: Vec, - next_point: DAffine2, + points: Vec, + next_point: DVec2, weight: u32, path: Option>, layer_exists: bool, @@ -116,7 +116,7 @@ impl Fsm for PenToolFsmState { data.snap_handler.start_snap(document, document.visible_layers()); let snapped_position = data.snap_handler.snap_position(responses, input.viewport_bounds.size(), document, input.mouse.position); - let pos = transform.inverse() * DAffine2::from_translation(snapped_position); + let pos = transform.inverse().transform_point2(snapped_position); data.points.push(pos); data.next_point = pos; @@ -132,7 +132,7 @@ impl Fsm for PenToolFsmState { } (Drawing, DragStop) => { let snapped_position = data.snap_handler.snap_position(responses, input.viewport_bounds.size(), document, input.mouse.position); - let pos = transform.inverse() * DAffine2::from_translation(snapped_position); + let pos = transform.inverse().transform_point2(snapped_position); // TODO: introduce comparison threshold when operating with canvas coordinates (https://github.com/GraphiteEditor/Graphite/issues/100) if data.points.last() != Some(&pos) { @@ -147,7 +147,7 @@ impl Fsm for PenToolFsmState { } (Drawing, PointerMove) => { let snapped_position = data.snap_handler.snap_position(responses, input.viewport_bounds.size(), document, input.mouse.position); - let pos = transform.inverse() * DAffine2::from_translation(snapped_position); + let pos = transform.inverse().transform_point2(snapped_position); data.next_point = pos; responses.push_back(remove_preview(data)); @@ -215,9 +215,9 @@ fn remove_preview(data: &PenToolData) -> Message { } fn make_operation(data: &PenToolData, tool_data: &DocumentToolData, show_preview: bool) -> Message { - let mut points: Vec<(f64, f64)> = data.points.iter().map(|p| (p.translation.x, p.translation.y)).collect(); + let mut points: Vec<(f64, f64)> = data.points.iter().map(|p| (p.x, p.y)).collect(); if show_preview { - points.push((data.next_point.translation.x, data.next_point.translation.y)) + points.push((data.next_point.x, data.next_point.y)) } Operation::AddPen {