Compare commits

..
7 changed files with 48 additions and 97 deletions
-4
View File
@@ -26,10 +26,6 @@ jobs:
# Same craft-fonts commit as release.yml. # Same craft-fonts commit as release.yml.
CRAFT_FONTS_REF: 37827adc41fd165f9a9234ac40f94dbad353aa69 CRAFT_FONTS_REF: 37827adc41fd165f9a9234ac40f94dbad353aa69
steps: steps:
- name: Harden runner
uses: step-security/harden-runner@1d88384fd173af6ecb012dfd0264a306b711241a # v2.22.4
with:
egress-policy: audit
- name: Check out craft-fonts - name: Check out craft-fonts
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with: with:
-4
View File
@@ -27,10 +27,6 @@ jobs:
name: Windows installation policy (no app build) name: Windows installation policy (no app build)
runs-on: windows-latest runs-on: windows-latest
steps: steps:
- name: Harden runner
uses: step-security/harden-runner@1d88384fd173af6ecb012dfd0264a306b711241a # v2.22.4
with:
egress-policy: audit
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with: with:
persist-credentials: false persist-credentials: false
Generated
+35 -36
View File
@@ -847,12 +847,12 @@ dependencies = [
[[package]] [[package]]
name = "craft-fonts-build" name = "craft-fonts-build"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/storytold/craft-libs?rev=6e03f65bf45181db77ba6229716e6624db9eb25b#6e03f65bf45181db77ba6229716e6624db9eb25b" source = "git+https://github.com/storytold/craft-libs?rev=1b34eba41e62138fc2438d2734523b302840b45d#1b34eba41e62138fc2438d2734523b302840b45d"
[[package]] [[package]]
name = "craft-i18n" name = "craft-i18n"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/storytold/craft-libs?rev=6e03f65bf45181db77ba6229716e6624db9eb25b#6e03f65bf45181db77ba6229716e6624db9eb25b" source = "git+https://github.com/storytold/craft-libs?rev=1b34eba41e62138fc2438d2734523b302840b45d#1b34eba41e62138fc2438d2734523b302840b45d"
dependencies = [ dependencies = [
"fixed_decimal", "fixed_decimal",
"icu_decimal", "icu_decimal",
@@ -875,7 +875,7 @@ dependencies = [
[[package]] [[package]]
name = "craft-media" name = "craft-media"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/storytold/craft-libs?rev=6e03f65bf45181db77ba6229716e6624db9eb25b#6e03f65bf45181db77ba6229716e6624db9eb25b" source = "git+https://github.com/storytold/craft-libs?rev=1b34eba41e62138fc2438d2734523b302840b45d#1b34eba41e62138fc2438d2734523b302840b45d"
dependencies = [ dependencies = [
"thiserror 2.0.21", "thiserror 2.0.21",
] ]
@@ -883,7 +883,7 @@ dependencies = [
[[package]] [[package]]
name = "craft-pdf" name = "craft-pdf"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/storytold/craft-libs?rev=6e03f65bf45181db77ba6229716e6624db9eb25b#6e03f65bf45181db77ba6229716e6624db9eb25b" source = "git+https://github.com/storytold/craft-libs?rev=1b34eba41e62138fc2438d2734523b302840b45d#1b34eba41e62138fc2438d2734523b302840b45d"
dependencies = [ dependencies = [
"krilla", "krilla",
"thiserror 2.0.21", "thiserror 2.0.21",
@@ -892,7 +892,7 @@ dependencies = [
[[package]] [[package]]
name = "craft-ui" name = "craft-ui"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/storytold/craft-libs?rev=6e03f65bf45181db77ba6229716e6624db9eb25b#6e03f65bf45181db77ba6229716e6624db9eb25b" source = "git+https://github.com/storytold/craft-libs?rev=1b34eba41e62138fc2438d2734523b302840b45d#1b34eba41e62138fc2438d2734523b302840b45d"
dependencies = [ dependencies = [
"craft-fonts-build", "craft-fonts-build",
"craft-i18n", "craft-i18n",
@@ -912,7 +912,7 @@ dependencies = [
[[package]] [[package]]
name = "craft-update" name = "craft-update"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/storytold/craft-libs?rev=6e03f65bf45181db77ba6229716e6624db9eb25b#6e03f65bf45181db77ba6229716e6624db9eb25b" source = "git+https://github.com/storytold/craft-libs?rev=1b34eba41e62138fc2438d2734523b302840b45d#1b34eba41e62138fc2438d2734523b302840b45d"
dependencies = [ dependencies = [
"chrono", "chrono",
"dunce", "dunce",
@@ -922,7 +922,6 @@ dependencies = [
"image", "image",
"log", "log",
"plist", "plist",
"rustix 1.1.5",
"semver", "semver",
"serde", "serde",
"serde_json", "serde_json",
@@ -1029,7 +1028,7 @@ checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f"
[[package]] [[package]]
name = "deckcraft" name = "deckcraft"
version = "0.18.0" version = "0.18.1"
dependencies = [ dependencies = [
"arboard", "arboard",
"chrono", "chrono",
@@ -1051,7 +1050,7 @@ dependencies = [
[[package]] [[package]]
name = "deckcraft-anim" name = "deckcraft-anim"
version = "0.18.0" version = "0.18.1"
dependencies = [ dependencies = [
"deckcraft-geom", "deckcraft-geom",
"deckcraft-model", "deckcraft-model",
@@ -1060,7 +1059,7 @@ dependencies = [
[[package]] [[package]]
name = "deckcraft-av1" name = "deckcraft-av1"
version = "0.18.0" version = "0.18.1"
dependencies = [ dependencies = [
"deckcraft-bitstream", "deckcraft-bitstream",
"rayon", "rayon",
@@ -1069,14 +1068,14 @@ dependencies = [
[[package]] [[package]]
name = "deckcraft-bitstream" name = "deckcraft-bitstream"
version = "0.18.0" version = "0.18.1"
dependencies = [ dependencies = [
"craft-media", "craft-media",
] ]
[[package]] [[package]]
name = "deckcraft-cli" name = "deckcraft-cli"
version = "0.18.0" version = "0.18.1"
dependencies = [ dependencies = [
"deckcraft-engine", "deckcraft-engine",
"deckcraft-mcp", "deckcraft-mcp",
@@ -1086,14 +1085,14 @@ dependencies = [
[[package]] [[package]]
name = "deckcraft-color" name = "deckcraft-color"
version = "0.18.0" version = "0.18.1"
dependencies = [ dependencies = [
"serde", "serde",
] ]
[[package]] [[package]]
name = "deckcraft-engine" name = "deckcraft-engine"
version = "0.18.0" version = "0.18.1"
dependencies = [ dependencies = [
"chrono", "chrono",
"deckcraft-anim", "deckcraft-anim",
@@ -1119,7 +1118,7 @@ dependencies = [
[[package]] [[package]]
name = "deckcraft-fonts" name = "deckcraft-fonts"
version = "0.18.0" version = "0.18.1"
dependencies = [ dependencies = [
"epaint_default_fonts", "epaint_default_fonts",
"harfrust 0.13.3", "harfrust 0.13.3",
@@ -1131,7 +1130,7 @@ dependencies = [
[[package]] [[package]]
name = "deckcraft-format" name = "deckcraft-format"
version = "0.18.0" version = "0.18.1"
dependencies = [ dependencies = [
"deckcraft-model", "deckcraft-model",
"serde", "serde",
@@ -1142,7 +1141,7 @@ dependencies = [
[[package]] [[package]]
name = "deckcraft-geom" name = "deckcraft-geom"
version = "0.18.0" version = "0.18.1"
dependencies = [ dependencies = [
"kurbo", "kurbo",
"serde", "serde",
@@ -1150,7 +1149,7 @@ dependencies = [
[[package]] [[package]]
name = "deckcraft-h264" name = "deckcraft-h264"
version = "0.18.0" version = "0.18.1"
dependencies = [ dependencies = [
"deckcraft-bitstream", "deckcraft-bitstream",
"rayon", "rayon",
@@ -1159,7 +1158,7 @@ dependencies = [
[[package]] [[package]]
name = "deckcraft-hevc" name = "deckcraft-hevc"
version = "0.18.0" version = "0.18.1"
dependencies = [ dependencies = [
"deckcraft-bitstream", "deckcraft-bitstream",
"rayon", "rayon",
@@ -1168,21 +1167,21 @@ dependencies = [
[[package]] [[package]]
name = "deckcraft-isobmff" name = "deckcraft-isobmff"
version = "0.18.0" version = "0.18.1"
dependencies = [ dependencies = [
"craft-media", "craft-media",
] ]
[[package]] [[package]]
name = "deckcraft-matroska" name = "deckcraft-matroska"
version = "0.18.0" version = "0.18.1"
dependencies = [ dependencies = [
"craft-media", "craft-media",
] ]
[[package]] [[package]]
name = "deckcraft-mcp" name = "deckcraft-mcp"
version = "0.18.0" version = "0.18.1"
dependencies = [ dependencies = [
"deckcraft-engine", "deckcraft-engine",
"deckcraft-render", "deckcraft-render",
@@ -1192,7 +1191,7 @@ dependencies = [
[[package]] [[package]]
name = "deckcraft-media" name = "deckcraft-media"
version = "0.18.0" version = "0.18.1"
dependencies = [ dependencies = [
"deckcraft-av1", "deckcraft-av1",
"deckcraft-h264", "deckcraft-h264",
@@ -1210,7 +1209,7 @@ dependencies = [
[[package]] [[package]]
name = "deckcraft-metafile" name = "deckcraft-metafile"
version = "0.18.0" version = "0.18.1"
dependencies = [ dependencies = [
"image", "image",
"kurbo", "kurbo",
@@ -1219,7 +1218,7 @@ dependencies = [
[[package]] [[package]]
name = "deckcraft-model" name = "deckcraft-model"
version = "0.18.0" version = "0.18.1"
dependencies = [ dependencies = [
"deckcraft-color", "deckcraft-color",
"deckcraft-geom", "deckcraft-geom",
@@ -1231,15 +1230,15 @@ dependencies = [
[[package]] [[package]]
name = "deckcraft-ogg" name = "deckcraft-ogg"
version = "0.18.0" version = "0.18.1"
[[package]] [[package]]
name = "deckcraft-opus" name = "deckcraft-opus"
version = "0.18.0" version = "0.18.1"
[[package]] [[package]]
name = "deckcraft-pdf" name = "deckcraft-pdf"
version = "0.18.0" version = "0.18.1"
dependencies = [ dependencies = [
"craft-pdf", "craft-pdf",
"deckcraft-fonts", "deckcraft-fonts",
@@ -1257,7 +1256,7 @@ dependencies = [
[[package]] [[package]]
name = "deckcraft-pptx" name = "deckcraft-pptx"
version = "0.18.0" version = "0.18.1"
dependencies = [ dependencies = [
"deckcraft-color", "deckcraft-color",
"deckcraft-engine", "deckcraft-engine",
@@ -1273,7 +1272,7 @@ dependencies = [
[[package]] [[package]]
name = "deckcraft-render" name = "deckcraft-render"
version = "0.18.0" version = "0.18.1"
dependencies = [ dependencies = [
"deckcraft-anim", "deckcraft-anim",
"deckcraft-color", "deckcraft-color",
@@ -1292,7 +1291,7 @@ dependencies = [
[[package]] [[package]]
name = "deckcraft-text" name = "deckcraft-text"
version = "0.18.0" version = "0.18.1"
dependencies = [ dependencies = [
"chrono", "chrono",
"deckcraft-color", "deckcraft-color",
@@ -1306,7 +1305,7 @@ dependencies = [
[[package]] [[package]]
name = "deckcraft-ui-egui" name = "deckcraft-ui-egui"
version = "0.18.0" version = "0.18.1"
dependencies = [ dependencies = [
"craft-ui", "craft-ui",
"craft-update", "craft-update",
@@ -1332,7 +1331,7 @@ dependencies = [
[[package]] [[package]]
name = "deckcraft-vp9" name = "deckcraft-vp9"
version = "0.18.0" version = "0.18.1"
dependencies = [ dependencies = [
"deckcraft-bitstream", "deckcraft-bitstream",
"rayon", "rayon",
@@ -1341,7 +1340,7 @@ dependencies = [
[[package]] [[package]]
name = "deckcraft-web" name = "deckcraft-web"
version = "0.18.0" version = "0.18.1"
dependencies = [ dependencies = [
"craft-web-api", "craft-web-api",
"craft-web-host", "craft-web-host",
@@ -2792,7 +2791,7 @@ dependencies = [
[[package]] [[package]]
name = "krilla" name = "krilla"
version = "0.8.2" version = "0.8.2"
source = "git+https://github.com/storytold/craft-libs?rev=6e03f65bf45181db77ba6229716e6624db9eb25b#6e03f65bf45181db77ba6229716e6624db9eb25b" source = "git+https://github.com/storytold/craft-libs?rev=1b34eba41e62138fc2438d2734523b302840b45d#1b34eba41e62138fc2438d2734523b302840b45d"
dependencies = [ dependencies = [
"base64 0.22.1", "base64 0.22.1",
"bumpalo", "bumpalo",
@@ -6326,7 +6325,7 @@ checksum = "9440ea3e5aeabb0ac63af70daf835274065238cdd0cec83418f417eae38bacee"
[[package]] [[package]]
name = "xtask" name = "xtask"
version = "0.18.0" version = "0.18.1"
dependencies = [ dependencies = [
"serde_json", "serde_json",
] ]
+6 -6
View File
@@ -4,7 +4,7 @@ members = ["crates/*", "apps/*", "xtask"]
default-members = ["crates/*", "apps/deckcraft", "apps/deckcraft-cli"] default-members = ["crates/*", "apps/deckcraft", "apps/deckcraft-cli"]
[workspace.package] [workspace.package]
version = "0.18.0" version = "0.18.1"
edition = "2024" edition = "2024"
license = "MIT OR Apache-2.0" license = "MIT OR Apache-2.0"
rust-version = "1.95" rust-version = "1.95"
@@ -59,11 +59,11 @@ harfrust = "0.13"
vello_cpu = "0.2" vello_cpu = "0.2"
vello_common = { version = "0.2", default-features = false } vello_common = { version = "0.2", default-features = false }
image = { version = "0.25", default-features = false, features = ["png", "jpeg", "webp", "gif", "tiff", "bmp"] } image = { version = "0.25", default-features = false, features = ["png", "jpeg", "webp", "gif", "tiff", "bmp"] }
craft-media = { git = "https://github.com/storytold/craft-libs", rev = "6e03f65bf45181db77ba6229716e6624db9eb25b", version = "=0.1.0", default-features = false } craft-media = { git = "https://github.com/storytold/craft-libs", rev = "1b34eba41e62138fc2438d2734523b302840b45d", version = "=0.1.0", default-features = false }
craft-pdf = { git = "https://github.com/storytold/craft-libs", rev = "6e03f65bf45181db77ba6229716e6624db9eb25b", version = "=0.1.0", default-features = false, features = ["write", "write-simple-text"] } craft-pdf = { git = "https://github.com/storytold/craft-libs", rev = "1b34eba41e62138fc2438d2734523b302840b45d", version = "=0.1.0", default-features = false, features = ["write", "write-simple-text"] }
# craft-update: app-specific pretend versions apply to startup and manual checks. # craft-update: app-specific pretend versions apply to startup and manual checks.
craft-update = { git = "https://github.com/storytold/craft-libs", version = "=0.1.0", rev = "6e03f65bf45181db77ba6229716e6624db9eb25b", features = ["egui"] } craft-update = { git = "https://github.com/storytold/craft-libs", version = "=0.1.0", rev = "1b34eba41e62138fc2438d2734523b302840b45d", features = ["egui"] }
craft-ui = { git = "https://github.com/storytold/craft-libs", rev = "6e03f65bf45181db77ba6229716e6624db9eb25b", version = "=0.1.0" } craft-ui = { git = "https://github.com/storytold/craft-libs", rev = "1b34eba41e62138fc2438d2734523b302840b45d", version = "=0.1.0" }
i_overlay = "9" i_overlay = "9"
quick-xml = "0.41" quick-xml = "0.41"
zip = { version = "3", default-features = false, features = ["deflate"] } zip = { version = "3", default-features = false, features = ["deflate"] }
@@ -109,7 +109,7 @@ codegen-units = 16
debug = 0 debug = 0
[patch.crates-io] [patch.crates-io]
krilla = { git = "https://github.com/storytold/craft-libs", rev = "6e03f65bf45181db77ba6229716e6624db9eb25b", version = "=0.8.2" } krilla = { git = "https://github.com/storytold/craft-libs", rev = "1b34eba41e62138fc2438d2734523b302840b45d", version = "=0.8.2" }
ecolor = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" } ecolor = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
emath = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" } emath = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
epaint = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" } epaint = { git = "https://github.com/storytold/egui.git", rev = "6d518fc799681571963842f95b55a6b68431b15a" }
+3 -31
View File
@@ -403,7 +403,7 @@ pub fn data_xml(d: &Diagram, seed: u32, drawing_rel: &str, pics: &[(usize, Strin
w.finish() w.finish()
} }
/// The outline of a data part: the `parOf` tree under the document point, depth first, or the data points in `ptLst` order when no `parOf` connections exist. /// The outline of a data part: the `parOf` tree under the document point, depth first.
pub fn outline(data: &El) -> Vec<DiagramNode> { pub fn outline(data: &El) -> Vec<DiagramNode> {
outline_ids(data).into_iter().map(|(_, n)| n).collect() outline_ids(data).into_iter().map(|(_, n)| n).collect()
} }
@@ -429,13 +429,11 @@ pub fn node_pictures(data: &El) -> Vec<(usize, String)> {
out out
} }
/// Extracts diagram outline `(modelId, DiagramNode)` pairs in tree order from a `dgm:dataModel` element.
fn outline_ids(data: &El) -> Vec<(String, DiagramNode)> { fn outline_ids(data: &El) -> Vec<(String, DiagramNode)> {
let Some(pts) = data.child("ptLst") else { return vec![] }; let Some(pts) = data.child("ptLst") else { return vec![] };
let mut texts: HashMap<&str, String> = HashMap::new(); let mut texts: HashMap<&str, String> = HashMap::new();
let mut assistants: std::collections::HashSet<&str> = std::collections::HashSet::new(); let mut assistants: std::collections::HashSet<&str> = std::collections::HashSet::new();
let mut titles: HashMap<&str, String> = HashMap::new(); let mut titles: HashMap<&str, String> = HashMap::new();
let mut pt_order: Vec<&str> = Vec::new();
let mut doc: Option<&str> = None; let mut doc: Option<&str> = None;
for pt in pts.children_named("pt").take(MAX_NODES * 4) { for pt in pts.children_named("pt").take(MAX_NODES * 4) {
let Some(id) = pt.attr("modelId") else { continue }; let Some(id) = pt.attr("modelId") else { continue };
@@ -444,7 +442,6 @@ fn outline_ids(data: &El) -> Vec<(String, DiagramNode)> {
ty @ ("node" | "asst") => { ty @ ("node" | "asst") => {
let t = pt.child("t").map(paragraphs).unwrap_or_default(); let t = pt.child("t").map(paragraphs).unwrap_or_default();
texts.insert(id, t); texts.insert(id, t);
pt_order.push(id);
if ty == "asst" { if ty == "asst" {
assistants.insert(id); assistants.insert(id);
} }
@@ -462,6 +459,7 @@ fn outline_ids(data: &El) -> Vec<(String, DiagramNode)> {
_ => {} _ => {}
} }
} }
let Some(doc) = doc else { return vec![] };
let mut kids: HashMap<&str, Vec<(i64, &str)>> = HashMap::new(); let mut kids: HashMap<&str, Vec<(i64, &str)>> = HashMap::new();
if let Some(cx) = data.child("cxnLst") { if let Some(cx) = data.child("cxnLst") {
for c in cx.children_named("cxn").take(MAX_NODES * 4) { for c in cx.children_named("cxn").take(MAX_NODES * 4) {
@@ -480,7 +478,7 @@ fn outline_ids(data: &El) -> Vec<(String, DiagramNode)> {
let mut out = vec![]; let mut out = vec![];
let mut seen = std::collections::HashSet::new(); let mut seen = std::collections::HashSet::new();
// Depth first, iteratively; a node reached twice (a cycle in a hostile file) is skipped. // Depth first, iteratively; a node reached twice (a cycle in a hostile file) is skipped.
let mut stack: Vec<(&str, u8)> = doc.and_then(|d| kids.get(d)).map(|v| v.iter().rev().map(|(_, id)| (*id, 0u8)).collect()).unwrap_or_default(); let mut stack: Vec<(&str, u8)> = kids.get(doc).map(|v| v.iter().rev().map(|(_, id)| (*id, 0u8)).collect()).unwrap_or_default();
while let Some((id, level)) = stack.pop() { while let Some((id, level)) = stack.pop() {
if out.len() >= MAX_NODES || !seen.insert(id) { if out.len() >= MAX_NODES || !seen.insert(id) {
continue; continue;
@@ -499,23 +497,6 @@ fn outline_ids(data: &El) -> Vec<(String, DiagramNode)> {
stack.extend(v.iter().rev().map(|(_, c)| (*c, level.saturating_add(1)))); stack.extend(v.iter().rev().map(|(_, c)| (*c, level.saturating_add(1))));
} }
} }
if out.is_empty() && kids.is_empty() {
for id in pt_order {
if out.len() >= MAX_NODES || !seen.insert(id) {
continue;
}
out.push((
id.to_string(),
DiagramNode {
text: texts.get(id).cloned().unwrap_or_default(),
level: 0,
picture: None,
assistant: assistants.contains(id),
title: titles.get(id).cloned().unwrap_or_default(),
},
));
}
}
out out
} }
@@ -897,14 +878,5 @@ mod tests {
assert_eq!(colors_for(&cs_id("accent4")), "accent4"); assert_eq!(colors_for(&cs_id("accent4")), "accent4");
assert_eq!(colors_for(&cs_id("")), ""); assert_eq!(colors_for(&cs_id("")), "");
assert_eq!(style_for(&qs_id("outline")), "outline"); assert_eq!(style_for(&qs_id("outline")), "outline");
let unconnected = br#"<dgm:dataModel xmlns:dgm="d"><dgm:ptLst><dgm:pt modelId="0" type="doc"/><dgm:pt modelId="1" type="node"><dgm:t><a:p xmlns:a="a"><a:r><a:t>Alpha</a:t></a:r></a:p></dgm:t></dgm:pt><dgm:pt modelId="2" type="node"><dgm:t><a:p xmlns:a="a"><a:r><a:t>Beta</a:t></a:r></a:p></dgm:t></dgm:pt></dgm:ptLst><dgm:cxnLst/></dgm:dataModel>"#;
let unconnected_doc = crate::xml::parse(unconnected).unwrap();
assert_eq!(outline(&unconnected_doc.root), nodes(&[("Alpha", 0), ("Beta", 0)]));
// When parOf connections exist but no root (type="doc") reaches them, do not flatten the hierarchy to level 0.
let unrooted_hierarchy = br#"<dgm:dataModel xmlns:dgm="d"><dgm:ptLst><dgm:pt modelId="1" type="node"><dgm:t><a:p xmlns:a="a"><a:r><a:t>Parent</a:t></a:r></a:p></dgm:t></dgm:pt><dgm:pt modelId="2" type="node"><dgm:t><a:p xmlns:a="a"><a:r><a:t>Child</a:t></a:r></a:p></dgm:t></dgm:pt></dgm:ptLst><dgm:cxnLst><dgm:cxn srcId="1" destId="2"/></dgm:cxnLst></dgm:dataModel>"#;
let unrooted_doc = crate::xml::parse(unrooted_hierarchy).unwrap();
assert!(outline(&unrooted_doc.root).is_empty());
} }
} }
+3 -15
View File
@@ -542,22 +542,10 @@ fn diagram(w: &mut W, x: &mut Exp, o: &mut Out, cx: &mut Ctx, s: &Shape, d: &dec
let (sx, sy) = (frame.w / child.w.max(1e-6), frame.h / child.h.max(1e-6)); let (sx, sy) = (frame.w / child.w.max(1e-6), frame.h / child.h.max(1e-6));
let mut k = 0; let mut k = 0;
let mut flat = vec![]; let mut flat = vec![];
walk(children, &mut |c, _| match &c.kind { walk(children, &mut |c, _| {
ShapeKind::Shape => flat.push(c.clone()), if matches!(c.kind, ShapeKind::Shape) {
ShapeKind::Connector { .. } => { flat.push(c.clone());
let mut sc = c.clone();
if sc.geom.preset_name() == Some("rect") {
sc.geom = Geom::preset("line");
}
flat.push(sc);
} }
ShapeKind::Picture { fill } => {
let mut sc = c.clone();
sc.kind = ShapeKind::Shape;
sc.fill = Some(deckcraft_model::style::Fill::Picture(fill.clone()));
flat.push(sc);
}
_ => {}
}); });
for mut c in flat.into_iter().take(10_000) { for mut c in flat.into_iter().take(10_000) {
if let Some(xf) = &mut c.xfrm { if let Some(xf) = &mut c.xfrm {
+1 -1
View File
@@ -7,7 +7,7 @@ use std::process::Command;
use serde_json::Value; use serde_json::Value;
const SHARED_REPO: &str = "https://github.com/storytold/craft-libs"; const SHARED_REPO: &str = "https://github.com/storytold/craft-libs";
const SHARED_REV: &str = "6e03f65bf45181db77ba6229716e6624db9eb25b"; const SHARED_REV: &str = "1b34eba41e62138fc2438d2734523b302840b45d";
const REGISTRY: &str = "registry+https://github.com/rust-lang/crates.io-index"; const REGISTRY: &str = "registry+https://github.com/rust-lang/crates.io-index";
pub fn run(root: &Path) -> Result<(), String> { pub fn run(root: &Path) -> Result<(), String> {