(state: &EditorState, node_type: perro_scene::NodeType)
| 1167 | let _ = with_state_mut!(ctx.run, EditorState, ctx.id, |state| { |
| 1168 | let max_start = picker_node_types(state, &state.node_picker_filter) |
| 1169 | .len() |
| 1170 | .saturating_sub(1); |
| 1171 | if dir < 0 { |
| 1172 | state.node_picker_offset = state.node_picker_offset.saturating_sub(1); |
| 1173 | } else { |
| 1174 | state.node_picker_offset = (state.node_picker_offset + 1).min(max_start); |
| 1175 | } |
| 1176 | }); |
| 1177 | refresh_all(ctx); |
| 1178 | } |
| 1179 | |
| 1180 | pub fn picker_node_types(state: &EditorState, filter: &str) -> Vec<perro_scene::NodeType> { |
| 1181 | let filter = NodePickerFilter::parse(filter); |
| 1182 | let asset_node = active_asset_node_type(state); |
| 1183 | let parent_kind = picker_parent_node_kind(state); |
| 1184 | let mut out = perro_scene::NodeType::ALL |
| 1185 | .iter() |
| 1186 | .copied() |
| 1187 | .filter(|node_type| { |
| 1188 | if filter.is_empty() { |
| 1189 | return true; |
| 1190 | } |
| 1191 | if filter.tags.iter().any(|tag| tag == "recent") |
| 1192 | && recent_node_rank(state, node_type.name()).is_none() |
| 1193 | { |
| 1194 | return false; |
| 1195 | } |
| 1196 | node_type_matches_picker_filter(*node_type, &filter) |
| 1197 | }) |
no test coverage detected