@@ -310,17 +310,42 @@ fn line_join_widget(document_node: &DocumentNode, node_id: u64, index: usize, na
310
310
LayoutGroup :: Row { widgets }
311
311
}
312
312
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 ) ;
315
340
if let & NodeInput :: Value {
316
341
tagged_value : TaggedValue :: GradientType ( gradient_type) ,
317
342
exposed : false ,
318
343
} = & document_node. inputs [ index]
319
344
{
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
+ ] ;
324
349
325
350
widgets. extend_from_slice ( & [ WidgetHolder :: unrelated_separator ( ) , RadioInput :: new ( entries) . selected_index ( gradient_type as u32 ) . widget_holder ( ) ] ) ;
326
351
}
@@ -1544,6 +1569,7 @@ pub fn stroke_properties(document_node: &DocumentNode, node_id: NodeId, _context
1544
1569
]
1545
1570
}
1546
1571
1572
+ /// Fill Node Widgets LayoutGroup
1547
1573
pub fn fill_properties ( document_node : & DocumentNode , node_id : NodeId , _context : & mut NodePropertiesContext ) -> Vec < LayoutGroup > {
1548
1574
let fill_type_index = 1 ;
1549
1575
let solid_color_index = 2 ;
@@ -1563,40 +1589,21 @@ pub fn fill_properties(document_node: &DocumentNode, node_id: NodeId, _context:
1563
1589
let mut widgets = Vec :: new ( ) ;
1564
1590
let gradient = fill_type == Some ( graphene_core:: vector:: style:: FillType :: Gradient ) ;
1565
1591
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 {
1568
1597
let solid_color = color_widget ( document_node, node_id, solid_color_index, "Color" , ColorInput :: default ( ) , true ) ;
1569
1598
widgets. push ( solid_color) ;
1570
1599
}
1571
1600
1572
1601
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 ) ;
1575
1604
gradient_positions ( & mut widgets, document_node, "Gradient Positions" , node_id, positions_index) ;
1576
1605
}
1577
1606
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
-
1600
1607
widgets
1601
1608
}
1602
1609
0 commit comments