diff --git a/editor/src/messages/tool/common_functionality/shape_editor.rs b/editor/src/messages/tool/common_functionality/shape_editor.rs index f434cdc0..c1d4ebfd 100644 --- a/editor/src/messages/tool/common_functionality/shape_editor.rs +++ b/editor/src/messages/tool/common_functionality/shape_editor.rs @@ -1444,7 +1444,14 @@ impl ShapeState { if select { match selection_change { SelectionChange::Shrink => state.deselect_point(id), - _ => state.select_point(id), + _ => { + // Select only the handles which are of nonzero length + if let Some(handle) = id.as_handle() { + if handle.length(&vector_data) > 0. { + state.select_point(id) + } + } + } } } } diff --git a/editor/src/messages/tool/transform_layer/transform_layer_message_handler.rs b/editor/src/messages/tool/transform_layer/transform_layer_message_handler.rs index b09db5fe..d93d7ad3 100644 --- a/editor/src/messages/tool/transform_layer/transform_layer_message_handler.rs +++ b/editor/src/messages/tool/transform_layer/transform_layer_message_handler.rs @@ -403,9 +403,12 @@ impl MessageHandler> for TransformLayer let handle1_length = handle1.length(&vector_data); let handle2_length = handle2.length(&vector_data); - if (handle1_length == 0. && handle2_length == 0.) || (handle1_length == f64::MAX && handle2_length == f64::MAX) { - selected.original_transforms.clear(); - return; + if (handle1_length == 0. && handle2_length == 0. && !using_select_tool) || (handle1_length == f64::MAX && handle2_length == f64::MAX && !using_select_tool) { + // G should work for this point but not R and S + if matches!(transform_type, TransformType::Rotate | TransformType::Scale) { + selected.original_transforms.clear(); + return; + } } } } else {