Guides: a sublayer guide in a hidden or locked group keeps that state

When a layer effect moves a sublayer's ruler guides onto the layer, a
guide inside a hidden or locked group now stays hidden or locked, as it
does for a hidden or locked sublayer.
This commit is contained in:
dotCooCoo
2026-11-11 14:23:56 -08:00
parent be27042060
commit 7a9a6bd98e
2 changed files with 28 additions and 2 deletions
+2 -2
View File
@@ -726,12 +726,12 @@ fn sublayer_guides(n: &Node) -> bool {
/// Move the ruler guides of the sublayers among the members of `n`, and among its groups'
/// members, to `out`, in order. A guide taken from a hidden or locked sublayer, or from one inside
/// such a sublayer, is hidden or locked itself. Only containers holding one are copied.
/// such a sublayer or group, is hidden or locked itself. Only containers holding one are copied.
fn take_sublayer_guides(n: &mut Node, out: &mut Vec<Arc<Node>>, hidden: bool, locked: bool) {
let Some(ch) = n.children_mut() else { return };
for c in ch.iter_mut().filter(|c| c.holds_ruler_guides() || (!c.is_layer() && sublayer_guides(c))) {
let c = Arc::make_mut(c);
let (hidden, locked) = if c.is_layer() { (hidden || !c.visible, locked || c.locked) } else { (hidden, locked) };
let (hidden, locked) = (hidden || !c.visible, locked || c.locked);
if c.is_layer()
&& let Some(lc) = c.children_mut()
{
+26
View File
@@ -903,3 +903,29 @@ fn a_sublayers_ruler_guides_survive_its_layers_effects() {
}
}
}
/// A sublayer's ruler guide inside a hidden or locked group stays hidden or locked when its layer's
/// Pathfinder effect moves it onto the layer, as the group made it.
#[test]
fn a_sublayers_ruler_guide_in_a_hidden_or_locked_group_stays_hidden_or_locked() {
use vectorcraft_doc::LayerColor;
for (hidden, locked) in [(true, false), (false, true), (false, false)] {
let mut sub = Node::layer(NodeId(11), "Sub", LayerColor::Preset(1));
if let Some(ch) = sub.children_mut() {
*ch = vec![
sq(2, 5.0, Color::rgb(0.0, 0.0, 1.0)),
Arc::new(Node::new(NodeId(20), NodeKind::RulerGuide { vertical: true, pos: 3.0, artboard: None })),
];
}
let mut group = Node::group(NodeId(12), vec![Arc::new(sub)]);
(group.visible, group.locked) = (!hidden, locked);
let mut l = Node::layer(NodeId(10), "Layer 1", LayerColor::Preset(0));
if let Some(ch) = l.children_mut() {
*ch = vec![sq(1, 0.0, Color::rgb(1.0, 0.0, 0.0)), Arc::new(group)];
}
l.appearance.effects.push(Effect { id: "pathfinder.add".into(), params: serde_json::json!({}), visible: true });
let art = evaluate_container(None, &l).unwrap();
let guides: Vec<_> = art.children().into_iter().flatten().filter(|c| c.is_ruler_guide()).map(|c| (c.id, c.visible, c.locked)).collect();
assert_eq!(guides, [(NodeId(20), !hidden, locked)], "hidden {hidden}, locked {locked}");
}
}