@@ -2597,7 +2597,28 @@ pub fn fill_properties(document_node: &DocumentNode, node_id: NodeId, _context:
25972597
25982598 let fill_type_switch = {
25992599 let mut row = vec ! [ TextLabel :: new( "" ) . widget_holder( ) ] ;
2600- add_blank_assist ( & mut row) ;
2600+ match fill {
2601+ Fill :: Solid ( _) | Fill :: None => add_blank_assist ( & mut row) ,
2602+ Fill :: Gradient ( gradient) => {
2603+ let reverse_button = IconButton :: new ( "Reverse" , 24 )
2604+ . tooltip ( "Reverse the gradient color stops" )
2605+ . on_update ( update_value (
2606+ {
2607+ let gradient = gradient. clone ( ) ;
2608+ move |_| {
2609+ let mut gradient = gradient. clone ( ) ;
2610+ gradient. stops = gradient. stops . reversed ( ) ;
2611+ TaggedValue :: Fill ( Fill :: Gradient ( gradient) )
2612+ }
2613+ } ,
2614+ node_id,
2615+ fill_index,
2616+ ) )
2617+ . widget_holder ( ) ;
2618+ row. push ( Separator :: new ( SeparatorType :: Unrelated ) . widget_holder ( ) ) ;
2619+ row. push ( reverse_button) ;
2620+ }
2621+ }
26012622
26022623 let entries = vec ! [
26032624 RadioEntryData :: new( "solid" )
@@ -2619,9 +2640,35 @@ pub fn fill_properties(document_node: &DocumentNode, node_id: NodeId, _context:
26192640 } ;
26202641 widgets. push ( fill_type_switch) ;
26212642
2622- if let Fill :: Gradient ( gradient) = fill {
2643+ if let Fill :: Gradient ( gradient) = fill. clone ( ) {
26232644 let mut row = vec ! [ TextLabel :: new( "" ) . widget_holder( ) ] ;
2624- add_blank_assist ( & mut row) ;
2645+ match gradient. gradient_type {
2646+ GradientType :: Linear => add_blank_assist ( & mut row) ,
2647+ GradientType :: Radial => {
2648+ let orientation = if ( gradient. end . x - gradient. start . x ) . abs ( ) > f64:: EPSILON * 1e6 {
2649+ gradient. end . x > gradient. start . x
2650+ } else {
2651+ ( gradient. start . x + gradient. start . y ) < ( gradient. end . x + gradient. end . y )
2652+ } ;
2653+ let reverse_radial_gradient_button = IconButton :: new ( if orientation { "ReverseRadialGradientToRight" } else { "ReverseRadialGradientToLeft" } , 24 )
2654+ . tooltip ( "Reverse which end the gradient radiates from" )
2655+ . on_update ( update_value (
2656+ {
2657+ let gradient = gradient. clone ( ) ;
2658+ move |_| {
2659+ let mut gradient = gradient. clone ( ) ;
2660+ std:: mem:: swap ( & mut gradient. start , & mut gradient. end ) ;
2661+ TaggedValue :: Fill ( Fill :: Gradient ( gradient) )
2662+ }
2663+ } ,
2664+ node_id,
2665+ fill_index,
2666+ ) )
2667+ . widget_holder ( ) ;
2668+ row. push ( Separator :: new ( SeparatorType :: Unrelated ) . widget_holder ( ) ) ;
2669+ row. push ( reverse_radial_gradient_button) ;
2670+ }
2671+ }
26252672
26262673 let new_gradient1 = gradient. clone ( ) ;
26272674 let new_gradient2 = gradient. clone ( ) ;
0 commit comments