diff --git a/Cargo.lock b/Cargo.lock
index 46d13e5..bb2e9cc 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -5197,6 +5197,7 @@ dependencies = [
"figcraft-doc",
"figcraft-engine",
"figcraft-render",
+ "figcraft-svg",
"image",
"serde_json",
]
diff --git a/assets/app-icon/figcraft-1024.png b/assets/app-icon/figcraft-1024.png
index 22a722f..967d1af 100644
Binary files a/assets/app-icon/figcraft-1024.png and b/assets/app-icon/figcraft-1024.png differ
diff --git a/assets/app-icon/figcraft.svg b/assets/app-icon/figcraft.svg
new file mode 100644
index 0000000..7e30a36
--- /dev/null
+++ b/assets/app-icon/figcraft.svg
@@ -0,0 +1 @@
+
diff --git a/assets/app-icon/hicolor/scalable/apps/ai.storyteller.figcraft.svg b/assets/app-icon/hicolor/scalable/apps/ai.storyteller.figcraft.svg
new file mode 100644
index 0000000..7e30a36
--- /dev/null
+++ b/assets/app-icon/hicolor/scalable/apps/ai.storyteller.figcraft.svg
@@ -0,0 +1 @@
+
diff --git a/xtask/Cargo.toml b/xtask/Cargo.toml
index e295eae..ea28683 100644
--- a/xtask/Cargo.toml
+++ b/xtask/Cargo.toml
@@ -11,4 +11,5 @@ figcraft-doc = { workspace = true }
figcraft-color = { workspace = true }
figcraft-render = { workspace = true }
figcraft-engine = { workspace = true }
+figcraft-svg = { workspace = true }
image = { workspace = true }
diff --git a/xtask/src/icon.rs b/xtask/src/icon.rs
index 17c69c4..9f9d4c8 100644
--- a/xtask/src/icon.rs
+++ b/xtask/src/icon.rs
@@ -109,6 +109,17 @@ pub fn generate(root: &std::path::Path) -> bool {
ico.extend_from_slice(png);
}
ok &= std::fs::write(dir.join("figcraft.ico"), ico).is_ok();
+ // Scalable SVG (same artwork, written by FigCraft's SVG exporter).
+ let tops: Vec<_> = doc.node(page).map(|p| p.children.clone()).unwrap_or_default();
+ match figcraft_svg::export_svg(&doc, &tops, &Default::default()) {
+ Some(svg) => {
+ let sd = dir.join("hicolor/scalable/apps");
+ let _ = std::fs::create_dir_all(&sd);
+ ok &= std::fs::write(dir.join("figcraft.svg"), &svg).is_ok();
+ ok &= std::fs::write(sd.join("ai.storyteller.figcraft.svg"), &svg).is_ok();
+ }
+ None => ok = false,
+ }
eprintln!("icon: wrote {}", dir.display());
ok
}