Skip to content

Commit 9d77f2d

Browse files
authored
Merge branch 'master' into filtered_nodes
2 parents 65d621e + f299497 commit 9d77f2d

File tree

27 files changed

+620
-142
lines changed

27 files changed

+620
-142
lines changed

editor/src/messages/input_mapper/input_mapper_message.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,6 @@ pub enum InputMapperMessage {
1919

2020
// Messages
2121
PointerMove,
22+
PointerShake,
2223
WheelScroll,
2324
}

editor/src/messages/input_mapper/input_mappings.rs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,15 @@ pub fn input_mappings() -> Mapping {
5454
entry!(KeyDown(KeyZ); modifiers=[Accel, MouseLeft], action_dispatch=DocumentMessage::Noop),
5555
//
5656
// NodeGraphMessage
57-
entry!(KeyDown(MouseLeft); action_dispatch=NodeGraphMessage::PointerDown {shift_click: false, control_click: false, alt_click: false, right_click: false}),
58-
entry!(KeyDown(MouseLeft); modifiers=[Shift], action_dispatch=NodeGraphMessage::PointerDown {shift_click: true, control_click: false, alt_click: false, right_click: false}),
59-
entry!(KeyDown(MouseLeft); modifiers=[Accel], action_dispatch=NodeGraphMessage::PointerDown {shift_click: false, control_click: true, alt_click: false, right_click: false}),
60-
entry!(KeyDown(MouseLeft); modifiers=[Shift, Accel], action_dispatch=NodeGraphMessage::PointerDown {shift_click: true, control_click: true, alt_click: false, right_click: false}),
61-
entry!(KeyDown(MouseLeft); modifiers=[Alt], action_dispatch=NodeGraphMessage::PointerDown {shift_click: false, control_click: false, alt_click: true, right_click: false}),
62-
entry!(KeyDown(MouseRight); action_dispatch=NodeGraphMessage::PointerDown {shift_click: false, control_click: false, alt_click: false, right_click: true}),
57+
entry!(KeyDown(MouseLeft); action_dispatch=NodeGraphMessage::PointerDown { shift_click: false, control_click: false, alt_click: false, right_click: false }),
58+
entry!(KeyDown(MouseLeft); modifiers=[Shift], action_dispatch=NodeGraphMessage::PointerDown { shift_click: true, control_click: false, alt_click: false, right_click: false }),
59+
entry!(KeyDown(MouseLeft); modifiers=[Accel], action_dispatch=NodeGraphMessage::PointerDown { shift_click: false, control_click: true, alt_click: false, right_click: false }),
60+
entry!(KeyDown(MouseLeft); modifiers=[Shift, Accel], action_dispatch=NodeGraphMessage::PointerDown { shift_click: true, control_click: true, alt_click: false, right_click: false }),
61+
entry!(KeyDown(MouseLeft); modifiers=[Alt], action_dispatch=NodeGraphMessage::PointerDown { shift_click: false, control_click: false, alt_click: true, right_click: false }),
62+
entry!(KeyDown(MouseRight); action_dispatch=NodeGraphMessage::PointerDown { shift_click: false, control_click: false, alt_click: false, right_click: true }),
6363
entry!(DoubleClick(MouseButton::Left); action_dispatch=NodeGraphMessage::EnterNestedNetwork),
64-
entry!(PointerMove; refresh_keys=[Shift], action_dispatch=NodeGraphMessage::PointerMove {shift: Shift}),
64+
entry!(PointerMove; refresh_keys=[Shift], action_dispatch=NodeGraphMessage::PointerMove { shift: Shift }),
65+
entry!(PointerShake; action_dispatch=NodeGraphMessage::ShakeNode),
6566
entry!(KeyUp(MouseLeft); action_dispatch=NodeGraphMessage::PointerUp),
6667
entry!(KeyDown(Delete); modifiers=[Accel], action_dispatch=NodeGraphMessage::DeleteSelectedNodes { delete_children: false }),
6768
entry!(KeyDown(Backspace); modifiers=[Accel], action_dispatch=NodeGraphMessage::DeleteSelectedNodes { delete_children: false }),
@@ -417,7 +418,7 @@ pub fn input_mappings() -> Mapping {
417418
entry!(KeyDown(Tab); modifiers=[Control], action_dispatch=PortfolioMessage::NextDocument),
418419
entry!(KeyDown(Tab); modifiers=[Control, Shift], action_dispatch=PortfolioMessage::PrevDocument),
419420
entry!(KeyDown(KeyW); modifiers=[Accel], action_dispatch=PortfolioMessage::CloseActiveDocumentWithConfirmation),
420-
entry!(KeyDown(KeyW); modifiers=[Accel,Alt], action_dispatch=PortfolioMessage::CloseAllDocumentsWithConfirmation),
421+
entry!(KeyDown(KeyW); modifiers=[Accel, Alt], action_dispatch=PortfolioMessage::CloseAllDocumentsWithConfirmation),
421422
entry!(KeyDown(KeyO); modifiers=[Accel], action_dispatch=PortfolioMessage::OpenDocument),
422423
entry!(KeyDown(KeyI); modifiers=[Accel], action_dispatch=PortfolioMessage::Import),
423424
entry!(KeyDown(KeyX); modifiers=[Accel], action_dispatch=PortfolioMessage::Cut { clipboard: Clipboard::Device }),
@@ -440,7 +441,7 @@ pub fn input_mappings() -> Mapping {
440441
entry!(KeyDown(Space); modifiers=[Shift], action_dispatch=AnimationMessage::ToggleLivePreview),
441442
entry!(KeyDown(Home); modifiers=[Shift], action_dispatch=AnimationMessage::RestartAnimation),
442443
];
443-
let (mut key_up, mut key_down, mut key_up_no_repeat, mut key_down_no_repeat, mut double_click, mut wheel_scroll, mut pointer_move) = mappings;
444+
let (mut key_up, mut key_down, mut key_up_no_repeat, mut key_down_no_repeat, mut double_click, mut wheel_scroll, mut pointer_move, mut pointer_shake) = mappings;
444445

445446
let sort = |list: &mut KeyMappingEntries| list.0.sort_by(|a, b| b.modifiers.count_ones().cmp(&a.modifiers.count_ones()));
446447
// Sort the sublists of `key_up`, `key_down`, `key_up_no_repeat`, and `key_down_no_repeat`
@@ -457,6 +458,8 @@ pub fn input_mappings() -> Mapping {
457458
sort(&mut wheel_scroll);
458459
// Sort `pointer_move`
459460
sort(&mut pointer_move);
461+
// Sort `pointer_shake`
462+
sort(&mut pointer_shake);
460463

461464
Mapping {
462465
key_up,
@@ -466,6 +469,7 @@ pub fn input_mappings() -> Mapping {
466469
double_click,
467470
wheel_scroll,
468471
pointer_move,
472+
pointer_shake,
469473
}
470474
}
471475

editor/src/messages/input_mapper/utility_types/macros.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ macro_rules! mapping {
9090
let mut double_click = KeyMappingEntries::mouse_buttons_arrays();
9191
let mut wheel_scroll = KeyMappingEntries::new();
9292
let mut pointer_move = KeyMappingEntries::new();
93+
let mut pointer_shake = KeyMappingEntries::new();
9394

9495
$(
9596
// Each of the many entry slices, one specified per action
@@ -104,14 +105,15 @@ macro_rules! mapping {
104105
InputMapperMessage::DoubleClick(key) => &mut double_click[key as usize],
105106
InputMapperMessage::WheelScroll => &mut wheel_scroll,
106107
InputMapperMessage::PointerMove => &mut pointer_move,
108+
InputMapperMessage::PointerShake => &mut pointer_shake,
107109
};
108110
// Push each entry to the corresponding `KeyMappingEntries` list for its input type
109111
corresponding_list.push(entry.clone());
110112
}
111113
}
112114
)*
113115

114-
(key_up, key_down, key_up_no_repeat, key_down_no_repeat, double_click, wheel_scroll, pointer_move)
116+
(key_up, key_down, key_up_no_repeat, key_down_no_repeat, double_click, wheel_scroll, pointer_move, pointer_shake)
115117
}};
116118
}
117119

