Skip to content

Commit d29280b

Browse files
committed
Origin Offset
1 parent 9633de5 commit d29280b

File tree

3 files changed

+20
-1
lines changed

3 files changed

+20
-1
lines changed

editor/src/messages/portfolio/document/node_graph/document_node_definitions.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -584,6 +584,7 @@ fn document_node_definitions() -> HashMap<DefinitionIdentifier, DocumentNodeDefi
584584
NodeInput::value(TaggedValue::F64(0.), false),
585585
NodeInput::value(TaggedValue::DVec2(DVec2::ONE), false),
586586
NodeInput::value(TaggedValue::DVec2(DVec2::ZERO), false),
587+
NodeInput::value(TaggedValue::DVec2(DVec2::ZERO), false),
587588
],
588589
..Default::default()
589590
},
@@ -1698,6 +1699,8 @@ fn document_node_definitions() -> HashMap<DefinitionIdentifier, DocumentNodeDefi
16981699
NodeInput::import(concrete!(DVec2), 3),
16991700
// From the Skew import
17001701
NodeInput::import(concrete!(DVec2), 4),
1702+
// From the Origin Offset import
1703+
NodeInput::import(concrete!(DVec2), 5),
17011704
],
17021705
implementation: DocumentNodeImplementation::ProtoNode(transform_nodes::transform::IDENTIFIER),
17031706
..Default::default()

editor/src/messages/portfolio/document_migration.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1095,6 +1095,21 @@ fn migrate_node(node_id: &NodeId, node: &DocumentNode, network_path: &[NodeId],
10951095
document.network_interface.set_input(&InputConnector::node(*node_id, 9), old_inputs[4].clone(), network_path);
10961096
}
10971097

1098+
// Upgrade Transform node to add "Pivot" input
1099+
if reference == DefinitionIdentifier::ProtoNode(graphene_std::transform_nodes::transform::IDENTIFIER) && inputs_count == 5 {
1100+
let mut node_template = resolve_document_node_type(&reference)?.default_node_template();
1101+
let old_inputs = document.network_interface.replace_inputs(node_id, network_path, &mut node_template)?;
1102+
1103+
let pivot_input = NodeInput::value(TaggedValue::DVec2(DVec2::ZERO), false);
1104+
1105+
document.network_interface.set_input(&InputConnector::node(*node_id, 0), old_inputs[0].clone(), network_path);
1106+
document.network_interface.set_input(&InputConnector::node(*node_id, 1), old_inputs[1].clone(), network_path);
1107+
document.network_interface.set_input(&InputConnector::node(*node_id, 2), old_inputs[2].clone(), network_path);
1108+
document.network_interface.set_input(&InputConnector::node(*node_id, 3), old_inputs[3].clone(), network_path);
1109+
document.network_interface.set_input(&InputConnector::node(*node_id, 4), old_inputs[4].clone(), network_path);
1110+
document.network_interface.set_input(&InputConnector::node(*node_id, 5), pivot_input, network_path);
1111+
}
1112+
10981113
// Upgrade the old "Spline" node to the new "Spline" node
10991114
if reference == DefinitionIdentifier::ProtoNode(graphene_std::vector::spline::IDENTIFIER)
11001115
|| reference == DefinitionIdentifier::ProtoNode(ProtoNodeIdentifier::new("graphene_core::vector::generator_nodes::SplineNode"))

node-graph/nodes/transform/src/transform_nodes.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,11 @@ async fn transform<T: ApplyTransform + 'n + 'static>(
2828
rotation: f64,
2929
scale: DVec2,
3030
skew: DVec2,
31+
origin_offset: DVec2,
3132
) -> T {
3233
let trs = DAffine2::from_scale_angle_translation(scale, rotation.to_radians(), translation);
3334
let skew = DAffine2::from_cols_array(&[1., skew.y.to_radians().tan(), skew.x.to_radians().tan(), 1., 0., 0.]);
34-
let matrix = trs * skew;
35+
let matrix = DAffine2::from_translation(origin_offset) * trs * skew * DAffine2::from_translation(-origin_offset);
3536

3637
let footprint = ctx.try_footprint().copied();
3738

0 commit comments

Comments
 (0)