diff --git a/editor/src/messages/tool/common_functionality/utility_functions.rs b/editor/src/messages/tool/common_functionality/utility_functions.rs index e8d4293721..4cd009ec6d 100644 --- a/editor/src/messages/tool/common_functionality/utility_functions.rs +++ b/editor/src/messages/tool/common_functionality/utility_functions.rs @@ -13,6 +13,7 @@ use crate::messages::tool::utility_types::ToolType; use glam::{DAffine2, DVec2}; use graph_craft::concrete; use graph_craft::document::value::TaggedValue; +use graphene_std::Graphic; use graphene_std::renderer::Quad; use graphene_std::subpath::{Bezier, BezierHandles}; use graphene_std::table::Table; @@ -576,7 +577,7 @@ pub fn make_path_editable_is_allowed(network_interface: &mut NodeNetworkInterfac let node_id = NodeGraphLayer::new(first_layer, network_interface).horizontal_layer_flow().nth(1)?; let output_type = network_interface.output_type(&OutputConnector::node(node_id, 0), &[]); - if output_type.compiled_nested_type() != Some(&concrete!(Table)) { + if output_type.compiled_nested_type() != Some(&concrete!(Table)) && output_type.compiled_nested_type() != Some(&concrete!(Table)) { return None; } diff --git a/editor/src/messages/tool/tool_messages/path_tool.rs b/editor/src/messages/tool/tool_messages/path_tool.rs index 542a6f0a8c..f4fc0b2d87 100644 --- a/editor/src/messages/tool/tool_messages/path_tool.rs +++ b/editor/src/messages/tool/tool_messages/path_tool.rs @@ -12,7 +12,7 @@ use crate::messages::portfolio::document::overlays::utility_functions::{path_ove use crate::messages::portfolio::document::overlays::utility_types::{DrawHandles, OverlayContext}; use crate::messages::portfolio::document::utility_types::clipboards::Clipboard; use crate::messages::portfolio::document::utility_types::document_metadata::{DocumentMetadata, LayerNodeIdentifier}; -use crate::messages::portfolio::document::utility_types::network_interface::NodeNetworkInterface; +use crate::messages::portfolio::document::utility_types::network_interface::{NodeNetworkInterface, OutputConnector}; use crate::messages::portfolio::document::utility_types::transformation::Axis; use crate::messages::preferences::SelectionMode; use crate::messages::tool::common_functionality::auto_panning::AutoPanning; @@ -23,9 +23,11 @@ use crate::messages::tool::common_functionality::shape_editor::{ }; use crate::messages::tool::common_functionality::snapping::{SnapCache, SnapCandidatePoint, SnapConstraint, SnapData, SnapManager}; use crate::messages::tool::common_functionality::utility_functions::{calculate_segment_angle, find_two_param_best_approximate, make_path_editable_is_allowed}; +use graph_craft::concrete; use graphene_std::Color; use graphene_std::renderer::Quad; use graphene_std::subpath::pathseg_points; +use graphene_std::table::Table; use graphene_std::transform::ReferencePoint; use graphene_std::uuid::NodeId; use graphene_std::vector::algorithms::util::pathseg_tangent; @@ -1576,7 +1578,39 @@ impl Fsm for PathToolFsmState { match (self, event) { (_, PathToolMessage::SelectionChanged) => { // Set the newly targeted layers to visible - let target_layers = document.network_interface.selected_nodes().selected_layers(document.metadata()).collect(); + let mut target_layers = document.network_interface.selected_nodes().selected_layers(document.metadata()).collect::>(); + + let mut i = 0; + while i < target_layers.len() { + let layer = target_layers[i]; + let graph_layer = graph_modification_utils::NodeGraphLayer::new(layer, &document.network_interface); + let node_id = graph_layer.horizontal_layer_flow().nth(1); + let is_vector_layer = if let Some(node) = node_id { + let output_connector = OutputConnector::node(node, 0); + let output_type = document.network_interface.output_type(&output_connector, &[]); + output_type.compiled_nested_type() == Some(&concrete!(Table)) + } else { + false + }; + + if is_vector_layer { + i += 1; + continue; + } + + let mut children = layer.children(document.metadata()); + if let Some(first_child) = children.next() { + target_layers.remove(i); + target_layers.insert(i, first_child); + let mut count = 1; + for child in children { + target_layers.insert(i + count, child); + count += 1; + } + } else { + i += 1; + } + } shape_editor.set_selected_layers(target_layers);