editor/src/messages/input_mapper/utility_types/misc.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ pub struct Mapping {
1414
pub double_click: [KeyMappingEntries; NUMBER_OF_MOUSE_BUTTONS],
1515
pub wheel_scroll: KeyMappingEntries,
1616
pub pointer_move: KeyMappingEntries,
17+
pub pointer_shake: KeyMappingEntries,
1718
}
1819

1920
impl Default for Mapping {
@@ -47,6 +48,7 @@ impl Mapping {
4748
InputMapperMessage::DoubleClick(key) => &self.double_click[*key as usize],
4849
InputMapperMessage::WheelScroll => &self.wheel_scroll,
4950
InputMapperMessage::PointerMove => &self.pointer_move,
51+
InputMapperMessage::PointerShake => &self.pointer_shake,
5052
}
5153
}
5254

@@ -59,6 +61,7 @@ impl Mapping {
5961
InputMapperMessage::DoubleClick(key) => &mut self.double_click[*key as usize],
6062
InputMapperMessage::WheelScroll => &mut self.wheel_scroll,
6163
InputMapperMessage::PointerMove => &mut self.pointer_move,
64+
InputMapperMessage::PointerShake => &mut self.pointer_shake,
6265
}
6366
}
6467
}

editor/src/messages/input_preprocessor/input_preprocessor_message.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ pub enum InputPreprocessorMessage {
1212
PointerDown { editor_mouse_state: EditorMouseState, modifier_keys: ModifierKeys },
1313
PointerMove { editor_mouse_state: EditorMouseState, modifier_keys: ModifierKeys },
1414
PointerUp { editor_mouse_state: EditorMouseState, modifier_keys: ModifierKeys },
15+
PointerShake { editor_mouse_state: EditorMouseState, modifier_keys: ModifierKeys },
1516
CurrentTime { timestamp: u64 },
1617
WheelScroll { editor_mouse_state: EditorMouseState, modifier_keys: ModifierKeys },
1718
}

