diff --git a/ASSETS.md b/ASSETS.md index 3233c99d0..15bf448ec 100644 --- a/ASSETS.md +++ b/ASSETS.md @@ -228,9 +228,12 @@ Generated-in-code art is original and has no file to list. This covers the defau | `assets/icons/dc-transform-panel.svg` | VectorCraft contributors | Original work, drawn for VectorCraft | MIT OR Apache-2.0 | | | `assets/icons/dc-transparency.svg` | VectorCraft contributors | Original work, drawn for VectorCraft | MIT OR Apache-2.0 | | | `assets/icons/dc-twirl.svg` | VectorCraft contributors | Original work, drawn for VectorCraft | MIT OR Apache-2.0 | | +| `assets/icons/dc-type.svg` | VectorCraft contributors | Original work, drawn for VectorCraft | MIT OR Apache-2.0 | | | `assets/icons/dc-type-area.svg` | VectorCraft contributors | Original work, drawn for VectorCraft | MIT OR Apache-2.0 | | | `assets/icons/dc-type-path.svg` | VectorCraft contributors | Original work, drawn for VectorCraft | MIT OR Apache-2.0 | | | `assets/icons/dc-type-vertical.svg` | VectorCraft contributors | Original work, drawn for VectorCraft | MIT OR Apache-2.0 | | +| `assets/icons/dc-type-vertical-area.svg` | VectorCraft contributors | Original work, drawn for VectorCraft | MIT OR Apache-2.0 | | +| `assets/icons/dc-type-vertical-path.svg` | VectorCraft contributors | Original work, drawn for VectorCraft | MIT OR Apache-2.0 | | | `assets/icons/dc-width-profile.svg` | VectorCraft contributors | Original work, drawn for VectorCraft | MIT OR Apache-2.0 | | | `assets/icons/dc-width.svg` | VectorCraft contributors | Original work, drawn for VectorCraft | MIT OR Apache-2.0 | | | `assets/icons/dc-wrinkle.svg` | VectorCraft contributors | Original work, drawn for VectorCraft | MIT OR Apache-2.0 | | diff --git a/assets/icons/dc-touch-type.svg b/assets/icons/dc-touch-type.svg index f5af072c9..24b305c87 100644 --- a/assets/icons/dc-touch-type.svg +++ b/assets/icons/dc-touch-type.svg @@ -1 +1 @@ - + diff --git a/assets/icons/dc-type-area.svg b/assets/icons/dc-type-area.svg index f37960dae..31e53d2e0 100644 --- a/assets/icons/dc-type-area.svg +++ b/assets/icons/dc-type-area.svg @@ -1 +1 @@ - + diff --git a/assets/icons/dc-type-path.svg b/assets/icons/dc-type-path.svg index 42584412c..6fc3fc0a6 100644 --- a/assets/icons/dc-type-path.svg +++ b/assets/icons/dc-type-path.svg @@ -1 +1 @@ - + diff --git a/assets/icons/dc-type-vertical-area.svg b/assets/icons/dc-type-vertical-area.svg new file mode 100644 index 000000000..e5bd3c533 --- /dev/null +++ b/assets/icons/dc-type-vertical-area.svg @@ -0,0 +1 @@ + diff --git a/assets/icons/dc-type-vertical-path.svg b/assets/icons/dc-type-vertical-path.svg new file mode 100644 index 000000000..66a30346a --- /dev/null +++ b/assets/icons/dc-type-vertical-path.svg @@ -0,0 +1 @@ + diff --git a/assets/icons/dc-type-vertical.svg b/assets/icons/dc-type-vertical.svg index d72855530..e7f157b44 100644 --- a/assets/icons/dc-type-vertical.svg +++ b/assets/icons/dc-type-vertical.svg @@ -1 +1 @@ - + diff --git a/assets/icons/dc-type.svg b/assets/icons/dc-type.svg new file mode 100644 index 000000000..5ddf5a50e --- /dev/null +++ b/assets/icons/dc-type.svg @@ -0,0 +1 @@ + diff --git a/crates/tools/src/catalog.rs b/crates/tools/src/catalog.rs index ac18d6beb..9bbd7cbdf 100644 --- a/crates/tools/src/catalog.rs +++ b/crates/tools/src/catalog.rs @@ -37,8 +37,8 @@ pub const TOOL_GROUPS: &[&[ToolInfo]] = &[ t("areaType", "Area Type Tool", None, "tool-type-area"), t("typeOnPath", "Type on a Path Tool", None, "tool-type-path"), t("verticalType", "Vertical Type Tool", None, "tool-type-vertical"), - t("verticalAreaType", "Vertical Area Type Tool", None, "tool-type-vertical"), - t("verticalTypeOnPath", "Vertical Type on a Path Tool", None, "tool-type-path"), + t("verticalAreaType", "Vertical Area Type Tool", None, "tool-type-vertical-area"), + t("verticalTypeOnPath", "Vertical Type on a Path Tool", None, "tool-type-vertical-path"), t("touchType", "Touch Type Tool", Some("Shift+T"), "tool-touch-type"), ], &[ diff --git a/crates/ui-egui/src/icon_data.rs b/crates/ui-egui/src/icon_data.rs index 33ddde543..579df2187 100644 --- a/crates/ui-egui/src/icon_data.rs +++ b/crates/ui-egui/src/icon_data.rs @@ -174,9 +174,12 @@ pub static ICONS: &[(&str, &[u8])] = &[ ("dc-transform-panel", include_bytes!("../../../assets/icons/dc-transform-panel.svg")), ("dc-transparency", include_bytes!("../../../assets/icons/dc-transparency.svg")), ("dc-twirl", include_bytes!("../../../assets/icons/dc-twirl.svg")), + ("dc-type", include_bytes!("../../../assets/icons/dc-type.svg")), ("dc-type-area", include_bytes!("../../../assets/icons/dc-type-area.svg")), ("dc-type-path", include_bytes!("../../../assets/icons/dc-type-path.svg")), ("dc-type-vertical", include_bytes!("../../../assets/icons/dc-type-vertical.svg")), + ("dc-type-vertical-area", include_bytes!("../../../assets/icons/dc-type-vertical-area.svg")), + ("dc-type-vertical-path", include_bytes!("../../../assets/icons/dc-type-vertical-path.svg")), ("dc-width", include_bytes!("../../../assets/icons/dc-width.svg")), ("dc-width-profile", include_bytes!("../../../assets/icons/dc-width-profile.svg")), ("dc-wrinkle", include_bytes!("../../../assets/icons/dc-wrinkle.svg")), diff --git a/crates/ui-egui/src/icons.rs b/crates/ui-egui/src/icons.rs index 8987cc64c..a3601af18 100644 --- a/crates/ui-egui/src/icons.rs +++ b/crates/ui-egui/src/icons.rs @@ -29,10 +29,12 @@ pub fn tool_icon(name: &str) -> &'static str { "tool-pen-delete" => "pen-tool-delete", "tool-anchor" => "dc-anchor", "tool-curvature" => "spline", - "tool-type" => "type", + "tool-type" => "dc-type", "tool-type-area" => "dc-type-area", "tool-type-path" => "dc-type-path", "tool-type-vertical" => "dc-type-vertical", + "tool-type-vertical-area" => "dc-type-vertical-area", + "tool-type-vertical-path" => "dc-type-vertical-path", "tool-touch-type" => "dc-touch-type", "tool-line" => "dc-line", "tool-arc" => "dc-arc", @@ -212,6 +214,20 @@ mod tests { assert_ne!(add, delete, "plus and minus differ"); } + /// The seven type tools each have an icon of their own, drawn for VectorCraft (the vertical + /// Area and Path tools used to borrow the horizontal ones' icons). + #[test] + fn every_type_tool_has_its_own_icon_with_the_same_t() { + let tools = ["type", "areaType", "typeOnPath", "verticalType", "verticalAreaType", "verticalTypeOnPath", "touchType"]; + let names: Vec<&str> = tools.iter().map(|id| tool_icon(vectorcraft_tools::catalog::tool_info(id).unwrap().icon)).collect(); + let unique: std::collections::BTreeSet<_> = names.iter().collect(); + assert_eq!(unique.len(), tools.len(), "{names:?}"); + for name in &names { + assert!(name.starts_with("dc-"), "{name} is drawn for VectorCraft"); + assert!(exists(name), "{name}"); + } + } + #[test] fn shared_catalog_preserves_fallback_and_tool_aliases() { let ImageSource::Bytes { uri, bytes } = source("missing-icon") else { panic!("expected SVG bytes") };