Add rotation to Repeat node

This commit is contained in:
Keavon Chambers
2024-04-20 01:35:40 -07:00
parent 5f4960db9b
commit 72ba4ddfe4
7 changed files with 506 additions and 539 deletions

View File

@@ -2628,11 +2628,12 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
DocumentNodeDefinition {
name: "Repeat",
category: "Vector",
implementation: DocumentNodeImplementation::proto("graphene_core::vector::RepeatNode<_, _>"),
implementation: DocumentNodeImplementation::proto("graphene_core::vector::RepeatNode<_, _, _>"),
inputs: vec![
DocumentInputType::value("Instance", TaggedValue::VectorData(graphene_core::vector::VectorData::empty()), true),
DocumentInputType::value("Direction", TaggedValue::DVec2((100., 0.).into()), false),
DocumentInputType::value("Count", TaggedValue::U32(10), false),
DocumentInputType::value("Direction", TaggedValue::DVec2((100., 100.).into()), false),
DocumentInputType::value("Angle", TaggedValue::F64(0.), false),
DocumentInputType::value("Instances", TaggedValue::U32(5), false),
],
outputs: vec![DocumentOutputType::new("Vector", FrontendGraphDataType::Subpath)],
properties: node_properties::repeat_properties,
@@ -2646,7 +2647,7 @@ fn static_nodes() -> Vec<DocumentNodeDefinition> {
DocumentInputType::value("Instance", TaggedValue::VectorData(graphene_core::vector::VectorData::empty()), true),
DocumentInputType::value("Angle Offset", TaggedValue::F64(0.), false),
DocumentInputType::value("Radius", TaggedValue::F64(5.), false),
DocumentInputType::value("Count", TaggedValue::U32(10), false),
DocumentInputType::value("Instances", TaggedValue::U32(5), false),
],
outputs: vec![DocumentOutputType::new("Vector", FrontendGraphDataType::Subpath)],
properties: node_properties::circular_repeat_properties,

View File

@@ -2289,17 +2289,22 @@ pub fn stroke_properties(document_node: &DocumentNode, node_id: NodeId, _context
pub fn repeat_properties(document_node: &DocumentNode, node_id: NodeId, _context: &mut NodePropertiesContext) -> Vec<LayoutGroup> {
let direction = vec2_widget(document_node, node_id, 1, "Direction", "X", "Y", " px", None, add_blank_assist);
let count = number_widget(document_node, node_id, 2, "Count", NumberInput::default().min(1.), true);
let angle = number_widget(document_node, node_id, 2, "Angle", NumberInput::default().unit("°"), true);
let instances = number_widget(document_node, node_id, 3, "Instances", NumberInput::default().min(1.).is_integer(true), true);
vec![direction, LayoutGroup::Row { widgets: count }]
vec![direction, LayoutGroup::Row { widgets: angle }, LayoutGroup::Row { widgets: instances }]
}
pub fn circular_repeat_properties(document_node: &DocumentNode, node_id: NodeId, _context: &mut NodePropertiesContext) -> Vec<LayoutGroup> {
let angle_offset = number_widget(document_node, node_id, 1, "Angle Offset", NumberInput::default().unit("°"), true);
let radius = number_widget(document_node, node_id, 2, "Radius", NumberInput::default(), true); // TODO: What units?
let count = number_widget(document_node, node_id, 3, "Count", NumberInput::default().min(1.), true);
let instances = number_widget(document_node, node_id, 3, "Instances", NumberInput::default().min(1.).is_integer(true), true);
vec![LayoutGroup::Row { widgets: angle_offset }, LayoutGroup::Row { widgets: radius }, LayoutGroup::Row { widgets: count }]
vec![
LayoutGroup::Row { widgets: angle_offset },
LayoutGroup::Row { widgets: radius },
LayoutGroup::Row { widgets: instances },
]
}
pub fn copy_to_points_properties(document_node: &DocumentNode, node_id: NodeId, _context: &mut NodePropertiesContext) -> Vec<LayoutGroup> {

View File

@@ -116,7 +116,7 @@ impl Fsm for FillToolFsmState {
let hint_data = match self {
FillToolFsmState::Ready => HintData(vec![HintGroup(vec![
HintInfo::mouse(MouseMotion::Lmb, "Fill with Primary"),
HintInfo::keys_and_mouse([Key::Shift], MouseMotion::Lmb, "Fill with Secondary"),
HintInfo::keys([Key::Shift], "Fill with Secondary").prepend_plus(),
])]),
FillToolFsmState::Filling => HintData(vec![HintGroup(vec![HintInfo::mouse(MouseMotion::Rmb, ""), HintInfo::keys([Key::Escape], "Cancel").prepend_slash()])]),
};