mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2025-07-07 15:55:00 +00:00
fix: select from elsewhere
This commit is contained in:
parent
154ad8bd4b
commit
f976b2d573
2 changed files with 15 additions and 8 deletions
|
@ -181,6 +181,11 @@ impl MessageHandler<ToolMessage, ToolMessageData<'_>> for ToolMessageHandler {
|
|||
send: Box::new(TransformLayerMessage::SelectionChanged.into()),
|
||||
});
|
||||
|
||||
responses.add(BroadcastMessage::SubscribeEvent {
|
||||
on: BroadcastEvent::SelectionChanged,
|
||||
send: Box::new(SelectToolMessage::SyncHistory.into()),
|
||||
});
|
||||
|
||||
self.tool_is_active = true;
|
||||
|
||||
let tool_data = &mut self.tool_state.tool_data;
|
||||
|
|
|
@ -99,6 +99,7 @@ pub enum SelectToolMessage {
|
|||
SetPivot {
|
||||
position: ReferencePoint,
|
||||
},
|
||||
SyncHistory,
|
||||
}
|
||||
|
||||
impl ToolMetadata for SelectTool {
|
||||
|
@ -552,9 +553,10 @@ impl SelectToolData {
|
|||
self.dot.clone()
|
||||
}
|
||||
|
||||
fn sync_history(&mut self) {
|
||||
self.ordered_layers.retain(|layer| self.layers_dragging.contains(layer));
|
||||
self.ordered_layers.extend(self.layers_dragging.iter().find(|&layer| !self.ordered_layers.contains(layer)));
|
||||
fn sync_history(&mut self, document: &DocumentMessageHandler) {
|
||||
let layers: Vec<_> = document.network_interface.selected_nodes().selected_visible_and_unlocked_layers(&document.network_interface).collect();
|
||||
self.ordered_layers.retain(|layer| layers.contains(layer));
|
||||
self.ordered_layers.extend(layers.iter().find(|&layer| !self.ordered_layers.contains(layer)));
|
||||
self.dot.layer = self.ordered_layers.last().map(|x| *x)
|
||||
}
|
||||
}
|
||||
|
@ -1457,7 +1459,6 @@ impl Fsm for SelectToolFsmState {
|
|||
NestedSelectionBehavior::Deepest => {
|
||||
let filtered_selections = filter_nested_selection(document.metadata(), &new_selected);
|
||||
tool_data.layers_dragging.extend(filtered_selections);
|
||||
tool_data.sync_history();
|
||||
}
|
||||
NestedSelectionBehavior::Shallowest => {
|
||||
// Find each new_selected's parent node
|
||||
|
@ -1466,7 +1467,6 @@ impl Fsm for SelectToolFsmState {
|
|||
.map(|layer| layer.ancestors(document.metadata()).filter(not_artboard(document)).last().unwrap_or(layer))
|
||||
.collect();
|
||||
tool_data.layers_dragging.extend(parent_selected.iter().copied());
|
||||
tool_data.sync_history();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1554,6 +1554,11 @@ impl Fsm for SelectToolFsmState {
|
|||
|
||||
self
|
||||
}
|
||||
(_, SelectToolMessage::SyncHistory) => {
|
||||
tool_data.sync_history(&document);
|
||||
|
||||
self
|
||||
}
|
||||
_ => self,
|
||||
}
|
||||
}
|
||||
|
@ -1724,7 +1729,6 @@ fn drag_shallowest_manipulation(responses: &mut VecDeque<Message>, selected: Vec
|
|||
}
|
||||
}
|
||||
|
||||
tool_data.sync_history();
|
||||
responses.add(NodeGraphMessage::SelectedNodesSet {
|
||||
nodes: tool_data
|
||||
.layers_dragging
|
||||
|
@ -1779,10 +1783,8 @@ fn drag_deepest_manipulation(responses: &mut VecDeque<Message>, selected: Vec<La
|
|||
|
||||
if !remove {
|
||||
tool_data.layers_dragging.extend(vec![layer]);
|
||||
tool_data.sync_history();
|
||||
} else {
|
||||
tool_data.layers_dragging.retain(|&selected_layer| layer != selected_layer);
|
||||
tool_data.sync_history();
|
||||
}
|
||||
responses.add(NodeGraphMessage::SelectedNodesSet {
|
||||
nodes: tool_data
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue