Add Enclosing Lasso as an optional tool

Squashed from #5362 onto main.
This commit is contained in:
dotCooCoo
2026-11-03 23:30:06 +07:00
committed by bflatastic
parent 63ac1395fd
commit bbbce4318f
46 changed files with 850 additions and 22 deletions
+4 -1
View File
@@ -352,7 +352,10 @@ impl Headless {
"document.node" => self.exec("document.node", p),
"document.json" => self.exec("document.json", &json!({})),
"ui.tool.select" => self.select_tool(p),
"ui.tool.list" => Ok(serde_json::to_value(TOOL_GROUPS).unwrap_or_default()),
"ui.tool.list" => {
let groups: Vec<_> = TOOL_GROUPS.iter().chain(vectorcraft_tools::addons::GROUPS).copied().collect();
Ok(serde_json::to_value(groups).unwrap_or_default())
}
"ui.pointer" => self.pointer(p),
"ui.key" => self.key(p),
"ui.render" | "ui.screenshot" => self.render(p),
+10 -1
View File
@@ -1297,7 +1297,16 @@ fn headless_backend_methods() {
assert_eq!((r["width"].as_u64(), r["height"].as_u64()), (Some(600), Some(400)));
let cmds = h.call("engine.commands", json!({})).unwrap();
assert!(cmds.as_array().unwrap().iter().any(|c| c["id"] == "file.export"));
assert!(h.call("ui.tool.list", json!({})).unwrap().is_array());
let listed = h.call("ui.tool.list", json!({})).unwrap();
let groups = listed.as_array().unwrap();
for tool in vectorcraft_tools::addons::GROUPS.iter().flat_map(|group| group.iter()) {
let matching: Vec<_> = groups.iter().flat_map(|group| group.as_array().unwrap()).filter(|entry| entry["id"] == tool.id).collect();
assert_eq!(matching.len(), 1, "{}", tool.id);
assert_eq!(matching[0]["label"], tool.label);
assert!(matching[0]["shortcut"].is_null());
let selected = h.call("ui.tool.select", json!({"tool": tool.id})).unwrap();
assert_eq!(selected["tool"], tool.id);
}
assert!(h.call("ui.resize", json!({})).is_err());
}