editor/src/messages/input_preprocessor/input_preprocessor_message_handler.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,14 @@ impl MessageHandler<InputPreprocessorMessage, InputPreprocessorMessageContext> f
9797

9898
self.translate_mouse_event(mouse_state, false, responses);
9999
}
100+
InputPreprocessorMessage::PointerShake { editor_mouse_state, modifier_keys } => {
101+
self.update_states_of_modifier_keys(modifier_keys, keyboard_platform, responses);
102+
103+
let mouse_state = editor_mouse_state.to_mouse_state(&self.viewport_bounds);
104+
self.mouse.position = mouse_state.position;
105+
106+
responses.add(InputMapperMessage::PointerShake);
107+
}
100108
InputPreprocessorMessage::CurrentTime { timestamp } => {
101109
responses.add(AnimationMessage::SetTime { time: timestamp as f64 });
102110
self.time = timestamp;

editor/src/messages/portfolio/document/document_message_handler.rs

Lines changed: 7 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -182,20 +182,13 @@ impl MessageHandler<DocumentMessage, DocumentMessageContext<'_>> for DocumentMes
182182
device_pixel_ratio,
183183
} = context;
184184

185-
let selected_nodes_bounding_box_viewport = self.network_interface.selected_nodes_bounding_box_viewport(&self.breadcrumb_network_path);
186-
let selected_visible_layers_bounding_box_viewport = self.selected_visible_layers_bounding_box_viewport();
187185
match message {
188186
// Sub-messages
189187
DocumentMessage::Navigation(message) => {
190188
let context = NavigationMessageContext {
191189
network_interface: &mut self.network_interface,
192190
breadcrumb_network_path: &self.breadcrumb_network_path,
193191
ipp,
194-
selection_bounds: if self.graph_view_overlay_open {
195-
selected_nodes_bounding_box_viewport
196-
} else {
197-
selected_visible_layers_bounding_box_viewport
198-
},
199192
document_ptz: &mut self.document_ptz,
200193
graph_view_overlay_open: self.graph_view_overlay_open,
201194
preferences,
@@ -259,7 +252,7 @@ impl MessageHandler<DocumentMessage, DocumentMessageContext<'_>> for DocumentMes
259252
AlignAxis::X => DVec2::X,
260253
AlignAxis::Y => DVec2::Y,
261254
};
262-
let Some(combined_box) = self.selected_visible_layers_bounding_box_viewport() else {
255+
let Some(combined_box) = self.network_interface.selected_layers_artwork_bounding_box_viewport() else {
263256
return;
264257
};
265258

@@ -486,7 +479,7 @@ impl MessageHandler<DocumentMessage, DocumentMessageContext<'_>> for DocumentMes
486479
FlipAxis::X => DVec2::new(-1., 1.),
487480
FlipAxis::Y => DVec2::new(1., -1.),
488481
};
489-
if let Some([min, max]) = self.selected_visible_and_unlock_layers_bounding_box_viewport() {
482+
if let Some([min, max]) = self.network_interface.selected_unlocked_layers_bounding_box_viewport() {
490483
let center = (max + min) / 2.;
491484
let bbox_trans = DAffine2::from_translation(-center);
492485
let mut added_transaction = false;
@@ -506,7 +499,7 @@ impl MessageHandler<DocumentMessage, DocumentMessageContext<'_>> for DocumentMes
506499
}
507500
DocumentMessage::RotateSelectedLayers { degrees } => {
508501
// Get the bounding box of selected layers in viewport space
509-
if let Some([min, max]) = self.selected_visible_and_unlock_layers_bounding_box_viewport() {
502+
if let Some([min, max]) = self.network_interface.selected_unlocked_layers_bounding_box_viewport() {
510503
// Calculate the center of the bounding box to use as rotation pivot
511504
let center = (max + min) / 2.;
512505
// Transform that moves pivot point to origin
@@ -1063,13 +1056,13 @@ impl MessageHandler<DocumentMessage, DocumentMessageContext<'_>> for DocumentMes
10631056
self.selected_layers_reorder(relative_index_offset, responses);
10641057
}
10651058
DocumentMessage::ClipLayer { id } => {
1066-
let layer = LayerNodeIdentifier::new(id, &self.network_interface, &[]);
1059+
let layer = LayerNodeIdentifier::new(id, &self.network_interface);
10671060

10681061
responses.add(DocumentMessage::AddTransaction);
10691062
responses.add(GraphOperationMessage::ClipModeToggle { layer });
10701063
}
10711064
DocumentMessage::SelectLayer { id, ctrl, shift } => {
1072-
let layer = LayerNodeIdentifier::new(id, &self.network_interface, &[]);
1065+
let layer = LayerNodeIdentifier::new(id, &self.network_interface);
10731066

10741067
let mut nodes = vec![];
10751068

@@ -1266,7 +1259,7 @@ impl MessageHandler<DocumentMessage, DocumentMessageContext<'_>> for DocumentMes
12661259
responses.add(OverlaysMessage::Draw);
12671260
}
12681261
DocumentMessage::ToggleLayerExpansion { id, recursive } => {
1269-
let layer = LayerNodeIdentifier::new(id, &self.network_interface, &[]);
1262+
let layer = LayerNodeIdentifier::new(id, &self.network_interface);
12701263
let metadata = self.metadata();
12711264

12721265
let is_collapsed = self.collapsed.0.contains(&layer);
@@ -1323,7 +1316,7 @@ impl MessageHandler<DocumentMessage, DocumentMessageContext<'_>> for DocumentMes
13231316
self.network_interface.document_network().nodes.contains_key(node_id))
13241317
.filter_map(|(node_id, click_targets)| {
13251318
self.network_interface.is_layer(&node_id, &[]).then(|| {
1326-
let layer = LayerNodeIdentifier::new(node_id, &self.network_interface, &[]);
1319+
let layer = LayerNodeIdentifier::new(node_id, &self.network_interface);
13271320
(layer, click_targets)
13281321
})
13291322
})
@@ -1708,31 +1701,6 @@ impl DocumentMessageHandler {
17081701
.last()
17091702
}
17101703

1711-
/// Get the combined bounding box of the click targets of the selected visible layers in viewport space
1712-
pub fn selected_visible_layers_bounding_box_viewport(&self) -> Option<[DVec2; 2]> {
1713-
self.network_interface
1714-
.selected_nodes()
1715-
.selected_visible_layers(&self.network_interface)
1716-
.filter_map(|layer| self.metadata().bounding_box_viewport(layer))
1717-
.reduce(graphene_std::renderer::Quad::combine_bounds)
1718-
}
1719-
1720-
pub fn selected_visible_and_unlock_layers_bounding_box_viewport(&self) -> Option<[DVec2; 2]> {
1721-
self.network_interface
1722-
.selected_nodes()
1723-
.selected_visible_and_unlocked_layers(&self.network_interface)
1724-
.filter_map(|layer| self.metadata().bounding_box_viewport(layer))
1725-
.reduce(graphene_std::renderer::Quad::combine_bounds)
1726-
}
1727-
1728-
pub fn selected_visible_and_unlock_layers_bounding_box_document(&self) -> Option<[DVec2; 2]> {
1729-
self.network_interface
1730-
.selected_nodes()
1731-
.selected_visible_and_unlocked_layers(&self.network_interface)
1732-
.map(|layer| self.metadata().nonzero_bounding_box(layer))
1733-
.reduce(graphene_std::renderer::Quad::combine_bounds)
1734-
}
1735-
17361704
pub fn document_network(&self) -> &NodeNetwork {
17371705
self.network_interface.document_network()
17381706
}

editor/src/messages/portfolio/document/graph_operation/graph_operation_message_handler.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ impl MessageHandler<GraphOperationMessage, GraphOperationMessageContext<'_>> for
119119
let primary_input = artboard.inputs.first().expect("Artboard should have a primary input").clone();
120120
if let NodeInput::Node { node_id, .. } = &primary_input {
121121
if network_interface.is_layer(node_id, &[]) && !network_interface.is_artboard(node_id, &[]) {
122-
network_interface.move_layer_to_stack(LayerNodeIdentifier::new(*node_id, network_interface, &[]), artboard_layer, 0, &[]);
122+
network_interface.move_layer_to_stack(LayerNodeIdentifier::new(*node_id, network_interface), artboard_layer, 0, &[]);
123123
} else {
124124
network_interface.disconnect_input(&InputConnector::node(artboard_layer.to_node(), 0), &[]);
125125
network_interface.set_input(&InputConnector::node(id, 0), primary_input, &[]);

editor/src/messages/portfolio/document/graph_operation/utility_types.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ impl<'a> ModifyInputsContext<'a> {
124124
pub fn create_layer(&mut self, new_id: NodeId) -> LayerNodeIdentifier {
125125
let new_merge_node = resolve_document_node_type("Merge").expect("Merge node").default_node_template();
126126
self.network_interface.insert_node(new_id, new_merge_node, &[]);
127-
LayerNodeIdentifier::new(new_id, self.network_interface, &[])
127+
LayerNodeIdentifier::new(new_id, self.network_interface)
128128
}
129129

130130
/// Creates an artboard as the primary export for the document network
@@ -138,7 +138,7 @@ impl<'a> ModifyInputsContext<'a> {
138138
Some(NodeInput::value(TaggedValue::Bool(artboard.clip), false)),
139139
]);
140140
self.network_interface.insert_node(new_id, artboard_node_template, &[]);
141-
LayerNodeIdentifier::new(new_id, self.network_interface, &[])
141+
LayerNodeIdentifier::new(new_id, self.network_interface)
142142
}
143143

144144
pub fn insert_boolean_data(&mut self, operation: graphene_std::path_bool::BooleanOperation, layer: LayerNodeIdentifier) {
@@ -236,7 +236,7 @@ impl<'a> ModifyInputsContext<'a> {
236236
self.layer_node.or_else(|| {
237237
let export_node = self.network_interface.document_network().exports.first().and_then(|export| export.as_node())?;
238238
if self.network_interface.is_layer(&export_node, &[]) {
239-
Some(LayerNodeIdentifier::new(export_node, self.network_interface, &[]))
239+
Some(LayerNodeIdentifier::new(export_node, self.network_interface))
240240
} else {
241241
None
242242
}

editor/src/messages/portfolio/document/navigation/navigation_message_handler.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ pub struct NavigationMessageContext<'a> {
1818
pub network_interface: &'a mut NodeNetworkInterface,
1919
pub breadcrumb_network_path: &'a [NodeId],
2020
pub ipp: &'a InputPreprocessorMessageHandler,
21-
pub selection_bounds: Option<[DVec2; 2]>,
2221
pub document_ptz: &'a mut PTZ,
2322
pub graph_view_overlay_open: bool,
2423
pub preferences: &'a PreferencesMessageHandler,
@@ -39,7 +38,6 @@ impl MessageHandler<NavigationMessage, NavigationMessageContext<'_>> for Navigat
3938
network_interface,
4039
breadcrumb_network_path,
4140
ipp,
42-
selection_bounds,
4341
document_ptz,
4442
graph_view_overlay_open,
4543
preferences,
@@ -386,9 +384,16 @@ impl MessageHandler<NavigationMessage, NavigationMessageContext<'_>> for Navigat
386384
responses.add(DocumentMessage::PTZUpdate);
387385
responses.add(NodeGraphMessage::SetGridAlignedEdges);
388386
}
387+
// Fully zooms in on the selected
389388
NavigationMessage::FitViewportToSelection => {
389+
let selection_bounds = if graph_view_overlay_open {
390+
network_interface.selected_nodes_bounding_box_viewport(breadcrumb_network_path)
391+
} else {
392+
network_interface.selected_layers_artwork_bounding_box_viewport()
393+
};
394+
390395
if let Some(bounds) = selection_bounds {
391-
let Some(ptz) = get_ptz_mut(document_ptz, network_interface, graph_view_overlay_open, breadcrumb_network_path) else {
396+
let Some(ptz) = get_ptz(document_ptz, network_interface, graph_view_overlay_open, breadcrumb_network_path) else {
392397
log::error!("Could not get node graph PTZ in FitViewportToSelection");
393398
return;
394399
};

0 commit comments

Comments
 (0)