mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-21 20:38:12 +08:00
Fix point nudging to work in document space (#2095)
* Modified Path tool Behaviour * Make the code simpler and more self-descriptive * Make it work for transformed layers --------- Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
co-authored by
Keavon Chambers
parent
f1b0d8fa87
commit
b3a196c0b6
@@ -612,15 +612,24 @@ impl ShapeState {
|
||||
}
|
||||
|
||||
/// Move the selected points by dragging the mouse.
|
||||
pub fn move_selected_points(&self, handle_lengths: Option<OpposingHandleLengths>, document: &DocumentMessageHandler, delta: DVec2, equidistant: bool, responses: &mut VecDeque<Message>) {
|
||||
pub fn move_selected_points(
|
||||
&self,
|
||||
handle_lengths: Option<OpposingHandleLengths>,
|
||||
document: &DocumentMessageHandler,
|
||||
delta: DVec2,
|
||||
equidistant: bool,
|
||||
responses: &mut VecDeque<Message>,
|
||||
in_viewport_space: bool,
|
||||
) {
|
||||
for (&layer, state) in &self.selected_shape_state {
|
||||
let Some(vector_data) = document.network_interface.compute_modified_vector(layer) else {
|
||||
continue;
|
||||
};
|
||||
let Some(vector_data) = document.network_interface.compute_modified_vector(layer) else { continue };
|
||||
|
||||
let opposing_handles = handle_lengths.as_ref().and_then(|handle_lengths| handle_lengths.get(&layer));
|
||||
|
||||
let transform = document.metadata().transform_to_viewport(layer);
|
||||
let delta = transform.inverse().transform_vector2(delta);
|
||||
let transform_to_viewport_space = document.metadata().transform_to_viewport(layer);
|
||||
let transform_to_document_space = document.metadata().transform_to_document(layer);
|
||||
let delta_transform = if in_viewport_space { transform_to_viewport_space } else { transform_to_document_space };
|
||||
let delta = delta_transform.inverse().transform_vector2(delta);
|
||||
|
||||
for &point in state.selected_points.iter() {
|
||||
let handle = match point {
|
||||
@@ -654,7 +663,8 @@ impl ShapeState {
|
||||
let new_relative = if equidistant {
|
||||
-(handle_position - anchor_position)
|
||||
} else {
|
||||
let transform = document.metadata().document_to_viewport.inverse() * transform;
|
||||
// TODO: Is this equivalent to `transform_to_document_space`? If changed, the before and after should be tested.
|
||||
let transform = document.metadata().document_to_viewport.inverse() * transform_to_viewport_space;
|
||||
let Some(other_position) = other.to_manipulator_point().get_position(&vector_data) else {
|
||||
continue;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user