Skip to content

Commit 9cb7fa7

Browse files
0SlowPoke0Keavon
authored andcommitted
code-review changes
1 parent 139bbdd commit 9cb7fa7

File tree

1 file changed

+63
-94
lines changed

1 file changed

+63
-94
lines changed

editor/src/messages/tool/transform_layer/transform_layer_message_handler.rs

+63-94
Original file line numberDiff line numberDiff line change
@@ -76,25 +76,18 @@ impl MessageHandler<TransformLayerMessage, TransformData<'_>> for TransformLayer
7676
let viewspace = document.metadata().transform_to_viewport(selected_layers[0]);
7777

7878
let mut point_count: usize = 0;
79-
let get_location = |point: &ManipulatorPointId| point.get_position(&vector_data).map(|position| viewspace.transform_point2(position));
79+
let get_location = |point: &&ManipulatorPointId| point.get_position(&vector_data).map(|position| viewspace.transform_point2(position));
8080
let points = shape_editor.selected_points();
8181
let selected_points: Vec<&ManipulatorPointId> = points.collect();
8282

8383
if selected_points.len() == 1 {
84-
if let Some(point) = selected_points.first() {
85-
match point {
86-
ManipulatorPointId::PrimaryHandle(_) | ManipulatorPointId::EndHandle(_) => {
87-
if let Some(anchor_position) = point.get_anchor_position(&vector_data) {
88-
*selected.pivot = viewspace.transform_point2(anchor_position);
89-
}
90-
}
91-
_ => {
92-
*selected.pivot = selected_points.iter().filter_map(|point| get_location(point)).inspect(|_| point_count += 1).sum::<DVec2>() / point_count as f64;
93-
}
94-
}
84+
let point = &selected_points[0];
85+
if let ManipulatorPointId::PrimaryHandle(_) | ManipulatorPointId::EndHandle(_) = point {
86+
let anchor_position = point.get_anchor_position(&vector_data).unwrap();
87+
*selected.pivot = viewspace.transform_point2(anchor_position);
88+
} else {
89+
*selected.pivot = selected_points.iter().filter_map(get_location).inspect(|_| point_count += 1).sum::<DVec2>() / point_count as f64;
9590
}
96-
} else {
97-
*selected.pivot = selected_points.iter().filter_map(|point| get_location(point)).inspect(|_| point_count += 1).sum::<DVec2>() / point_count as f64;
9891
}
9992
}
10093
} else {
@@ -121,23 +114,13 @@ impl MessageHandler<TransformLayerMessage, TransformData<'_>> for TransformLayer
121114
responses.add(NodeGraphMessage::RunDocumentGraph);
122115
}
123116
TransformLayerMessage::BeginGrab => {
124-
if !(using_path_tool || using_select_tool) {
125-
return;
126-
}
127-
let points = shape_editor.selected_points();
128-
let selected_points: Vec<&ManipulatorPointId> = points.collect();
129-
130-
if using_path_tool && selected_points.is_empty() {
131-
responses.add(TransformLayerMessage::CancelTransformOperation);
132-
return;
133-
}
134-
135-
if let TransformOperation::Grabbing(_) = self.transform_operation {
136-
return;
137-
}
117+
if !(using_path_tool || using_select_tool)
118+
|| (using_path_tool && shape_editor.selected_points().next().is_none())
119+
|| matches!(self.transform_operation, TransformOperation::Grabbing(_))
120+
|| selected_layers.is_empty()
121+
{
122+
selected.original_transforms.clear();
138123

139-
// Don't allow grab with no selected layers
140-
if selected_layers.is_empty() {
141124
return;
142125
}
143126

@@ -148,62 +131,46 @@ impl MessageHandler<TransformLayerMessage, TransformData<'_>> for TransformLayer
148131
selected.original_transforms.clear();
149132
}
150133
TransformLayerMessage::BeginRotate => {
151-
if !(using_path_tool || using_select_tool) {
134+
let selected_points: Vec<&ManipulatorPointId> = shape_editor.selected_points().collect();
135+
if !(using_path_tool || using_select_tool)
136+
|| (using_path_tool && selected_points.is_empty())
137+
|| selected_layers.is_empty()
138+
|| matches!(self.transform_operation, TransformOperation::Rotating(_))
139+
{
140+
selected.original_transforms.clear();
152141
return;
153142
}
154-
let Some(&layer) = selected_layers.first() else {
155-
return;
156-
};
157-
let Some(vector_data) = document.network_interface.compute_modified_vector(layer) else {
158-
return;
159-
};
160-
let points = shape_editor.selected_points();
161-
let selected_points: Vec<&ManipulatorPointId> = points.collect();
162143

163-
if using_path_tool && selected_points.is_empty() {
164-
responses.add(TransformLayerMessage::CancelTransformOperation);
165-
return;
166-
}
144+
if let Some(vector_data) = selected_layers.first().and_then(|&layer| document.network_interface.compute_modified_vector(layer)) {
145+
if selected_points.len() == 1 {
146+
let point = &selected_points[0];
167147

168-
if selected_points.len() == 1 {
169-
if let Some(point) = selected_points.first() {
170148
match point {
171149
ManipulatorPointId::Anchor(_) => {
172150
if let Some([handle1, handle2]) = point.get_handle_pair(&vector_data) {
173-
if (handle1.get_handle_length(&vector_data) == 0.0 && handle2.get_handle_length(&vector_data) == 0.0)
151+
if (handle1.get_handle_length(&vector_data) == 0. && handle2.get_handle_length(&vector_data) == 0.)
174152
|| (handle1.get_handle_length(&vector_data) == f64::MAX && handle2.get_handle_length(&vector_data) == f64::MAX)
175153
{
176-
self.transform_operation = TransformOperation::None;
177-
178-
responses.add(TransformLayerMessage::CancelTransformOperation);
179154
return;
180155
}
181156
}
182157
}
183158
_ => {
184-
let handle_position = point.get_position(&vector_data);
185-
let anchor_position = point.get_anchor_position(&vector_data);
159+
// TODO: Need to fix handle snap to anchor issue. SEE (https://discord.com/channels/731730685944922173/1217752903209713715).
186160

187-
if let (Some(handle_pos), Some(anchor_pos)) = (handle_position, anchor_position) {
188-
// Calculate the distance between the handle and anchor
189-
let distance = (handle_pos - anchor_pos).length();
161+
let handle_length = point.as_handle().and_then(|handle| Some(handle.get_handle_length(&vector_data)));
190162

191-
// If the distance is zero, return early
192-
if distance == 0.0 {
163+
if let Some(length) = handle_length {
164+
if length == 0. {
165+
selected.original_transforms.clear();
193166
return;
194167
}
195168
}
196169
}
197170
}
198171
}
199-
}
200-
201-
if let TransformOperation::Rotating(_) = self.transform_operation {
202-
return;
203-
}
204-
205-
// Don't allow rotate with no selected layers
206-
if selected_layers.is_empty() {
172+
} else {
173+
selected.original_transforms.clear();
207174
return;
208175
}
209176

@@ -214,45 +181,47 @@ impl MessageHandler<TransformLayerMessage, TransformData<'_>> for TransformLayer
214181
selected.original_transforms.clear();
215182
}
216183
TransformLayerMessage::BeginScale => {
217-
if !(using_path_tool || using_select_tool) {
184+
let selected_points: Vec<&ManipulatorPointId> = shape_editor.selected_points().collect();
185+
186+
if (using_path_tool && selected_points.is_empty())
187+
|| !(using_path_tool || using_select_tool)
188+
|| matches!(self.transform_operation, TransformOperation::Scaling(_))
189+
|| selected_layers.is_empty()
190+
{
191+
selected.original_transforms.clear();
218192
return;
219193
}
220-
let Some(&layer) = selected_layers.first() else {
221-
return;
222-
};
223-
let Some(vector_data) = document.network_interface.compute_modified_vector(layer) else {
224-
return;
225-
};
226194

227-
let points = shape_editor.selected_points();
228-
let selected_points: Vec<&ManipulatorPointId> = points.collect();
195+
if let Some(vector_data) = selected_layers.first().and_then(|&layer| document.network_interface.compute_modified_vector(layer)) {
196+
if selected_points.len() == 1 {
197+
let point = &selected_points[0];
229198

230-
if using_path_tool && selected_points.is_empty() {
231-
responses.add(TransformLayerMessage::CancelTransformOperation);
232-
return;
233-
}
199+
match point {
200+
ManipulatorPointId::Anchor(_) => {
201+
if let Some([handle1, handle2]) = point.get_handle_pair(&vector_data) {
202+
let handle1_length = handle1.get_handle_length(&vector_data);
203+
let handle2_length = handle2.get_handle_length(&vector_data);
234204

235-
if selected_points.len() == 1 {
236-
if let Some(point) = selected_points.first() {
237-
if let ManipulatorPointId::Anchor(_) = point {
238-
if let Some([handle1, handle2]) = point.get_handle_pair(&vector_data) {
239-
if (handle1.get_handle_length(&vector_data) == 0.0 && handle2.get_handle_length(&vector_data) == 0.0)
240-
|| (handle1.get_handle_length(&vector_data) == f64::MAX && handle2.get_handle_length(&vector_data) == f64::MAX)
241-
{
242-
responses.add(TransformLayerMessage::CancelTransformOperation);
243-
return;
205+
if (handle1_length == 0. && handle2_length == 0.) || (handle1_length == f64::MAX && handle2_length == f64::MAX) {
206+
selected.original_transforms.clear();
207+
return;
208+
}
209+
}
210+
}
211+
_ => {
212+
let handle_length = point.as_handle().and_then(|handle| Some(handle.get_handle_length(&vector_data)));
213+
214+
if let Some(length) = handle_length {
215+
if length == 0. {
216+
selected.original_transforms.clear();
217+
return;
218+
}
244219
}
245220
}
246221
}
247222
}
248-
}
249-
250-
if let TransformOperation::Scaling(_) = self.transform_operation {
251-
return;
252-
}
253-
254-
// Don't allow scale with no selected layers
255-
if selected_layers.is_empty() {
223+
} else {
224+
selected.original_transforms.clear();
256225
return;
257226
}
258227

0 commit comments

Comments
 (0)