add: move pivot on nudge

This commit is contained in:
mtvare6 2025-07-07 16:32:01 +05:30
parent af8508af5c
commit e4c9c0d713
3 changed files with 12 additions and 3 deletions

View file

@ -750,6 +750,7 @@ impl MessageHandler<DocumentMessage, DocumentMessageData<'_>> for DocumentMessag
// Nudge translation without resizing
if !resize {
let transform = DAffine2::from_translation(DVec2::from_angle(-self.document_ptz.tilt()).rotate(DVec2::new(delta_x, delta_y)));
responses.add(SelectToolMessage::ShiftSelectedNodes { offset: transform.translation });
for layer in self.network_interface.shallowest_unique_layers(&[]).filter(|layer| can_move(*layer)) {
responses.add(GraphOperationMessage::TransformChange {

View file

@ -198,7 +198,7 @@ pub struct FrontendClickTargets {
pub modify_import_export: Vec<String>,
}
#[derive(Clone, Debug, PartialEq, serde::Serialize, serde::Deserialize, specta::Type)]
#[derive(Clone, Copy, Debug, PartialEq, serde::Serialize, serde::Deserialize, specta::Type)]
pub enum Direction {
Up,
Down,

View file

@ -100,6 +100,9 @@ pub enum SelectToolMessage {
position: ReferencePoint,
},
SyncHistory,
ShiftSelectedNodes {
offset: DVec2,
},
}
impl ToolMetadata for SelectTool {
@ -570,7 +573,6 @@ impl Fsm for SelectToolFsmState {
let ToolActionHandlerData { document, input, font_cache, .. } = tool_action_data;
let ToolMessage::Select(event) = event else { return self };
debug!("{:?}", event);
match (self, event) {
(_, SelectToolMessage::Overlays(mut overlay_context)) => {
tool_data.snap_manager.draw_overlays(SnapData::new(document, input), &mut overlay_context);
@ -819,7 +821,6 @@ impl Fsm for SelectToolFsmState {
overlay_context.dowel_pin(origin, origin_angle, Some(COLOR_OVERLAY_YELLOW));
}
debug!("{:?}", tool_data.dot_start);
let has_layers = document.network_interface.selected_nodes().has_selected_nodes();
let draw_pivot = tool_data.dot.state.is_pivot() && overlay_context.visibility_settings.pivot() && has_layers;
tool_data.dot.pivot.recalculate_pivot(document);
@ -1580,6 +1581,13 @@ impl Fsm for SelectToolFsmState {
self
}
(_, SelectToolMessage::ShiftSelectedNodes { offset }) => {
if tool_data.dot.pivot_disconnected() {
tool_data.dot.pivot.pivot.as_mut().map(|v| *v += offset);
}
self
}
_ => self,
}
}