Skip to content

Commit e77e348

Browse files
committed
Multiply by document_to_viewport.matrix2.y_axis.length()
1 parent 0b20390 commit e77e348

File tree

2 files changed

+9
-7
lines changed

2 files changed

+9
-7
lines changed

editor/src/messages/portfolio/document/utility_types/transformation.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,8 @@ pub struct Translation {
156156
}
157157

158158
impl Translation {
159-
pub fn to_dvec(self, state: &TransformationState) -> DVec2 {
159+
pub fn to_dvec(self, state: &TransformationState, document: &DocumentMessageHandler) -> DVec2 {
160+
let document_to_viewport = document.metadata().document_to_viewport;
160161
let displacement = if let Some(value) = self.typed_distance {
161162
match self.constraint {
162163
Axis::X => DVec2::X * value,
@@ -170,6 +171,7 @@ impl Translation {
170171
Axis::Y => DVec2::Y * self.dragged_distance.dot(state.constraint_axis(self.constraint).unwrap_or_default()),
171172
}
172173
};
174+
let displacement = displacement * document_to_viewport.matrix2.y_axis.length(); // Values are local to the viewport but scaled so values are relative to the current scale.
173175
if state.is_rounded_to_intervals { displacement.round() } else { displacement }
174176
}
175177

@@ -329,7 +331,7 @@ impl TransformOperation {
329331
pub fn apply_transform_operation(&self, selected: &mut Selected, state: &TransformationState, document: &DocumentMessageHandler) {
330332
if self != &TransformOperation::None {
331333
let mut transformation = match self {
332-
TransformOperation::Grabbing(translation) => DAffine2::from_translation(translation.to_dvec(state)),
334+
TransformOperation::Grabbing(translation) => DAffine2::from_translation(translation.to_dvec(state, document)),
333335
TransformOperation::Rotating(rotation) => DAffine2::from_angle(rotation.to_f64(state.is_rounded_to_intervals)),
334336
TransformOperation::Scaling(scale) => DAffine2::from_scale(scale.to_dvec(state.is_rounded_to_intervals)),
335337
TransformOperation::None => unreachable!(),

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -231,8 +231,7 @@ impl MessageHandler<TransformLayerMessage, TransformLayerMessageContext<'_>> for
231231
match self.transform_operation {
232232
TransformOperation::None => (),
233233
TransformOperation::Grabbing(translation) => {
234-
let translation_local = translation.to_dvec(&self.state);
235-
let translation_viewport = (self.state.local_to_viewport_transform() * document_to_viewport).transform_vector2(translation_local);
234+
let translation_viewport = self.state.local_to_viewport_transform().matrix2 * translation.to_dvec(&self.state, document);
236235
let pivot = document_to_viewport.transform_point2(self.grab_target);
237236
let quad = Quad::from_box([pivot, pivot + translation_viewport]);
238237

@@ -242,7 +241,7 @@ impl MessageHandler<TransformLayerMessage, TransformLayerMessageContext<'_>> for
242241
});
243242

244243
let typed_string = (!self.typing.digits.is_empty() && self.transform_operation.can_begin_typing()).then(|| self.typing.string.clone());
245-
overlay_context.translation_box(document_to_viewport.inverse().transform_vector2(translation_viewport), quad, typed_string);
244+
overlay_context.translation_box(translation_viewport, quad, typed_string);
246245
}
247246
TransformOperation::Scaling(scale) => {
248247
let scale = scale.to_f64(self.state.is_rounded_to_intervals);
@@ -537,8 +536,9 @@ impl MessageHandler<TransformLayerMessage, TransformLayerMessageContext<'_>> for
537536
TransformOperation::Grabbing(translation) => {
538537
let delta_pos = input.mouse.position - self.mouse_position;
539538
let delta_pos = (self.initial_transform * document_to_viewport.inverse()).transform_vector2(delta_pos);
540-
let change = if self.slow { delta_pos / SLOWING_DIVISOR } else { delta_pos };
541-
self.transform_operation = TransformOperation::Grabbing(translation.increment_amount(change));
539+
let delta_viewport = if self.slow { delta_pos / SLOWING_DIVISOR } else { delta_pos };
540+
let delta_scaled = delta_viewport / document_to_viewport.y_axis.length(); // Values are local to the viewport but scaled so values are relative to the current scale.
541+
self.transform_operation = TransformOperation::Grabbing(translation.increment_amount(delta_scaled));
542542
self.transform_operation.apply_transform_operation(&mut selected, &self.state, document);
543543
}
544544
TransformOperation::Rotating(rotation) => {

0 commit comments

Comments
 (0)