Skip to content

Commit f282c82

Browse files
rotteegherTrueDoctor
authored andcommitted
Replace Fill node's "Use Gradient"/"Use Solid" buttons with toggle (#1220)
* Replace Fill node's Use Gradient\Solid Color with radio selector * Code Review Round 1 * Code Review Final Round ?
1 parent 077c497 commit f282c82

File tree

1 file changed

+39
-32
lines changed
  • editor/src/messages/portfolio/document/node_graph/node_graph_message_handler

1 file changed

+39
-32
lines changed

editor/src/messages/portfolio/document/node_graph/node_graph_message_handler/node_properties.rs

+39-32
Original file line numberDiff line numberDiff line change
@@ -310,17 +310,42 @@ fn line_join_widget(document_node: &DocumentNode, node_id: u64, index: usize, na
310310
LayoutGroup::Row { widgets }
311311
}
312312

313-
fn gradient_type_widget(document_node: &DocumentNode, node_id: u64, index: usize, name: &str, blank_assist: bool) -> LayoutGroup {
314-
let mut widgets = start_widgets(document_node, node_id, index, name, FrontendGraphDataType::General, blank_assist);
313+
fn fill_type_widget(document_node: &DocumentNode, node_id: u64, index: usize) -> LayoutGroup {
314+
let mut widgets = start_widgets(document_node, node_id, index, "Fill Type", FrontendGraphDataType::General, true);
315+
if let &NodeInput::Value {
316+
tagged_value: TaggedValue::FillType(fill_type),
317+
exposed: false,
318+
} = &document_node.inputs[index]
319+
{
320+
let entries = vec![
321+
RadioEntryData::new("Solid").on_update(update_value(move |_| TaggedValue::FillType(FillType::Solid), node_id, index)),
322+
RadioEntryData::new("Gradient").on_update(update_value(move |_| TaggedValue::FillType(FillType::Gradient), node_id, index)),
323+
];
324+
325+
widgets.extend_from_slice(&[
326+
WidgetHolder::unrelated_separator(),
327+
RadioInput::new(entries)
328+
.selected_index(match fill_type {
329+
FillType::None | FillType::Solid => 0,
330+
FillType::Gradient => 1,
331+
})
332+
.widget_holder(),
333+
]);
334+
}
335+
LayoutGroup::Row { widgets }
336+
}
337+
338+
fn gradient_type_widget(document_node: &DocumentNode, node_id: u64, index: usize) -> LayoutGroup {
339+
let mut widgets = start_widgets(document_node, node_id, index, "Gradient Type", FrontendGraphDataType::General, true);
315340
if let &NodeInput::Value {
316341
tagged_value: TaggedValue::GradientType(gradient_type),
317342
exposed: false,
318343
} = &document_node.inputs[index]
319344
{
320-
let entries = [("Linear", GradientType::Linear), ("Radial", GradientType::Radial)]
321-
.into_iter()
322-
.map(|(name, val)| RadioEntryData::new(name).on_update(update_value(move |_| TaggedValue::GradientType(val), node_id, index)))
323-
.collect();
345+
let entries = vec![
346+
RadioEntryData::new("Linear").on_update(update_value(move |_| TaggedValue::GradientType(GradientType::Linear), node_id, index)),
347+
RadioEntryData::new("Radial").on_update(update_value(move |_| TaggedValue::GradientType(GradientType::Radial), node_id, index)),
348+
];
324349

325350
widgets.extend_from_slice(&[WidgetHolder::unrelated_separator(), RadioInput::new(entries).selected_index(gradient_type as u32).widget_holder()]);
326351
}
@@ -1544,6 +1569,7 @@ pub fn stroke_properties(document_node: &DocumentNode, node_id: NodeId, _context
15441569
]
15451570
}
15461571

1572+
/// Fill Node Widgets LayoutGroup
15471573
pub fn fill_properties(document_node: &DocumentNode, node_id: NodeId, _context: &mut NodePropertiesContext) -> Vec<LayoutGroup> {
15481574
let fill_type_index = 1;
15491575
let solid_color_index = 2;
@@ -1563,40 +1589,21 @@ pub fn fill_properties(document_node: &DocumentNode, node_id: NodeId, _context:
15631589
let mut widgets = Vec::new();
15641590
let gradient = fill_type == Some(graphene_core::vector::style::FillType::Gradient);
15651591
let solid = fill_type == Some(graphene_core::vector::style::FillType::Solid);
1566-
let empty = fill_type == Some(graphene_core::vector::style::FillType::None);
1567-
if fill_type.is_none() || solid || empty {
1592+
1593+
let fill_type_switch = fill_type_widget(document_node, node_id, fill_type_index);
1594+
widgets.push(fill_type_switch);
1595+
1596+
if fill_type.is_none() || solid {
15681597
let solid_color = color_widget(document_node, node_id, solid_color_index, "Color", ColorInput::default(), true);
15691598
widgets.push(solid_color);
15701599
}
15711600

15721601
if fill_type.is_none() || gradient {
1573-
let gradient_type = gradient_type_widget(document_node, node_id, gradient_type_index, "Gradient Type", true);
1574-
widgets.push(gradient_type);
1602+
let gradient_type_switch = gradient_type_widget(document_node, node_id, gradient_type_index);
1603+
widgets.push(gradient_type_switch);
15751604
gradient_positions(&mut widgets, document_node, "Gradient Positions", node_id, positions_index);
15761605
}
15771606

1578-
if gradient || solid || empty {
1579-
let new_fill_type = if gradient { FillType::Solid } else { FillType::Gradient };
1580-
let switch_button = TextButton::new(if gradient { "Use Solid Color" } else { "Use Gradient" })
1581-
.tooltip(if gradient {
1582-
"Change this fill from a gradient to a solid color, keeping the 0% stop color"
1583-
} else {
1584-
"Change this fill from a solid color to a gradient"
1585-
})
1586-
.on_update(update_value(move |_| TaggedValue::FillType(new_fill_type), node_id, fill_type_index));
1587-
1588-
widgets.push(LayoutGroup::Row {
1589-
widgets: {
1590-
let mut widgets = Vec::new();
1591-
widgets.push(TextLabel::new("").widget_holder());
1592-
add_blank_assist(&mut widgets);
1593-
widgets.push(WidgetHolder::unrelated_separator());
1594-
widgets.push(switch_button.widget_holder());
1595-
widgets
1596-
},
1597-
});
1598-
}
1599-
16001607
widgets
16011608
}
16021609

0 commit comments

Comments
 (0)