Skip to content

Commit ea23ab0

Browse files
YohYamasakiKeavon
authored andcommitted
Sync gradient tool options with layer's gradient
* Sync gradient_type and spread_method from the selected layer's existing gradient to the tool options bar when switching to the gradient tool * Refactor has_gradient_on_selected_layers to reuse a new get_gradient_on_selected_layer helper
1 parent d982683 commit ea23ab0

1 file changed

Lines changed: 22 additions & 2 deletions

File tree

editor/src/messages/tool/tool_messages/gradient_tool.rs

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,22 @@ impl<'a> MessageHandler<ToolMessage, &mut ToolActionMessageContext<'a>> for Grad
129129
self.data.has_selected_gradient = has_gradient;
130130
responses.add(ToolMessage::RefreshToolOptions);
131131
}
132+
133+
// Sync tool options with the selected layer's gradient
134+
if has_gradient && let Some(gradient) = get_gradient_on_selected_layer(&context.document) {
135+
let type_differs = self.options.gradient_type != gradient.gradient_type;
136+
let spread_method_differs = self.options.spread_method != gradient.spread_method;
137+
138+
if type_differs {
139+
self.options.gradient_type = gradient.gradient_type;
140+
}
141+
if spread_method_differs {
142+
self.options.spread_method = gradient.spread_method;
143+
}
144+
if type_differs || spread_method_differs {
145+
responses.add(ToolMessage::RefreshToolOptions);
146+
}
147+
};
132148
}
133149
}
134150
}
@@ -1543,12 +1559,16 @@ fn apply_gradient_update(
15431559
responses.add(ToolMessage::RefreshToolOptions);
15441560
}
15451561

1546-
fn has_gradient_on_selected_layers(document: &DocumentMessageHandler) -> bool {
1562+
fn get_gradient_on_selected_layer(document: &DocumentMessageHandler) -> Option<Gradient> {
15471563
document
15481564
.network_interface
15491565
.selected_nodes()
15501566
.selected_visible_layers(&document.network_interface)
1551-
.any(|layer| get_gradient(layer, &document.network_interface).is_some())
1567+
.find_map(|layer| get_gradient(layer, &document.network_interface))
1568+
}
1569+
1570+
fn has_gradient_on_selected_layers(document: &DocumentMessageHandler) -> bool {
1571+
get_gradient_on_selected_layer(document).is_some()
15521572
}
15531573

15541574
#[inline(always)]

0 commit comments

Comments
 (0)