Skip to content

Commit

Permalink
Code review
Browse files Browse the repository at this point in the history
  • Loading branch information
0HyperCube committed Mar 9, 2025
1 parent 86826d7 commit f4b4646
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 43 deletions.
36 changes: 15 additions & 21 deletions editor/src/messages/portfolio/document/document_message_handler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -342,34 +342,28 @@ impl MessageHandler<DocumentMessage, DocumentMessageData<'_>> for DocumentMessag
continue;
}
let Some(bounds) = self.metadata().bounding_box_document(layer) else { continue };
let [min, max] = [bounds[0].min(bounds[1]), bounds[0].max(bounds[1])];

let name = self.network_interface.frontend_display_name(&layer.to_node(), &[]);

// Calculate position of the text
let corner_pos = bounds[0].min(bounds[1]);
let corner_pos = if !self.document_ptz.canvas_flipped {
min // Use the top left corner
} else {
DVec2::new(max.x, min.y) // Use the top right corner (appears to be the top left due to flipping)
};

if self.document_ptz.canvas_flipped {
// When canvas is flipped, adjust the position to maintain top-left placement
// First get the width of the artboard
let width = (bounds[1].x - bounds[0].x).abs();
// When canvas is flipped, reverse the flip so the text reads in the same direction
let scale = if !self.document_ptz.canvas_flipped { DVec2::ONE } else { DVec2::new(-1., 1.) };

// Create a transform that puts the text at the true top-left regardless of flip
let transform = self.metadata().document_to_viewport
* DAffine2::from_translation(DVec2::new(corner_pos.x + width, corner_pos.y))
* DAffine2::from_scale(DVec2::splat(self.document_ptz.zoom().recip()))
* DAffine2::from_translation(-DVec2::Y * 4.)
* DAffine2::from_scale(DVec2::new(-1.0, 1.0)); // Counter the flip for the text itself
// Create a transform that puts the text at the true top-left regardless of flip
let transform = self.metadata().document_to_viewport
* DAffine2::from_translation(corner_pos)
* DAffine2::from_scale(DVec2::splat(self.document_ptz.zoom().recip()))
* DAffine2::from_translation(-DVec2::Y * 4.)
* DAffine2::from_scale(scale); // Counter the flip for the text itself

overlay_context.text(&name, COLOR_OVERLAY_GRAY, None, transform, 0., [Pivot::Start, Pivot::End]);
} else {
// Original behavior for non-flipped canvas
let transform = self.metadata().document_to_viewport
* DAffine2::from_translation(corner_pos)
* DAffine2::from_scale(DVec2::splat(self.document_ptz.zoom().recip()))
* DAffine2::from_translation(-DVec2::Y * 4.);

overlay_context.text(&name, COLOR_OVERLAY_GRAY, None, transform, 0., [Pivot::Start, Pivot::End]);
}
overlay_context.text(&name, COLOR_OVERLAY_GRAY, None, transform, 0., [Pivot::Start, Pivot::End]);
}
}
DocumentMessage::DuplicateSelectedLayers => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -396,9 +396,11 @@ impl MessageHandler<NavigationMessage, NavigationMessageData<'_>> for Navigation
..
} => {
let tilt_raw_not_snapped = {
// Compute the angle in document space to counter for any flipping
let viewport_to_document = network_interface.document_metadata().document_to_viewport.inverse();
let half_viewport = ipp.viewport_bounds.size() / 2.;
let start_offset = self.mouse_position - half_viewport;
let end_offset = ipp.mouse.position - half_viewport;
let start_offset = viewport_to_document.transform_vector2(self.mouse_position - half_viewport);
let end_offset = viewport_to_document.transform_vector2(ipp.mouse.position - half_viewport);
let angle = start_offset.angle_to(end_offset);

tilt_raw_not_snapped + angle
Expand Down Expand Up @@ -465,25 +467,8 @@ impl MessageHandler<NavigationMessage, NavigationMessageData<'_>> for Navigation
return;
};

// Calculate document center point before flipping
let document_to_viewport = self.calculate_offset_transform(ipp.viewport_bounds.center(), ptz);
let viewport_center = ipp.viewport_bounds.center();
let document_center = document_to_viewport.inverse().transform_point2(viewport_center);

ptz.canvas_flipped = !ptz.canvas_flipped;

// Calculate the new document-to-viewport transform after flipping
let new_document_to_viewport = self.calculate_offset_transform(viewport_center, ptz);

// Calculate where the center point would be after flipping
let new_document_center = new_document_to_viewport.inverse().transform_point2(viewport_center);

// Calculate the offset needed to keep the same center point
let center_offset = document_center - new_document_center;

// Apply the offset to the pan to maintain the same view center
ptz.pan -= center_offset;

responses.add(DocumentMessage::PTZUpdate);
responses.add(BroadcastEvent::CanvasTransformed);
}
Expand Down Expand Up @@ -544,12 +529,12 @@ impl NavigationMessageHandler {
let tilt = ptz.tilt();
let zoom = ptz.zoom();

let scaled_center = viewport_center / self.snapped_zoom(zoom);
let scale = self.snapped_zoom(zoom);
let scale_vec = if ptz.canvas_flipped { DVec2::new(-scale, scale) } else { DVec2::splat(scale) };
let scaled_center = viewport_center / scale_vec;

// Try to avoid fractional coordinates to reduce anti aliasing.
let scale = self.snapped_zoom(zoom);
let rounded_pan = ((pan + scaled_center) * scale).round() / scale - scaled_center;
let scale_vec = if ptz.canvas_flipped { DVec2::new(-scale, scale) } else { DVec2::splat(scale) };

// TODO: replace with DAffine2::from_scale_angle_translation and fix the errors
let offset_transform = DAffine2::from_translation(scaled_center);
Expand Down

0 comments on commit f4b4646

Please sign in to comment.