mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-11-11 22:22:25 +00:00
G5: built-in Skill Icons symbol library
Five symbol libraries; MCP docs list Skill Icons with the other generated symbol libraries.
This commit is contained in:
@@ -159,6 +159,7 @@ pub const BUILTIN: &[BuiltinSymbolLibrary] = &[
|
||||
BuiltinSymbolLibrary { id: "ui-frames", name: "UI Frames", make: ui_frames },
|
||||
BuiltinSymbolLibrary { id: "map-markers", name: "Map Markers", make: map_markers },
|
||||
BuiltinSymbolLibrary { id: "inventory-icons", name: "Inventory Icons", make: inventory_icons },
|
||||
BuiltinSymbolLibrary { id: "skill-icons", name: "Skill Icons", make: skill_icons },
|
||||
];
|
||||
|
||||
/// Built-in library `id`, made once.
|
||||
@@ -312,6 +313,51 @@ fn inventory_icons() -> SymbolLibrary {
|
||||
SymbolLibrary { name: "Inventory Icons".into(), doc }
|
||||
}
|
||||
|
||||
/// Skill Icons: attack, defend, heal, buff and ult marks for RPG/UI art (original, no 9-slice).
|
||||
fn skill_icons() -> SymbolLibrary {
|
||||
let c = Point::ZERO;
|
||||
let attack = [(-18.0, 14.0), (-6.0, 2.0), (-2.0, 6.0), (18.0, -14.0), (14.0, -18.0), (-6.0, -2.0), (-10.0, 2.0), (-18.0, 6.0)];
|
||||
let defend = [(0.0, -18.0), (14.0, -10.0), (12.0, 6.0), (0.0, 18.0), (-12.0, 6.0), (-14.0, -10.0)];
|
||||
let heal = [
|
||||
(-4.0, -18.0),
|
||||
(4.0, -18.0),
|
||||
(4.0, -4.0),
|
||||
(18.0, -4.0),
|
||||
(18.0, 4.0),
|
||||
(4.0, 4.0),
|
||||
(4.0, 18.0),
|
||||
(-4.0, 18.0),
|
||||
(-4.0, 4.0),
|
||||
(-18.0, 4.0),
|
||||
(-18.0, -4.0),
|
||||
(-4.0, -4.0),
|
||||
];
|
||||
let buff = [(0.0, -18.0), (10.0, -2.0), (4.0, -2.0), (4.0, 18.0), (-4.0, 18.0), (-4.0, -2.0), (-10.0, -2.0)];
|
||||
let attack: Vec<Point> = attack.iter().map(|&(x, y)| Point::new(x, y)).collect();
|
||||
let defend: Vec<Point> = defend.iter().map(|&(x, y)| Point::new(x, y)).collect();
|
||||
let heal: Vec<Point> = heal.iter().map(|&(x, y)| Point::new(x, y)).collect();
|
||||
let buff: Vec<Point> = buff.iter().map(|&(x, y)| Point::new(x, y)).collect();
|
||||
let icons = [
|
||||
("Attack", vectorcraft_geom::PathData::single(vectorcraft_geom::SubPath::polyline(&attack, true)), "#e74c3c"),
|
||||
("Defend", vectorcraft_geom::PathData::single(vectorcraft_geom::SubPath::polyline(&defend, true)), "#3498db"),
|
||||
("Heal", vectorcraft_geom::PathData::single(vectorcraft_geom::SubPath::polyline(&heal, true)), "#2ecc71"),
|
||||
("Buff", vectorcraft_geom::PathData::single(vectorcraft_geom::SubPath::polyline(&buff, true)), "#f1c40f"),
|
||||
("Ult", shapes::star(c, 18.0, 7.0, 8, 0.0), "#9b59b6"),
|
||||
];
|
||||
let mut doc = Document::new(100.0, 100.0);
|
||||
for (name, path, hex) in icons {
|
||||
let fill = Color::from_hex(hex).unwrap_or(Color::BLACK);
|
||||
let edge = fill.lerp(&Color::BLACK, 0.35);
|
||||
let id = doc.alloc_id();
|
||||
let art = Node::path(id, path, Appearance::basic(Paint::solid(fill), Paint::solid(edge), 1.25));
|
||||
let Ok((art, size, _)) = normalize(art) else { continue };
|
||||
doc.symbols.push(Symbol { dynamic: false, name: name.into(), art: Arc::new(art) });
|
||||
set_natural_size(&mut doc, name, Some(size));
|
||||
}
|
||||
doc.title = "Skill Icons".into();
|
||||
SymbolLibrary { name: "Skill Icons".into(), doc }
|
||||
}
|
||||
|
||||
/// An instance of symbol `name` (what the resource gathering follows).
|
||||
fn instance(name: &str) -> Node {
|
||||
Node::new(NodeId(0), NodeKind::SymbolInstance { symbol: name.into(), xf: Affine::IDENTITY })
|
||||
|
||||
@@ -84,7 +84,7 @@ fn the_builtin_library_is_original_art_generated_in_code() {
|
||||
let mut s = Session::new();
|
||||
let list = run(&mut s, "symbol.libraries", json!({}));
|
||||
let libs = list["libraries"].as_array().unwrap();
|
||||
assert_eq!(libs.len(), 4, "{libs:?}");
|
||||
assert_eq!(libs.len(), 5, "{libs:?}");
|
||||
assert_eq!((libs[0]["id"].as_str(), libs[0]["category"].as_str()), (Some("basic-shapes"), Some("builtIn")));
|
||||
assert_eq!(
|
||||
(libs[1]["id"].as_str(), libs[1]["name"].as_str(), libs[1]["category"].as_str()),
|
||||
@@ -98,6 +98,10 @@ fn the_builtin_library_is_original_art_generated_in_code() {
|
||||
(libs[3]["id"].as_str(), libs[3]["name"].as_str(), libs[3]["category"].as_str()),
|
||||
(Some("inventory-icons"), Some("Inventory Icons"), Some("builtIn"))
|
||||
);
|
||||
assert_eq!(
|
||||
(libs[4]["id"].as_str(), libs[4]["name"].as_str(), libs[4]["category"].as_str()),
|
||||
(Some("skill-icons"), Some("Skill Icons"), Some("builtIn"))
|
||||
);
|
||||
let lib = run(&mut s, "symbol.library", json!({"library": "basic shapes"}));
|
||||
let names: Vec<&str> = lib["symbols"].as_array().unwrap().iter().map(|x| x["name"].as_str().unwrap()).collect();
|
||||
assert_eq!(names, ["Circle", "Square", "Rounded Square", "Triangle", "Diamond", "Hexagon", "Star", "Burst", "Arrow"]);
|
||||
@@ -159,6 +163,32 @@ fn inventory_icons_symbols_add_without_nine_slice() {
|
||||
));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn skill_icons_symbols_add_without_nine_slice() {
|
||||
let mut s = session();
|
||||
let lib = run(&mut s, "symbol.library", json!({"library": "skill-icons"}));
|
||||
let names: Vec<&str> = lib["symbols"].as_array().unwrap().iter().map(|x| x["name"].as_str().unwrap()).collect();
|
||||
assert_eq!(names, ["Attack", "Defend", "Heal", "Buff", "Ult"]);
|
||||
let mut placed = Vec::new();
|
||||
for (i, name) in names.iter().enumerate() {
|
||||
let r = run(
|
||||
&mut s,
|
||||
"symbol.addFromLibrary",
|
||||
json!({"library": "skill-icons", "name": name, "place": true, "x": 100.0 + 80.0 * i as f64, "y": 100.0}),
|
||||
);
|
||||
assert_eq!(r["added"], json!([name]));
|
||||
placed.push(r["placed"].as_u64().unwrap());
|
||||
}
|
||||
let d = doc(&s);
|
||||
for name in &names {
|
||||
assert_eq!(d.symbol_nine_slice(name), None, "{name} should not carry 9-slice guides");
|
||||
}
|
||||
assert!(matches!(
|
||||
d.node(NodeId(placed[0])).map(|n| &n.kind),
|
||||
Some(NodeKind::SymbolInstance { symbol, .. }) if symbol == "Attack"
|
||||
));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn map_markers_symbols_add_without_nine_slice() {
|
||||
let mut s = session();
|
||||
|
||||
@@ -5900,6 +5900,12 @@ axis Y Axis Y ос
|
||||
Crosshair Мерник
|
||||
Checkpoint Контролна точка
|
||||
Inventory Icons Икони на инвентара
|
||||
Skill Icons Икони на умения
|
||||
Attack Атака
|
||||
Defend Защита
|
||||
Heal Лечение
|
||||
Buff Усилване
|
||||
Ult Улт
|
||||
Sword Меч
|
||||
Shield Щит
|
||||
Potion Отвара
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -5944,6 +5944,12 @@ axis Y Axis Y osa
|
||||
Crosshair Nišan
|
||||
Checkpoint Kontrolna tačka
|
||||
Inventory Icons Ikone inventara
|
||||
Skill Icons Ikone vještina
|
||||
Attack Napad
|
||||
Defend Odbrana
|
||||
Heal Iscjeljenje
|
||||
Buff Pojačanje
|
||||
Ult Ult
|
||||
Sword Mač
|
||||
Shield Štit
|
||||
Potion Napitak
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -456,6 +456,12 @@ antiAlias Sharp Nítid
|
||||
Crosshair Punt de mira
|
||||
Checkpoint Punt de control
|
||||
Inventory Icons Icones d’inventari
|
||||
Skill Icons Icones d'habilitat
|
||||
Attack Atac
|
||||
Defend Defensa
|
||||
Heal Curació
|
||||
Buff Potenciació
|
||||
Ult Ult
|
||||
Sword Espasa
|
||||
Shield Escut
|
||||
Potion Poció
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -6128,6 +6128,12 @@ axis Y Axis osa Y
|
||||
Crosshair Zaměřovač
|
||||
Checkpoint Kontrolní bod
|
||||
Inventory Icons Ikony inventáře
|
||||
Skill Icons Ikony dovedností
|
||||
Attack Útok
|
||||
Defend Obrana
|
||||
Heal Léčení
|
||||
Buff Posílení
|
||||
Ult Ult
|
||||
Sword Meč
|
||||
Shield Štít
|
||||
Potion Lektvar
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -5915,6 +5915,12 @@ axis Y Axis Y-akse
|
||||
Crosshair Sigtekorn
|
||||
Checkpoint Kontrolpunkt
|
||||
Inventory Icons Inventarikoner
|
||||
Skill Icons Færdighedsikoner
|
||||
Attack Angreb
|
||||
Defend Forsvar
|
||||
Heal Helbredelse
|
||||
Buff Buff
|
||||
Ult Ult
|
||||
Sword Sværd
|
||||
Shield Skjold
|
||||
Potion Eliksir
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -5711,6 +5711,12 @@ axis Y Axis Y-Achse
|
||||
Crosshair Fadenkreuz
|
||||
Checkpoint Kontrollpunkt
|
||||
Inventory Icons Inventar-Symbole
|
||||
Skill Icons Fähigkeitssymbole
|
||||
Attack Angriff
|
||||
Defend Verteidigung
|
||||
Heal Heilung
|
||||
Buff Buff
|
||||
Ult Ult
|
||||
Sword Schwert
|
||||
Shield Schild
|
||||
Potion Trank
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -6079,6 +6079,12 @@ axis Y Axis Άξονας Y
|
||||
Crosshair Σταυρόνημα
|
||||
Checkpoint Σημείο ελέγχου
|
||||
Inventory Icons Εικονίδια αποθέματος
|
||||
Skill Icons Εικονίδια δεξιοτήτων
|
||||
Attack Επίθεση
|
||||
Defend Άμυνα
|
||||
Heal Θεραπεία
|
||||
Buff Ενίσχυση
|
||||
Ult Ult
|
||||
Sword Ξίφος
|
||||
Shield Ασπίδα
|
||||
Potion Φίλτρο
|
||||
|
||||
|
Can't render this file because it is too large.
|
@@ -6070,6 +6070,12 @@ axis Y Axis Eje Y
|
||||
Crosshair Punto de mira
|
||||
Checkpoint Punto de control
|
||||
Inventory Icons Iconos de inventario
|
||||
Skill Icons Iconos de habilidad
|
||||
Attack Ataque
|
||||
Defend Defensa
|
||||
Heal Curación
|
||||
Buff Mejora
|
||||
Ult Ult
|
||||
Sword Espada
|
||||
Shield Escudo
|
||||
Potion Poción
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -6158,6 +6158,12 @@ axis Y Axis Y-akseli
|
||||
Crosshair Tähtäin
|
||||
Checkpoint Tarkastuskohta
|
||||
Inventory Icons Inventaarioikonit
|
||||
Skill Icons Taitoikonit
|
||||
Attack Hyökkäys
|
||||
Defend Puolustus
|
||||
Heal Parannus
|
||||
Buff Buffi
|
||||
Ult Ult
|
||||
Sword Miekka
|
||||
Shield Kilpi
|
||||
Potion Taikajuoma
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -6123,6 +6123,12 @@ axis Y Axis Axe Y
|
||||
Crosshair Réticule
|
||||
Checkpoint Point de contrôle
|
||||
Inventory Icons Icônes d’inventaire
|
||||
Skill Icons Icônes de compétences
|
||||
Attack Attaque
|
||||
Defend Défense
|
||||
Heal Soin
|
||||
Buff Bonus
|
||||
Ult Ult
|
||||
Sword Épée
|
||||
Shield Bouclier
|
||||
Potion Potion
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -527,6 +527,12 @@ antiAlias Sharp शार्प
|
||||
Crosshair क्रॉसहेयर
|
||||
Checkpoint चेकपॉइंट
|
||||
Inventory Icons इन्वेंटरी आइकन
|
||||
Skill Icons कौशल आइकन
|
||||
Attack आक्रमण
|
||||
Defend रक्षा
|
||||
Heal उपचार
|
||||
Buff बफ़
|
||||
Ult अल्ट
|
||||
Sword तलवार
|
||||
Shield ढाल
|
||||
Potion औषधि
|
||||
|
||||
|
Can't render this file because it is too large.
|
@@ -6111,6 +6111,12 @@ axis Y Axis Y tengely
|
||||
Crosshair Célkereszt
|
||||
Checkpoint Ellenőrzőpont
|
||||
Inventory Icons Leltári ikonok
|
||||
Skill Icons Képességikonok
|
||||
Attack Támadás
|
||||
Defend Védelem
|
||||
Heal Gyógyítás
|
||||
Buff Erősítés
|
||||
Ult Ult
|
||||
Sword Kard
|
||||
Shield Pajzs
|
||||
Potion Bájital
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -5915,6 +5915,12 @@ axis Y Axis Sumbu Y
|
||||
Crosshair Bidik silang
|
||||
Checkpoint Pos pemeriksaan
|
||||
Inventory Icons Ikon Inventaris
|
||||
Skill Icons Ikon Keahlian
|
||||
Attack Serang
|
||||
Defend Bertahan
|
||||
Heal Pulihkan
|
||||
Buff Buff
|
||||
Ult Ult
|
||||
Sword Pedang
|
||||
Shield Perisai
|
||||
Potion Ramuan
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2327 and column 5.
|
@@ -5745,6 +5745,12 @@ axis Y Axis Asse Y
|
||||
Crosshair Mirino
|
||||
Checkpoint Punto di controllo
|
||||
Inventory Icons Icone inventario
|
||||
Skill Icons Icone abilità
|
||||
Attack Attacco
|
||||
Defend Difesa
|
||||
Heal Cura
|
||||
Buff Potenziamento
|
||||
Ult Ult
|
||||
Sword Spada
|
||||
Shield Scudo
|
||||
Potion Pozione
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -5810,6 +5810,12 @@ axis Y Axis Y 軸
|
||||
Crosshair クロスヘア
|
||||
Checkpoint チェックポイント
|
||||
Inventory Icons インベントリアイコン
|
||||
Skill Icons スキルアイコン
|
||||
Attack 攻撃
|
||||
Defend 防御
|
||||
Heal 回復
|
||||
Buff バフ
|
||||
Ult 必殺
|
||||
Sword 剣
|
||||
Shield 盾
|
||||
Potion ポーション
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -6051,6 +6051,12 @@ axis Y Axis Y ღერძი
|
||||
Crosshair სამიზნე
|
||||
Checkpoint საკონტროლო წერტილი
|
||||
Inventory Icons ინვენტარის ხატულები
|
||||
Skill Icons უნარების ხატულები
|
||||
Attack შეტევა
|
||||
Defend თავდაცვა
|
||||
Heal განკურნება
|
||||
Buff გაძლიერება
|
||||
Ult ულტი
|
||||
Sword მახვილი
|
||||
Shield ფარი
|
||||
Potion წამალი
|
||||
|
||||
|
Can't render this file because it is too large.
|
@@ -5706,6 +5706,12 @@ axis Y Axis Y축
|
||||
Crosshair 십자선
|
||||
Checkpoint 체크포인트
|
||||
Inventory Icons 인벤토리 아이콘
|
||||
Skill Icons 스킬 아이콘
|
||||
Attack 공격
|
||||
Defend 방어
|
||||
Heal 치유
|
||||
Buff 버프
|
||||
Ult 궁극기
|
||||
Sword 검
|
||||
Shield 방패
|
||||
Potion 포션
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -5966,6 +5966,12 @@ axis Y Axis Y-as
|
||||
Crosshair Vizier
|
||||
Checkpoint Controlepunt
|
||||
Inventory Icons Inventarisiconen
|
||||
Skill Icons Vaardigheidsiconen
|
||||
Attack Aanval
|
||||
Defend Verdediging
|
||||
Heal Genezen
|
||||
Buff Buff
|
||||
Ult Ult
|
||||
Sword Zwaard
|
||||
Shield Schild
|
||||
Potion Drank
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -5982,6 +5982,12 @@ axis Y Axis Oś Y
|
||||
Crosshair Celownik
|
||||
Checkpoint Punkt kontrolny
|
||||
Inventory Icons Ikony ekwipunku
|
||||
Skill Icons Ikony umiejętności
|
||||
Attack Atak
|
||||
Defend Obrona
|
||||
Heal Leczenie
|
||||
Buff Wzmocnienie
|
||||
Ult Ult
|
||||
Sword Miecz
|
||||
Shield Tarcza
|
||||
Potion Mikstura
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -6043,6 +6043,12 @@ axis Y Axis Eixo Y
|
||||
Crosshair Mira
|
||||
Checkpoint Ponto de verificação
|
||||
Inventory Icons Ícones de inventário
|
||||
Skill Icons Ícones de habilidade
|
||||
Attack Ataque
|
||||
Defend Defesa
|
||||
Heal Cura
|
||||
Buff Buff
|
||||
Ult Ult
|
||||
Sword Espada
|
||||
Shield Escudo
|
||||
Potion Poção
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -5739,6 +5739,12 @@ axis Y Axis Ось Y
|
||||
Crosshair Прицел
|
||||
Checkpoint Контрольная точка
|
||||
Inventory Icons Иконки инвентаря
|
||||
Skill Icons Иконки навыков
|
||||
Attack Атака
|
||||
Defend Защита
|
||||
Heal Лечение
|
||||
Buff Усиление
|
||||
Ult Ульт
|
||||
Sword Меч
|
||||
Shield Щит
|
||||
Potion Зелье
|
||||
|
||||
|
Can't render this file because it is too large.
|
@@ -6151,6 +6151,12 @@ axis Y Axis Y-axel
|
||||
Crosshair Hårkors
|
||||
Checkpoint Kontrollpunkt
|
||||
Inventory Icons Inventarieikoner
|
||||
Skill Icons Färdighetsikoner
|
||||
Attack Attack
|
||||
Defend Försvar
|
||||
Heal Läkning
|
||||
Buff Buff
|
||||
Ult Ult
|
||||
Sword Svärd
|
||||
Shield Sköld
|
||||
Potion Dryck
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 5 and column 25.
|
@@ -6084,6 +6084,12 @@ axis Y Axis Y ekseni
|
||||
Crosshair Nişangah
|
||||
Checkpoint Kontrol noktası
|
||||
Inventory Icons Envanter Simgeleri
|
||||
Skill Icons Yetenek Simgeleri
|
||||
Attack Saldırı
|
||||
Defend Savunma
|
||||
Heal İyileştirme
|
||||
Buff Güçlendirme
|
||||
Ult Ult
|
||||
Sword Kılıç
|
||||
Shield Kalkan
|
||||
Potion İksir
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 5 and column 25.
|
@@ -5725,6 +5725,12 @@ axis Y Axis Вісь Y
|
||||
Crosshair Приціл
|
||||
Checkpoint Контрольна точка
|
||||
Inventory Icons Піктограми інвентарю
|
||||
Skill Icons Іконки навичок
|
||||
Attack Атака
|
||||
Defend Захист
|
||||
Heal Лікування
|
||||
Buff Посилення
|
||||
Ult Ульт
|
||||
Sword Меч
|
||||
Shield Щит
|
||||
Potion Зілля
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 182 and column 5.
|
@@ -5726,6 +5726,12 @@ axis Y Axis Trục Y
|
||||
Crosshair Tâm ngắm
|
||||
Checkpoint Điểm kiểm tra
|
||||
Inventory Icons Biểu tượng túi đồ
|
||||
Skill Icons Biểu tượng kỹ năng
|
||||
Attack Tấn công
|
||||
Defend Phòng thủ
|
||||
Heal Hồi máu
|
||||
Buff Buff
|
||||
Ult Ult
|
||||
Sword Kiếm
|
||||
Shield Khiên
|
||||
Potion Thuốc
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 204 and column 5.
|
@@ -5966,6 +5966,12 @@ axis Y Axis Y 轴
|
||||
Crosshair 准星
|
||||
Checkpoint 检查点
|
||||
Inventory Icons 物品栏图标
|
||||
Skill Icons 技能图标
|
||||
Attack 攻击
|
||||
Defend 防御
|
||||
Heal 治疗
|
||||
Buff 增益
|
||||
Ult 终极技
|
||||
Sword 剑
|
||||
Shield 盾
|
||||
Potion 药水
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 2 and column 73.
|
@@ -5763,6 +5763,12 @@ axis Y Axis Y 軸
|
||||
Crosshair 準星
|
||||
Checkpoint 檢查點
|
||||
Inventory Icons 物品欄圖示
|
||||
Skill Icons 技能圖示
|
||||
Attack 攻擊
|
||||
Defend 防禦
|
||||
Heal 治療
|
||||
Buff 增益
|
||||
Ult 必殺
|
||||
Sword 劍
|
||||
Shield 盾
|
||||
Potion 藥水
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 6 and column 47.
|
@@ -113,7 +113,7 @@ fn the_window_menu_and_the_symbols_panel_open_symbol_libraries() {
|
||||
let under = |e: &crate::menus::MenuEntry| e.path == ["Window", "Symbol Libraries"];
|
||||
let opened: Vec<_> =
|
||||
entries.iter().filter(|e| under(e) && e.command.as_deref() == Some("window.symbolLibrary")).map(|e| e.params["library"].clone()).collect();
|
||||
assert_eq!(opened, [json!("basic-shapes"), json!("ui-frames"), json!("map-markers"), json!("inventory-icons")]);
|
||||
assert_eq!(opened, [json!("basic-shapes"), json!("ui-frames"), json!("map-markers"), json!("inventory-icons"), json!("skill-icons")]);
|
||||
let has = |cmd: &str| entries.iter().find(|e| under(e) && e.command.as_deref() == Some(cmd)).map(|e| e.enabled);
|
||||
assert_eq!(has("window.symbolLibrary.other"), Some(true));
|
||||
assert_eq!(has("ui.saveSymbolLibrary"), Some(false), "no symbols to save yet");
|
||||
|
||||
+8
-6
@@ -1,6 +1,6 @@
|
||||
# Gaps
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-11-10 · **Change:** minor (ruler double-click adds a guide at the pointer, #5239; G5: built-in Status Effects graphic style library; estimate 7–17 → 6–16 h; MCP docs catch-up for UI Frames and Map Markers; previously minor: G5: built-in Inventory Icons symbol library; estimate 8–18 → 7–17 h; previously minor: G9: `.ai` save names a variable font instance's design-space setting, #6388; previously minor: G5: built-in Game Trails brush library; estimate 9–19 → 8–18 h; previously minor: Edit › Edit Custom Dictionary…: its dialog adds, deletes and changes the custom dictionary's words, #4936; previously minor: docs tidy-up, no content change: stray notes at the top moved into the revision table; scores and estimates unchanged; previously minor: G5: built-in Game HUD graphic style library; estimate 10–20 → 9–19 h; previously minor: G5: built-in Map Markers symbol library; estimate 11–21 → 10–20 h; previously minor: right-click on type: Spelling › Auto Spell Check, with its check mark, #4936; previously minor: right-click on a word Auto Spell Check underlined: its suggestions, Ignore All and Add to Dictionary, #4936; previously minor: G2: Effect Gallery thumbnails and in-dialog preview; estimate 1–2 h → 0; Auto Spell Check: `edit.autoSpellCheck` underlines the unknown words, #4936; previously minor: PDF editable import preserves authored ActualText once, including empty/nested spans and authored ordering (#6165); cross-line/style layout remains approximate; scores and estimates unchanged; PDF marked-text export (#6309): compatible glyphs stay on one layout line with per-glyph offsets; scores and estimates unchanged; G5: built-in UI Frames symbol library with default 9-slice; estimate 11–21 h; previously minor: G5: dynamic symbol part on-canvas takes opacity, blend, gradient and pattern; docs Overlap/auto-corners sync; estimate 12–22 h; previously minor: interim macOS cursor delivery, #2292; native validation pending; scores and estimates unchanged; previously minor: Control bar › Snapping includes the existing Snap to Glyph and Alignment Guides toggles (#6164); scores and estimates unchanged; previously minor: G5 docs: Art brush Overlap, Pattern brush auto corners and Global Edit Shift-click leave-out moved from Missing to Done (code already shipped); previously minor: custom dictionary and Ignore All: `text.spelling.addWord`, `removeWord`, `changeWord`, `dictionary` and `ignoreAll`, #4936; previously minor: EPS import: embedded fonts (composite, Type 42, CID-keyed, Type 1, CFF FontSet) draw their glyphs; spell check engine: `text.spelling.check` and `text.spelling.suggest` on craft-proof, #4936; previously minor: floating tab groups collapse into the side icon rail and opened rail panels fold back into it, #5925 in part; G9: EPS gradients drawn as abutting strips import as one gradient, without seams; Tools stays beside the canvas with left-side panels; new gradients follow document color mode; Selection QoL: marquee modes and visible feedback, #5313; #3380 deletion-only review follow-up: independent survivors keep gradient placement, owned subpaths avoid discarded copies, and contracts/status/evidence are clarified; endpoint highlighting remains open; scores and estimates unchanged; Indian-language hyphenation review and license allowlist, #4947; opening a slow file shows a progress window, part of #5930; Hindi catalog and contributor loanword preferences; agent wording pass complete; wider native proofreading welcome; an image zoomed in on is separated, colorized or proofed only where it shows (#4155); scores and estimates unchanged; a document's first frame renders on the render worker, so opening a heavy file no longer freezes the window; scores and estimates unchanged; large images in CMYK documents are shrunk before they are separated into ink planes (#4155); scores and estimates unchanged; `.ai` paths with a Calligraphic brush open brushed, with the 6D Art Pen's channels, and Windows reads the pen's tilt and barrel rotation, #372; scores and estimates unchanged; Compound Shapes add-on, beyond Illustrator; scores and estimates unchanged; Contour add-on, beyond Illustrator; scores and estimates unchanged; a slow first frame is waited for instead of restarting without the graphics adapter, and the menu bar no longer waits for the installed fonts' scan; scores and estimates unchanged) · **Target:** Adobe Illustrator 2026 (30.x)
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-11-11 · **Change:** minor (G5: built-in Skill Icons symbol library; estimate 6–16 → 5–15 h; previously minor: ruler double-click adds a guide at the pointer, #5239; G5: built-in Status Effects graphic style library; estimate 7–17 → 6–16 h; MCP docs catch-up for UI Frames and Map Markers; previously minor: G5: built-in Inventory Icons symbol library; estimate 8–18 → 7–17 h; previously minor: G9: `.ai` save names a variable font instance's design-space setting, #6388; previously minor: G5: built-in Game Trails brush library; estimate 9–19 → 8–18 h; previously minor: Edit › Edit Custom Dictionary…: its dialog adds, deletes and changes the custom dictionary's words, #4936; previously minor: docs tidy-up, no content change: stray notes at the top moved into the revision table; scores and estimates unchanged; previously minor: G5: built-in Game HUD graphic style library; estimate 10–20 → 9–19 h; previously minor: G5: built-in Map Markers symbol library; estimate 11–21 → 10–20 h; previously minor: right-click on type: Spelling › Auto Spell Check, with its check mark, #4936; previously minor: right-click on a word Auto Spell Check underlined: its suggestions, Ignore All and Add to Dictionary, #4936; previously minor: G2: Effect Gallery thumbnails and in-dialog preview; estimate 1–2 h → 0; Auto Spell Check: `edit.autoSpellCheck` underlines the unknown words, #4936; previously minor: PDF editable import preserves authored ActualText once, including empty/nested spans and authored ordering (#6165); cross-line/style layout remains approximate; scores and estimates unchanged; PDF marked-text export (#6309): compatible glyphs stay on one layout line with per-glyph offsets; scores and estimates unchanged; G5: built-in UI Frames symbol library with default 9-slice; estimate 11–21 h; previously minor: G5: dynamic symbol part on-canvas takes opacity, blend, gradient and pattern; docs Overlap/auto-corners sync; estimate 12–22 h; previously minor: interim macOS cursor delivery, #2292; native validation pending; scores and estimates unchanged; previously minor: Control bar › Snapping includes the existing Snap to Glyph and Alignment Guides toggles (#6164); scores and estimates unchanged; previously minor: G5 docs: Art brush Overlap, Pattern brush auto corners and Global Edit Shift-click leave-out moved from Missing to Done (code already shipped); previously minor: custom dictionary and Ignore All: `text.spelling.addWord`, `removeWord`, `changeWord`, `dictionary` and `ignoreAll`, #4936; previously minor: EPS import: embedded fonts (composite, Type 42, CID-keyed, Type 1, CFF FontSet) draw their glyphs; spell check engine: `text.spelling.check` and `text.spelling.suggest` on craft-proof, #4936; previously minor: floating tab groups collapse into the side icon rail and opened rail panels fold back into it, #5925 in part; G9: EPS gradients drawn as abutting strips import as one gradient, without seams; Tools stays beside the canvas with left-side panels; new gradients follow document color mode; Selection QoL: marquee modes and visible feedback, #5313; #3380 deletion-only review follow-up: independent survivors keep gradient placement, owned subpaths avoid discarded copies, and contracts/status/evidence are clarified; endpoint highlighting remains open; scores and estimates unchanged; Indian-language hyphenation review and license allowlist, #4947; opening a slow file shows a progress window, part of #5930; Hindi catalog and contributor loanword preferences; agent wording pass complete; wider native proofreading welcome; an image zoomed in on is separated, colorized or proofed only where it shows (#4155); scores and estimates unchanged; a document's first frame renders on the render worker, so opening a heavy file no longer freezes the window; scores and estimates unchanged; large images in CMYK documents are shrunk before they are separated into ink planes (#4155); scores and estimates unchanged; `.ai` paths with a Calligraphic brush open brushed, with the 6D Art Pen's channels, and Windows reads the pen's tilt and barrel rotation, #372; scores and estimates unchanged; Compound Shapes add-on, beyond Illustrator; scores and estimates unchanged; Contour add-on, beyond Illustrator; scores and estimates unchanged; a slow first frame is waited for instead of restarting without the graphics adapter, and the menu bar no longer waits for the installed fonts' scan; scores and estimates unchanged) · **Target:** Adobe Illustrator 2026 (30.x)
|
||||
|
||||
## Feature submission evidence
|
||||
|
||||
@@ -90,7 +90,7 @@ stage ([ROADMAP.md](../ROADMAP.md)).
|
||||
| 8 | [G2 Photoshop-style raster effects and the Effect Gallery](#g2-photoshop-style-raster-effects-and-the-effect-gallery) | 0 | no | [effects-parity.md](effects-parity.md) |
|
||||
| 9 | [G13 Illustrator 2026 (30.x) additions](#g13-illustrator-2026-30x-additions) | 13–23 | no | [target-app-parity.md](target-app-parity.md) |
|
||||
| 10 | [G14 Pen hardware beyond Windows pressure](#g14-pen-hardware-beyond-windows-pressure) | 4–10 | Wayland pressure | [hardware-parity.md](hardware-parity.md) |
|
||||
| 11 | [G5 Brushes, symbols and libraries](#g5-brushes-symbols-and-libraries) | 7–17 | no | [target-app-parity.md](target-app-parity.md) |
|
||||
| 11 | [G5 Brushes, symbols and libraries](#g5-brushes-symbols-and-libraries) | 5–15 | no | [target-app-parity.md](target-app-parity.md) |
|
||||
| 12 | [G3 3D and Materials](#g3-3d-and-materials) | 25–45 | no | [effects-parity.md](effects-parity.md) |
|
||||
| 13 | [G7 Views and windows](#g7-views-and-windows) | 15–25 | no | [ui-parity.md](ui-parity.md) |
|
||||
| 14 | [G6 Automation and scripting](#g6-automation-and-scripting) | 4–8 | no | [target-app-parity.md](target-app-parity.md) |
|
||||
@@ -618,9 +618,10 @@ macOS cursor delivery (#2292) is narrowed to a native host adapter using the exi
|
||||
symbol static drops them; stored in the native format.
|
||||
Color eyedropper for scatter, art and pattern brushes (Hue Shift colorization; samples canvas art);
|
||||
symbol libraries ([public source](https://helpx.adobe.com/illustrator/desktop/manage-objects/traces-mockups-symbols/create-or-import-symbol-libraries.html)): Window › Symbol Libraries and the Symbols panel's Symbol
|
||||
Libraries Menu open each library in a library panel of its own (four original libraries generated in code,
|
||||
Libraries Menu open each library in a library panel of its own (five original libraries generated in code,
|
||||
Basic Shapes, UI Frames with default 9-slice guides on Panel, Button and Bar, Map Markers with Pin,
|
||||
Flag, Crosshair and Checkpoint, and Inventory Icons with Sword, Shield, Potion, Key and Gem; User Defined; Other
|
||||
Flag, Crosshair and Checkpoint, Inventory Icons with Sword, Shield, Potion, Key and Gem, and Skill Icons with
|
||||
Attack, Defend, Heal, Buff and Ult; User Defined; Other
|
||||
Library… reads the symbols of any document VectorCraft opens); a click
|
||||
adds a symbol to the document's Symbols with its Symbol Options and the resources it uses, as one undo
|
||||
step, and dragging one onto the canvas also places it; Save Symbols / Save Symbol Library writes the
|
||||
@@ -649,10 +650,10 @@ macOS cursor delivery (#2292) is narrowed to a native host adapter using the exi
|
||||
with Poison Tint, Freeze Edge, Burn Aura, Stun Pulse, Stealth Fade and Shield Buff; User Defined; Other
|
||||
Library…; `graphicStyle.libraries`, `graphicStyle.addFromLibrary`).
|
||||
- **Missing:** more built-in brush libraries beyond the five shipped (and further graphic-style libraries beyond the eight shipped, and further symbol libraries beyond Basic
|
||||
Shapes, UI Frames, Map Markers and Inventory Icons; original, generated in code, never Adobe's); dynamic symbols' `.ai` read and write;
|
||||
Shapes, UI Frames, Map Markers, Inventory Icons and Skill Icons; original, generated in code, never Adobe's); dynamic symbols' `.ai` read and write;
|
||||
Global Edit of groups holding type or images, rotated copies as matches and highlighting matches before the
|
||||
start; 9-slice guides outside the symbol's art (a dragged guide stops at the art's edge).
|
||||
- **Estimate:** 6–16 h.
|
||||
- **Estimate:** 5–15 h.
|
||||
|
||||
## G3 3D and Materials
|
||||
|
||||
@@ -853,6 +854,7 @@ trap, and the defaults (0.25 pt, 100%, 40%) are VectorCraft's own, the pages giv
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-11-11 | minor | G5: built-in Skill Icons symbol library (Attack, Defend, Heal, Buff, Ult); Missing trimmed; estimate 6–16 → 5–15 h; MCP Symbol libraries list Skill Icons. |
|
||||
| 2026-11-10 | minor | G6: MCP catalogue (#6460): headless lists `UI_COMMANDS` (`ui: true`), eight prompts, effect vs command ids, 33 tools, commands/reference; estimate unchanged. |
|
||||
| 2026-11-11 | minor | G5: built-in Status Effects graphic style library (Poison Tint, Freeze Edge, Burn Aura, Stun Pulse, Stealth Fade, Shield Buff); Missing trimmed; estimate 7–17 → 6–16 h; MCP docs list UI Frames and Map Markers under Symbol libraries. |
|
||||
| 2026-11-11 | minor | G5: built-in Inventory Icons symbol library (Sword, Shield, Potion, Key, Gem; no default 9-slice); Missing trimmed; estimate 8–18 → 7–17 h. |
|
||||
|
||||
+2
-2
@@ -3138,8 +3138,8 @@ with the same extension and bytes as one there, loads as that User Defined libra
|
||||
|
||||
## Symbol libraries
|
||||
|
||||
Symbol libraries are read-only sets of symbols: four generated in code (Basic Shapes, UI Frames, Map Markers,
|
||||
Inventory Icons), the `.vectorcraft` files in
|
||||
Symbol libraries are read-only sets of symbols: five generated in code (Basic Shapes, UI Frames, Map Markers,
|
||||
Inventory Icons, Skill Icons), the `.vectorcraft` files in
|
||||
the user library folder of the desktop app (User Defined) and the symbols of any document loaded with
|
||||
`symbol.loadLibrary`. `symbol.libraries` lists them (`id`, `name`, `category`: `builtIn`, `user` or `loaded`, `count`)
|
||||
and `symbol.library {library}` returns one's symbols (`name`, `size`, `registration`, `exportType`; `library` is an
|
||||
|
||||
+3
-2
@@ -1,6 +1,6 @@
|
||||
# Roadmap: milestones and what's next
|
||||
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-11-10 · **Change:** minor (M10/G5: Status Effects graphic style library; MCP docs catch-up for symbol libraries; previously minor: M10/G5: Inventory Icons built-in symbol library; previously minor: Edit › Edit Custom Dictionary…: its dialog adds, deletes and changes the custom dictionary's words, #4936; previously minor: M10/G5: Game HUD graphic style library; previously minor: resizable icon-strip flyouts and bottom-aligned panel footers, #5713; previously minor: M10/G5: Map Markers built-in symbol library; previously minor: right-click on type: Spelling › Auto Spell Check, with its check mark, #4936; previously minor: right-click on a word Auto Spell Check underlined: its suggestions, Ignore All and Add to Dictionary, #4936; previously minor: G2: Effect Gallery thumbnails and in-dialog preview are in; Auto Spell Check: `edit.autoSpellCheck` underlines the unknown words, #4936; previously minor: PDF editable import preserves authored ActualText once, including empty/nested spans and authored ordering (#6165); cross-line/style layout remains approximate; scores and estimates unchanged; PDF marked-text export (#6309): compatible glyphs stay on one layout line with per-glyph offsets; scores and estimates unchanged; interim macOS cursor delivery, #2292; native validation pending; scores and estimates unchanged; Control bar › Snapping includes the existing Snap to Glyph and Alignment Guides toggles (#6164); scores and estimates unchanged; custom dictionary and Ignore All: `text.spelling.addWord`, `removeWord`, `changeWord`, `dictionary` and `ignoreAll`, #4936; previously minor: EPS import: embedded fonts (composite, Type 42, CID-keyed, Type 1, CFF FontSet) draw their glyphs; spell check engine: `text.spelling.check` and `text.spelling.suggest` on craft-proof, #4936; previously minor: floating tab groups collapse into the side icon rail and opened rail panels fold back into it, #5925 in part; M4/M7: `.ai`/EPS type keeps its tab stops, and right-aligned lines with tabs lay out as the file's page, #6147; M4/M7: `.ai`/EPS type from the text document lays its lines out closer to the file's page, within limits, #6137; numeric fields step on wheel hover without taking keyboard focus, #5949; Character Styles panel: a double-click on a style's row opens its Character Style Options; the dialog keeps a fixed width and scrolls its sections, so its buttons stay on screen; Selection QoL: marquee modes and visible feedback, #5313; SVG CSS classes survive export and repeated import in all four styling modes (#2480); current-main integration retains event attributes and scripts; #3380 deletion-only review follow-up: independent survivors keep gradient placement, owned subpaths avoid discarded copies, and contracts/status/evidence are clarified; endpoint highlighting remains open; scores and estimates unchanged; Indian-language hyphenation review and license allowlist, #4947; Hindi catalog and contributor loanword preferences; full wording review in progress; Effect dialogs: a colour swatch beside a hex colour opens the Color Picker, #5365; shape tools move the selection from its centre point and turn it from the zone outside a box corner, #5477; scores and estimates unchanged) · **Target:** Adobe Illustrator 2026 (30.x)
|
||||
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-11-10 · **Change:** minor (M10/G5: Skill Icons symbol library; MCP docs list Skill Icons; previously minor: M10/G5: Status Effects graphic style library; MCP docs catch-up for symbol libraries; previously minor: M10/G5: Inventory Icons built-in symbol library; previously minor: Edit › Edit Custom Dictionary…: its dialog adds, deletes and changes the custom dictionary's words, #4936; previously minor: M10/G5: Game HUD graphic style library; previously minor: resizable icon-strip flyouts and bottom-aligned panel footers, #5713; previously minor: M10/G5: Map Markers built-in symbol library; previously minor: right-click on type: Spelling › Auto Spell Check, with its check mark, #4936; previously minor: right-click on a word Auto Spell Check underlined: its suggestions, Ignore All and Add to Dictionary, #4936; previously minor: G2: Effect Gallery thumbnails and in-dialog preview are in; Auto Spell Check: `edit.autoSpellCheck` underlines the unknown words, #4936; previously minor: PDF editable import preserves authored ActualText once, including empty/nested spans and authored ordering (#6165); cross-line/style layout remains approximate; scores and estimates unchanged; PDF marked-text export (#6309): compatible glyphs stay on one layout line with per-glyph offsets; scores and estimates unchanged; interim macOS cursor delivery, #2292; native validation pending; scores and estimates unchanged; Control bar › Snapping includes the existing Snap to Glyph and Alignment Guides toggles (#6164); scores and estimates unchanged; custom dictionary and Ignore All: `text.spelling.addWord`, `removeWord`, `changeWord`, `dictionary` and `ignoreAll`, #4936; previously minor: EPS import: embedded fonts (composite, Type 42, CID-keyed, Type 1, CFF FontSet) draw their glyphs; spell check engine: `text.spelling.check` and `text.spelling.suggest` on craft-proof, #4936; previously minor: floating tab groups collapse into the side icon rail and opened rail panels fold back into it, #5925 in part; M4/M7: `.ai`/EPS type keeps its tab stops, and right-aligned lines with tabs lay out as the file's page, #6147; M4/M7: `.ai`/EPS type from the text document lays its lines out closer to the file's page, within limits, #6137; numeric fields step on wheel hover without taking keyboard focus, #5949; Character Styles panel: a double-click on a style's row opens its Character Style Options; the dialog keeps a fixed width and scrolls its sections, so its buttons stay on screen; Selection QoL: marquee modes and visible feedback, #5313; SVG CSS classes survive export and repeated import in all four styling modes (#2480); current-main integration retains event attributes and scripts; #3380 deletion-only review follow-up: independent survivors keep gradient placement, owned subpaths avoid discarded copies, and contracts/status/evidence are clarified; endpoint highlighting remains open; scores and estimates unchanged; Indian-language hyphenation review and license allowlist, #4947; Hindi catalog and contributor loanword preferences; full wording review in progress; Effect dialogs: a colour swatch beside a hex colour opens the Color Picker, #5365; shape tools move the selection from its centre point and turn it from the zone outside a box corner, #5477; scores and estimates unchanged) · **Target:** Adobe Illustrator 2026 (30.x)
|
||||
>
|
||||
> Vector Halftone preview update (2026-11-10): temporary dot selection marks are hidden, and the bounding box stays available (#6369).
|
||||
>
|
||||
@@ -149,7 +149,7 @@ native wording review, layout checks and a web Devanagari font remain. [Notes](l
|
||||
| M7 | Type (point/area/path, editing, styles, OpenType, threading, glyphs) | Spell check engine: `text.spelling.check` and `text.spelling.suggest` on craft-proof and the custom dictionary and Ignore All commands and Auto Spell Check with its right-click suggestions, Ignore All and Add to Dictionary, and Spelling › Auto Spell Check in the context menu of type, and the Edit Custom Dictionary dialog (#4936; the Check Spelling dialog remains); Right-aligned area type sets the text after a line's last tab against the right edge, the text before it at its stops (#6147); A line a soft return ends is justified as a wrapped line is (#6137); Indian-language pattern hyphenation preserves syllables in both composers (#4947); 🟡 Hanging punctuation keeps its published amounts under Glyph Scaling, and Standard burasagari counts a hung line start as room; Fullwidth `!` / `?` keep an upright fallback in vertical type; Hyphenation… and Justification… per paragraph (#2310, #2755), Auto Leading also driving the Character panel's Leading, the Alt+↑/↓ leading nudge and Fill with Placeholder Text; Document-point character controls after object/group scaling (#1034; optional font-size preservation remains separate), Character/Paragraph Styles (explicit Auto-leading resets and local leading overrides), per-paragraph paragraph attributes, mixed paragraph alignment indication (headless regressions, full integration CI and visual review pass), Area Type Options (with Width/Height, Auto Size and Shrink Text to Fit; overflow reported to agents and vertical Align), type areas resized by their handles and reshaped with Direct Selection, threaded text, Fit Headline, Glyphs, OpenType panel (including font-defined Stylistic Sets), Find Font (Document, Recent and System replacement sources, #5217), installed system fonts in every font menu (fonts registered with Windows outside its font folders, the XDG and Flatpak host font folders on Linux, and fonts installed while the app runs, listed when it comes back to the front; searchable; the Character and Properties menus show each family's sample of the selected text, preview it live under the pointer or ↑/↓, show recently applied families first (#3515), filter by script and kind, list a family's styles, and star favourites; the Glyphs panel and Find Font's Replace With use the same menu without the live preview) and found by name on open/import (full-name aliases and Missing Fonts searches verified, #1258; Windows font-service QA pending), variable fonts' named instances as styles, CJK names in the UI, input methods (marked text in place, candidate window at the caret; Japanese IME), Text Wrap (offset, invert, both sides of an object; follows edits), Type on a Path effects and Options with draggable start/centre/end brackets (slide, flip), tab stops + Tabs panel (Above Text floats it over the selected text, its ruler at the canvas zoom so stops line up with the columns, #729), inline symbols in text (beyond parity), Hebrew/Arabic bidirectional text, Paragraph Direction, Every-line/Single-line Composer per object (ragged text too) done; paint-only Arabic harakat keep joining with GDEF-mark ownership and Insert Kashidas tatweels on the base letter's paint (`tests::harakat`); tab leaders, spell check, vertical type pending | 45–60 |
|
||||
| M8 | Transform & distort (Puppet Warp, Liquify tools, Envelopes, Blends, Perspective Grid) | ✅ done (M8.1–M8.20 on 2026-10-06, fidelity pass): Liquify Tool Options with one shared brush, pen pressure, hold-to-apply, a safe scope and incremental strokes; tool options that last; Puppet Warp rotation, multi-select, Control bar and a rest-shape session that follows Undo; Width tool on compound paths; Envelope dialogs with preview, Reset with Warp/Mesh, full Envelope Options, type/images/symbols/appearance/gradients/patterns distorted on canvas and in every export, warps that keep their frame, Edit Contents, mesh handles and Control bar; Blend Options, anchor-targeted Blend tool, editable spine, keys picked on the canvas, faithful interpolation and knockout; Anchor Point spine conversion/handle editing and selection priority (#2544), with #2425 Shift reshape preserved; Perspective Grid with Define Grid, presets, lock/snap/rulers, widgets, the 1–4 plane switch, movable planes, Perspective Selection scale/copy/perpendicular/Transform Again, and type and symbols truly projected with Edit Text. Left: Anti-Alias and Preserve Shape output, warp-envelope point editing, brush interpolation in blends, Free Transform/Scale/Reflect along a rotated box | 2–4 |
|
||||
| M9 | Live effects (+ 3D & Materials) | 🟡 2D effects done incl. Effect → Pathfinder, Color Adjustments and Document Raster Effects Settings; PDF export warns when the pixel cap lowers raster-effect resolution; Artistic › Colored Pencil, Cutout, Dry Brush, Film Grain, Fresco, Neon Glow, Paint Daubs, Palette Knife, Poster Edges, Rough Pastels, Smudge Stick, Sponge, Underpainting and Watercolor and Sketch › Halftone Pattern, Bas Relief, Charcoal, Conté Crayon, Photocopy, Stamp, Torn Edges and Water Paper done (57/57 Photoshop filters); Revolve with automatic smooth vector shading, default-on circular caps and continuous rims, Extrude & Bevel, Inflate and Rotate with one to ten colored directional lights and four original lighting presets; SVG Filters, remaining raster effects and 3D materials and shadows pending | 81–130 |
|
||||
| M10 | Brushes, symbols, patterns, Repeat | 🟡 pattern swatches (5 tile types, Pattern Options, editing mode, SVG `<pattern>`/PDF export) and live Repeat (radial/grid/mirror) done; interactive selected mirror axis implemented (focused and native checks passed; full CI blocked by an unrelated text test); symbol libraries done (Window › Symbol Libraries, four generated libraries (Basic Shapes, UI Frames, Map Markers, Inventory Icons), User Defined, Other Library…, Save Symbols); brush libraries done (Window › Brush Libraries, five generated libraries, User Defined, Other Library…, Save Brushes); symbol editing shows draggable 9-slice guides (#5280), with guides outside the artwork still unsupported; brushes/symbols in progress | 23–37 |
|
||||
| M10 | Brushes, symbols, patterns, Repeat | 🟡 pattern swatches (5 tile types, Pattern Options, editing mode, SVG `<pattern>`/PDF export) and live Repeat (radial/grid/mirror) done; interactive selected mirror axis implemented (focused and native checks passed; full CI blocked by an unrelated text test); symbol libraries done (Window › Symbol Libraries, five generated libraries (Basic Shapes, UI Frames, Map Markers, Inventory Icons, Skill Icons), User Defined, Other Library…, Save Symbols); brush libraries done (Window › Brush Libraries, five generated libraries, User Defined, Other Library…, Save Brushes); symbol editing shows draggable 9-slice guides (#5280), with guides outside the artwork still unsupported; brushes/symbols in progress | 23–37 |
|
||||
| M11 | Artboards & views (selected-set deletion shared by Artboards menu, trash and Properties, retaining artboard 1 when all are selected; Artboard deletion keys keep the first of an all-selected set and protect artwork; history prunes invalid indices while preserving valid multiselection (history tests and full workspace CI pass); click-to-fit objects with the Artboard tool (#1227), artboard escape routing and document setup modal handoff done; artboard panel/tool with Move Artwork for X/Y fields and Artboard Options, Trim View, middle-button pan, print tiling and the status bar's artboard navigator with synchronized Artboard tool selection done; Window › Arrange › Tile and Consolidate All Windows done; multiple windows, presentation polish) (cached canvas reprojection preserves scale during resize, rotation and DPI changes; regression-tested and contributor-confirmed 2026-10-19; estimates unchanged) (cached canvas dimensions match the renderer limit before cache-key creation, view construction and worker submission; regression-tested; estimates unchanged); status-bar pointer coordinates follow the active ruler origin and General units | 🟡; Artboard Options shares existing presets and orientation controls and can fit artwork without moving it; artwork fitting includes all drawn document art across artboards and off-board; artwork bounds are cached by active document and revision, and selection uses the shared bounds cache across artboards | 15–25 |
|
||||
| M12 | Advanced color & art (CMYK/ICC, separations, Gradient Mesh, Live Paint, Image Trace, Graphs) | 🟡 Gradient Mesh, Live Paint, Image Trace (junction-returning pieces retain their positioned boundaries; a simpler contour walk with identical output; an edge's sub-pixel shift is the same from either side; notches read only their own piece; collapsed loops keep few segments; large images trace with a warning; Auto Color keeps rare distinct colours; quick presets trace at once and the Image Trace button opens the adjustment controls; Properties reopens them; tiny fitted contours retain islands and holes; Create Strokes: exact crop EDT, Guo–Hall thinning and maximal-disc graph simplification; 15 presets, the 14 documented ones each with an enhanced version; Ignore Color, Shapes, Auto Grouping and Gradients options; measured in `image-trace-quality.md`; closed outlines retain their interior after straightening; the Flat Logo mode places edges to a fraction of a pixel, restores sharp corners, snaps lines and circles, and refuses gradients; live trace result bounds and selection highlights exclude the retained bitmap except in source-image views), Recolor Artwork, colour management (ICC, soft proofing, separations preview), Graphs (all 9 tools, Graph Data/Type, group-selected series colours persist through regenerate/save/open) done; Graph Design and Marker designs, Transpose and Switch x/y, `\|` label line breaks, the pie options, drop shadows, the legend across the top, overlapping widths, First Row/Column in Front, filled lines, kept label formatting and the Graph Data worksheet done; graph Column designs pending; Vector Halftone Preview keeps the selection box without drawing dot selection marks (#6369) | 6–10 |
|
||||
| M13 | Automation (Actions ✅ record/playback, persisted; variables, scripting, batch) | 🟡 MCP `add_text` exposes existing vertical point, area and path type; `script.run` and File › Scripts › Other Script… run JavaScript files, and Window › Script Console shows their output; the script document model and batch work remain | 18–27 |
|
||||
@@ -190,6 +190,7 @@ separate. Scores and hours unchanged. [Behavior and command details](development
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-11-11 | minor | M10/G5: Skill Icons built-in symbol library; MCP docs catch-up; estimates unchanged |
|
||||
| 2026-11-10 | minor | M10/G5: Status Effects built-in graphic style library; MCP docs catch-up for UI Frames and Map Markers; estimates unchanged |
|
||||
| 2026-11-10 | minor | M10/G5: Inventory Icons built-in symbol library (Sword, Shield, Potion, Key, Gem); estimates unchanged |
|
||||
| 2026-11-10 | minor | M7: the Edit Custom Dictionary dialog (#4936); the Check Spelling dialog remains; scores and estimates unchanged. |
|
||||
|
||||
File diff suppressed because one or more lines are too long
+1
-1
@@ -410,7 +410,7 @@ next unit in the order a right-click on a ruler lists them, from Feet back to Po
|
||||
| Pathfinder shape results keep their source names and SVG IDs | done | #1293; Minus Front keeps the back name, Minus Back the front name; Unite/Intersect/Exclude use the backmost named input; compound output carries it once; geometry and paint unchanged |
|
||||
| Attributes fill-rule controls with a compound member selected | done | Edits the compound's rule; direction still edits only the member; rendered-hole and Undo/Redo regression tests (#1197) |
|
||||
| Make Compound Path on a group (such as outlined type) keeps its backmost path's paint; compound paths joined into one keep their holes | done | #1537 |
|
||||
| Symbol libraries: Window › Symbol Libraries (Basic Shapes, UI Frames, Map Markers, Inventory Icons, User Defined, Other Library…, Save Symbols…) and the Symbols panel's Symbol Libraries Menu button and its menu's Open Symbol Library / Save Symbol Library…; a click on a library symbol adds it to the document's Symbols (one undo step, it becomes the current symbol), Shift/Cmd-clicks select for Add to Symbols, and a symbol dragged onto the canvas is added and placed where it is dropped | done | [public source](https://helpx.adobe.com/illustrator/desktop/manage-objects/traces-mockups-symbols/create-or-import-symbol-libraries.html), [Symbols panel options](https://helpx.adobe.com/illustrator/desktop/manage-objects/traces-mockups-symbols/symbols-panel-options.html), [placing from a library](https://helpx.adobe.com/illustrator/desktop/manage-objects/traces-mockups-symbols/create-and-place-symbols.html); `window.symbolLibrary`, `window.symbolLibrary.other`, `ui.saveSymbolLibrary` (dialog `saveSymbolLibrary`), `window.userSymbolLibrary1`…`10`; `panels::tests_symbol_libraries`; four built-in libraries (Basic Shapes, UI Frames with default 9-slice, Map Markers, Inventory Icons; original, generated in code) |
|
||||
| Symbol libraries: Window › Symbol Libraries (Basic Shapes, UI Frames, Map Markers, Inventory Icons, Skill Icons, User Defined, Other Library…, Save Symbols…) and the Symbols panel's Symbol Libraries Menu button and its menu's Open Symbol Library / Save Symbol Library…; a click on a library symbol adds it to the document's Symbols (one undo step, it becomes the current symbol), Shift/Cmd-clicks select for Add to Symbols, and a symbol dragged onto the canvas is added and placed where it is dropped | done | [public source](https://helpx.adobe.com/illustrator/desktop/manage-objects/traces-mockups-symbols/create-or-import-symbol-libraries.html), [Symbols panel options](https://helpx.adobe.com/illustrator/desktop/manage-objects/traces-mockups-symbols/symbols-panel-options.html), [placing from a library](https://helpx.adobe.com/illustrator/desktop/manage-objects/traces-mockups-symbols/create-and-place-symbols.html); `window.symbolLibrary`, `window.symbolLibrary.other`, `ui.saveSymbolLibrary` (dialog `saveSymbolLibrary`), `window.userSymbolLibrary1`…`10`; `panels::tests_symbol_libraries`; five built-in libraries (Basic Shapes, UI Frames with default 9-slice, Map Markers, Inventory Icons, Skill Icons; original, generated in code) |
|
||||
| Brush libraries: Window › Brush Libraries (Art Ribbons, Calligraphic Nibs, Pattern Borders, Scatter Shapes, User Defined, Other Library…, Save Brushes…) and the Brushes panel's Brush Libraries Menu button and its menu's Open Brush Library / Save Brush Library…; a click on a library brush adds it to the document's Brushes (one undo step, it becomes the current brush, and selected paths take it in the same step), Shift/Cmd-clicks select for Add to Brushes, a brush dragged onto a path is added and applied to it and one dragged onto the Brushes panel is added; thumbnails render with the library's patterns and symbols | done | [public source](https://helpx.adobe.com/illustrator/desktop/paint-and-fill/apply-and-edit-strokes/create-new-brush-libraries.html), [import brushes](https://helpx.adobe.com/illustrator/desktop/paint-and-fill/apply-and-edit-strokes/import-brushes-from-brush-libraries-or-other-files.html), [Brushes panel overview](https://helpx.adobe.com/illustrator/desktop/paint-and-fill/apply-and-edit-strokes/brushes-panel-overview.html); `window.brushLibrary`, `window.brushLibrary.other`, `ui.saveBrushLibrary` (dialog `saveBrushLibrary`), `window.userBrushLibrary1`…`10`; `panels::tests_brush_libraries`; four built-in libraries (original, generated in code) |
|
||||
| Symbols panel: New Symbol opens Symbol Options (Name) before making the symbol; Alt-click skips it | partial | #1560 (#1566); Registration 9-point grid in Symbol Options (`symbol.new` / `symbol.place`); Export Type (Graphic / Movie Clip) and Enable Guides for 9-Slice Scaling (scaled instances keep their corners; in symbol editing mode the guides are drawn over the art and the Selection tool drags them); Symbol Type (Dynamic Symbol / Static Symbol, new symbols dynamic; #4938) |
|
||||
| Dynamic symbols: an instance changes the fill, stroke, opacity and blend of objects in its symbol's art and stays linked; Reset in the Properties panel's Quick Actions and the Symbols panel menu (Reset Symbol Instance) | partial | #4938; `symbol.instance.setAppearance` (by child-index path) and `symbol.instance.reset`; redefining keeps the changes, Break Link bakes them; Direct Selection of a path, compound path or type object inside an instance, with the Fill/Stroke controls setting its solid fill or stroke, is on canvas; on-canvas editing beyond a solid fill and stroke, and `.ai` read and write, remain |
|
||||
|
||||
Reference in New Issue
Block a user