From 3471e730124bdfa54bf6f360aa13bb6891035305 Mon Sep 17 00:00:00 2001 From: Kulratan Thapar Date: Sun, 8 Feb 2026 11:15:53 +0000 Subject: [PATCH 1/2] Make Path Editable --- .../common_functionality/utility_functions.rs | 3 +- .../messages/tool/tool_messages/path_tool.rs | 40 ++++++++++++++++++- 2 files changed, 40 insertions(+), 3 deletions(-) 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..d8e11e8654 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,12 @@ 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::Graphic; 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 +1579,40 @@ 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); From 65c14fcfa7d85582db0cb2486bcd801018e4aeb2 Mon Sep 17 00:00:00 2001 From: Kulratan Thapar Date: Sun, 8 Feb 2026 11:45:26 +0000 Subject: [PATCH 2/2] error corrected --- editor/src/messages/tool/tool_messages/path_tool.rs | 2 -- 1 file changed, 2 deletions(-) diff --git a/editor/src/messages/tool/tool_messages/path_tool.rs b/editor/src/messages/tool/tool_messages/path_tool.rs index d8e11e8654..f4fc0b2d87 100644 --- a/editor/src/messages/tool/tool_messages/path_tool.rs +++ b/editor/src/messages/tool/tool_messages/path_tool.rs @@ -25,7 +25,6 @@ use crate::messages::tool::common_functionality::snapping::{SnapCache, SnapCandi 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::Graphic; use graphene_std::renderer::Quad; use graphene_std::subpath::pathseg_points; use graphene_std::table::Table; @@ -1584,7 +1583,6 @@ impl Fsm for PathToolFsmState { 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 {