Use correct position to calculate edge dragging. (https://github.com/enso-org/ide/pull/575)

Original commit: c1f703e045
This commit is contained in:
Michael Mauderer 2020-06-19 14:05:42 +02:00 committed by GitHub
parent e9e9feda1c
commit e759b267be
2 changed files with 14 additions and 2 deletions

View File

@ -933,6 +933,12 @@ impl SceneData {
self.context.viewport(0,0,canvas.width as i32, canvas.height as i32); self.context.viewport(0,0,canvas.width as i32, canvas.height as i32);
}); });
} }
pub fn screen_to_scene_coordinates(&self, position:Vector3<f32>) -> Vector3<f32> {
let position = position / self.camera().zoom();
let position = Vector4::new(position.x, position.y, position.z, 1.0);
(self.camera().inversed_view_matrix() * position).xyz()
}
} }
impl display::Object for SceneData { impl display::Object for SceneData {

View File

@ -1501,6 +1501,12 @@ fn new_graph_editor(world:&World) -> GraphEditor {
let outputs = UnsealedFrpOutputs::new(); let outputs = UnsealedFrpOutputs::new();
let sealed_outputs = outputs.seal(); // Done here to keep right eval order. let sealed_outputs = outputs.seal(); // Done here to keep right eval order.
// === Mouse Cursor Transform ===
frp::extend! { network
cursor_pos_in_scene <- cursor.frp.position.map(f!((position) {
scene.screen_to_scene_coordinates(*position).xy()
}));
}
// === Selection Target Redirection === // === Selection Target Redirection ===
frp::extend! { network frp::extend! { network
@ -1842,8 +1848,8 @@ fn new_graph_editor(world:&World) -> GraphEditor {
// === Move Edges === // === Move Edges ===
detached_edge <- any(&inputs.some_edge_targets_detached,&inputs.some_edge_sources_detached); detached_edge <- any(&inputs.some_edge_targets_detached,&inputs.some_edge_sources_detached);
cursor_pos_on_detach <- cursor.frp.position.sample(&detached_edge); cursor_pos_on_detach <- cursor_pos_in_scene.sample(&detached_edge);
edge_refresh_cursor_pos <- any (cursor_pos_on_detach,cursor.frp.position); edge_refresh_cursor_pos <- any (cursor_pos_on_detach,cursor_pos_in_scene);
is_hovering_output <- inputs.hover_node_output.map(|target| target.is_some()); is_hovering_output <- inputs.hover_node_output.map(|target| target.is_some());
hover_node <- inputs.hover_node_output.unwrap(); hover_node <- inputs.hover_node_output.unwrap();