Merge pull request #6353 from Messhias/feat/g5-brush-lib-game-trails

G5: built-in Game Trails brush library
This commit is contained in:
BFlat
2026-11-11 02:53:07 +07:00
committed by GitHub
33 changed files with 207 additions and 19 deletions
+40 -2
View File
@@ -165,13 +165,13 @@ pub struct BuiltinBrushLibrary {
make: fn() -> BrushLibrary,
}
/// The built-in brush libraries, in menu order: original brushes generated in code, one library
/// per kind of brush.
/// The built-in brush libraries, in menu order: original brushes generated in code.
pub const BUILTIN: &[BuiltinBrushLibrary] = &[
BuiltinBrushLibrary { id: "art-ribbons", name: "Art Ribbons", make: art_ribbons },
BuiltinBrushLibrary { id: "calligraphic-nibs", name: "Calligraphic Nibs", make: calligraphic_nibs },
BuiltinBrushLibrary { id: "pattern-borders", name: "Pattern Borders", make: pattern_borders },
BuiltinBrushLibrary { id: "scatter-shapes", name: "Scatter Shapes", make: scatter_shapes },
BuiltinBrushLibrary { id: "game-trails", name: "Game Trails", make: game_trails },
];
/// Built-in library `id`, made once.
@@ -378,6 +378,44 @@ fn scatter_shapes() -> BrushLibrary {
built("Scatter Shapes", doc, brushes)
}
/// Game Trails: art brushes for motion lines and impact streaks (original game HUD / VFX art).
fn game_trails() -> BrushLibrary {
let speed = {
let n = 32;
let half = |x: f64| 2.2 * (1.0 - x / 100.0).powf(1.2).max(0.08);
let xs = |i: usize| 100.0 * i as f64 / n as f64;
let mut pts: Vec<Point> = (0..=n).map(xs).map(|x| Point::new(x, -half(x))).collect();
pts.extend((0..n).rev().map(xs).map(|x| Point::new(x, half(x))));
PathData::single(SubPath::polyline(&pts, true))
};
let dash = group(vec![
black(shapes::rounded_rectangle(Rect::new(0.0, -1.0, 14.0, 1.0), 1.0)),
black(shapes::rounded_rectangle(Rect::new(22.0, -1.0, 36.0, 1.0), 1.0)),
black(shapes::rounded_rectangle(Rect::new(44.0, -1.0, 58.0, 1.0), 1.0)),
black(shapes::rounded_rectangle(Rect::new(66.0, -1.0, 80.0, 1.0), 1.0)),
black(shapes::rounded_rectangle(Rect::new(88.0, -1.0, 100.0, 1.0), 1.0)),
]);
let burst = {
// A wedge that flares from a tip at x=0 to a wide end at x=100.
let tip = Point::new(0.0, 0.0);
let top = Point::new(100.0, -6.0);
let bot = Point::new(100.0, 6.0);
PathData::single(SubPath::polyline(&[tip, top, bot], true))
};
let zigzag = band(100.0, 1.8, 40, |x| {
let t = (x / 12.5).floor();
let local = (x / 12.5) - t;
if (t as i32) % 2 == 0 { -3.0 + 6.0 * local } else { 3.0 - 6.0 * local }
});
let brushes = vec![
art("Speed Line", black(speed), Colorization::Tints),
art("Dash Trail", dash, Colorization::Tints),
art("Burst Ray", black(burst), Colorization::Tints),
art("Zigzag", black(zigzag), Colorization::Tints),
];
built("Game Trails", Document::new(100.0, 100.0), brushes)
}
// ---------- commands ----------
fn builtin_info(b: &BuiltinBrushLibrary) -> LibraryInfo {
+14 -2
View File
@@ -104,7 +104,7 @@ fn the_builtin_libraries_are_original_brushes_generated_in_code() {
let list = run(&mut s, "brush.libraries", json!({}));
let libs = list["libraries"].as_array().unwrap();
let ids: Vec<&str> = libs.iter().map(|l| l["id"].as_str().unwrap()).collect();
assert_eq!(ids, ["art-ribbons", "calligraphic-nibs", "pattern-borders", "scatter-shapes"]);
assert_eq!(ids, ["art-ribbons", "calligraphic-nibs", "pattern-borders", "scatter-shapes", "game-trails"]);
assert!(libs.iter().all(|l| l["category"] == "builtIn"));
let lib = run(&mut s, "brush.library", json!({"library": "art ribbons"}));
assert_eq!(
@@ -112,8 +112,20 @@ fn the_builtin_libraries_are_original_brushes_generated_in_code() {
["Notched Ribbon", "Double Line", "Wave", "Teardrop", "Striped Ribbon"]
);
assert_eq!(libs[0]["count"].as_u64(), Some(5));
let trails = run(&mut s, "brush.library", json!({"library": "game-trails"}));
assert_eq!(
trails["brushes"].as_array().unwrap().iter().map(|b| b["name"].as_str().unwrap()).collect::<Vec<_>>(),
["Speed Line", "Dash Trail", "Burst Ray", "Zigzag"]
);
assert_eq!(libs[4]["count"].as_u64(), Some(4));
// One kind of brush per library, every brush drawing something.
for (id, kind) in [("art-ribbons", "art"), ("calligraphic-nibs", "calligraphic"), ("pattern-borders", "pattern"), ("scatter-shapes", "scatter")] {
for (id, kind) in [
("art-ribbons", "art"),
("calligraphic-nibs", "calligraphic"),
("pattern-borders", "pattern"),
("scatter-shapes", "scatter"),
("game-trails", "art"),
] {
let (_, lib) = cmd::brushlib::library(&s, id).unwrap();
assert!(lib.len() >= 4, "{id}");
for b in &lib.brushes {
+5
View File
@@ -5904,6 +5904,11 @@ axis Y Axis Y ос
User Brush Library 9 Потребителска библиотека с четки 9
User Brush Library 10 Потребителска библиотека с четки 10
Art Ribbons Арт ленти
Zigzag Зигзаг
Burst Ray Лъч на удар
Dash Trail Пунктирна следа
Speed Line Линия на скорост
Game Trails Игрови следи
Calligraphic Nibs Калиграфски писци
Pattern Borders Бордюри с мостри
Scatter Shapes Разсеяни фигури
Can't render this file because it contains an unexpected character in line 2 and column 73.
+5
View File
@@ -5954,6 +5954,11 @@ axis Y Axis Y osa
User Brush Library 9 Korisnička biblioteka četkica 9
User Brush Library 10 Korisnička biblioteka četkica 10
Art Ribbons Umjetničke trake
Zigzag Cik-cak
Burst Ray Zraka udara
Dash Trail Isprekidani trag
Speed Line Linija brzine
Game Trails Tragovi igre
Calligraphic Nibs Kaligrafski vrhovi
Pattern Borders Ivice od uzoraka
Scatter Shapes Raspršeni oblici
Can't render this file because it contains an unexpected character in line 2 and column 73.
+5
View File
@@ -362,6 +362,11 @@ antiAlias Sharp Nítid
Art Brush Options Opcions del pinzell artístic
Art Optimized Optimitzat per a l’art
Art Ribbons Cintes d’art
Zigzag Zigzag
Burst Ray Raig d’impacte
Dash Trail Estela discontínua
Speed Line Línia de velocitat
Game Trails Esteles de joc
Art using a deleted global swatch keeps its colour. L’art que utilitza una mostra global suprimida conserva el seu color.
Artboard Tauler
Artboard Options Opcions del tauler
Can't render this file because it contains an unexpected character in line 2 and column 73.
+5
View File
@@ -6118,6 +6118,11 @@ axis Y Axis osa Y
User Brush Library 9 Uživatelská knihovna štětců 9
User Brush Library 10 Uživatelská knihovna štětců 10
Art Ribbons Obrazové stuhy
Zigzag Cikcak
Burst Ray Paprsek nárazu
Dash Trail Čárkovaná stopa
Speed Line Rychlostní čára
Game Trails Herní stopy
Calligraphic Nibs Kaligrafická pera
Pattern Borders Vzorkové okraje
Scatter Shapes Rozptýlené tvary
Can't render this file because it contains an unexpected character in line 2 and column 73.
+5
View File
@@ -5919,6 +5919,11 @@ axis Y Axis Y-akse
User Brush Library 9 Brugerpenselbibliotek 9
User Brush Library 10 Brugerpenselbibliotek 10
Art Ribbons Kunstbånd
Zigzag Zigzag
Burst Ray Burststråle
Dash Trail Streget spor
Speed Line Hastighedslinje
Game Trails Spilspor
Calligraphic Nibs Kalligrafiske penne
Pattern Borders Mønsterborter
Scatter Shapes Spredte former
Can't render this file because it contains an unexpected character in line 2 and column 73.
+5
View File
@@ -5701,6 +5701,11 @@ axis Y Axis Y-Achse
User Brush Library 9 Benutzer-Pinsel-Bibliothek 9
User Brush Library 10 Benutzer-Pinsel-Bibliothek 10
Art Ribbons Bildbänder
Zigzag Zickzack
Burst Ray Stoßstrahl
Dash Trail Strichelspur
Speed Line Geschwindigkeitslinie
Game Trails Spielspuren
Calligraphic Nibs Kalligrafie-Federn
Pattern Borders Musterbordüren
Scatter Shapes Streuformen
Can't render this file because it contains an unexpected character in line 2 and column 73.
+5
View File
@@ -6069,6 +6069,11 @@ axis Y Axis Άξονας Y
User Brush Library 9 Βιβλιοθήκη πινέλων χρήστη 9
User Brush Library 10 Βιβλιοθήκη πινέλων χρήστη 10
Art Ribbons Γραφικές κορδέλες
Zigzag Ζιγκζάγκ
Burst Ray Ακτίνα κρούσης
Dash Trail Διακεκομμένο ίχνος
Speed Line Γραμμή ταχύτητας
Game Trails Ίχνη παιχνιδιού
Calligraphic Nibs Καλλιγραφικές πένες
Pattern Borders Περιθώρια μοτίβου
Scatter Shapes Σχήματα διασποράς
Can't render this file because it is too large.
+5
View File
@@ -6060,6 +6060,11 @@ axis Y Axis Eje Y
User Brush Library 9 Biblioteca de pinceles del usuario 9
User Brush Library 10 Biblioteca de pinceles del usuario 10
Art Ribbons Cintas de ilustración
Zigzag Zigzag
Burst Ray Rayo de impacto
Dash Trail Estela discontinua
Speed Line Línea de velocidad
Game Trails Estelas de juego
Calligraphic Nibs Plumillas caligráficas
Pattern Borders Bordes de motivo
Scatter Shapes Formas de dispersión
Can't render this file because it contains an unexpected character in line 2 and column 73.
+5
View File
@@ -6148,6 +6148,11 @@ axis Y Axis Y-akseli
User Brush Library 9 Käyttäjän sivellinkirjasto 9
User Brush Library 10 Käyttäjän sivellinkirjasto 10
Art Ribbons Kuvitusnauhat
Zigzag Siksak
Burst Ray Iskusäde
Dash Trail Katkoviiva
Speed Line Nopeusviiva
Game Trails Pelijäljet
Calligraphic Nibs Kalligrafiakärjet
Pattern Borders Kuvioreunukset
Scatter Shapes Sirontamuodot
Can't render this file because it contains an unexpected character in line 2 and column 73.
+5
View File
@@ -6113,6 +6113,11 @@ axis Y Axis Axe Y
User Brush Library 9 Bibliothèque de formes utilisateur 9
User Brush Library 10 Bibliothèque de formes utilisateur 10
Art Ribbons Rubans d'illustration
Zigzag Zigzag
Burst Ray Rayon d’impact
Dash Trail Traînée tiretée
Speed Line Ligne de vitesse
Game Trails Traînées de jeu
Calligraphic Nibs Plumes calligraphiques
Pattern Borders Bordures de motif
Scatter Shapes Formes de dispersion
Can't render this file because it contains an unexpected character in line 2 and column 73.
+5
View File
@@ -421,6 +421,11 @@ antiAlias Sharp शार्प
Art Brush Options आर्ट ब्रश ऑप्शन्स
Art Optimized आर्टवर्क के लिए अनुकूलित
Art Ribbons आर्ट रिबन
Zigzag ज़िगज़ैग
Burst Ray बर्स्ट रे
Dash Trail डैश ट्रेल
Speed Line स्पीड लाइन
Game Trails गेम ट्रेल्स
Art using a deleted global swatch keeps its colour. हटाए गए ग्लोबल स्वॉच वाला आर्टवर्क अपना रंग बनाए रखता है।
Artboard आर्टबोर्ड
Artboard {n} of {total} {total} में से आर्टबोर्ड {n}
Can't render this file because it is too large.
+5
View File
@@ -6101,6 +6101,11 @@ axis Y Axis Y tengely
User Brush Library 9 Felhasználói ecsetkönyvtár 9
User Brush Library 10 Felhasználói ecsetkönyvtár 10
Art Ribbons Grafikus szalagok
Zigzag Cikkcakk
Burst Ray Ütéssugár
Dash Trail Szaggatott nyom
Speed Line Sebességvonal
Game Trails Játéknyomok
Calligraphic Nibs Kalligrafikus tollhegyek
Pattern Borders Mintázatszegélyek
Scatter Shapes Szórt alakzatok
Can't render this file because it contains an unexpected character in line 2 and column 73.
+5
View File
@@ -5919,6 +5919,11 @@ axis Y Axis Sumbu Y
User Brush Library 9 Pustaka kuas pengguna 9
User Brush Library 10 Pustaka kuas pengguna 10
Art Ribbons Pita seni
Zigzag Zigzag
Burst Ray Sinar ledakan
Dash Trail Jejak putus-putus
Speed Line Garis kecepatan
Game Trails Jejak game
Calligraphic Nibs Pena kaligrafi
Pattern Borders Bingkai pola
Scatter Shapes Bentuk sebar
Can't render this file because it contains an unexpected character in line 2315 and column 5.
+5
View File
@@ -5735,6 +5735,11 @@ axis Y Axis Asse Y
User Brush Library 9 Libreria pennelli utente 9
User Brush Library 10 Libreria pennelli utente 10
Art Ribbons Nastri grafici
Zigzag Zigzag
Burst Ray Raggio d’impatto
Dash Trail Scia tratteggiata
Speed Line Linea di velocità
Game Trails Scia di gioco
Calligraphic Nibs Pennini calligrafici
Pattern Borders Bordi a motivo
Scatter Shapes Forme a dispersione
Can't render this file because it contains an unexpected character in line 2 and column 73.
+5
View File
@@ -5800,6 +5800,11 @@ axis Y Axis Y 軸
User Brush Library 9 ユーザーブラシライブラリ 9
User Brush Library 10 ユーザーブラシライブラリ 10
Art Ribbons アートリボン
Zigzag ジグザグ
Burst Ray バーストレイ
Dash Trail ダッシュトレイル
Speed Line スピードライン
Game Trails ゲームトレイル
Calligraphic Nibs カリグラフィペン先
Pattern Borders パターンボーダー
Scatter Shapes 散布シェイプ
Can't render this file because it contains an unexpected character in line 2 and column 73.
+5
View File
@@ -6041,6 +6041,11 @@ axis Y Axis Y ღერძი
User Brush Library 9 მომხმარებლის ფუნჯების ბიბლიოთეკა 9
User Brush Library 10 მომხმარებლის ფუნჯების ბიბლიოთეკა 10
Art Ribbons ნახატის ლენტები
Zigzag ზიგზაგი
Burst Ray დარტყმის სხივი
Dash Trail წყვეტილი კვალი
Speed Line სიჩქარის ხაზი
Game Trails თამაშის კვალი
Calligraphic Nibs კალიგრაფიული წვერები
Pattern Borders პატერნის ბორდიურები
Scatter Shapes გაბნეული ფიგურები
Can't render this file because it is too large.
+5
View File
@@ -5696,6 +5696,11 @@ axis Y Axis Y축
User Brush Library 9 사용자 브러시 라이브러리 9
User Brush Library 10 사용자 브러시 라이브러리 10
Art Ribbons 아트 리본
Zigzag 지그재그
Burst Ray 버스트 레이
Dash Trail 대시 트레일
Speed Line 스피드 라인
Game Trails 게임 트레일
Calligraphic Nibs 서예 펜촉
Pattern Borders 패턴 테두리
Scatter Shapes 흩뿌리기 모양
Can't render this file because it contains an unexpected character in line 2 and column 73.
+5
View File
@@ -5970,6 +5970,11 @@ axis Y Axis Y-as
User Brush Library 9 Penseelbibliotheek van gebruiker 9
User Brush Library 10 Penseelbibliotheek van gebruiker 10
Art Ribbons Illustratielinten
Zigzag Zigzag
Burst Ray Inslagstraal
Dash Trail Streepspoor
Speed Line Snelheidslijn
Game Trails Spelsporen
Calligraphic Nibs Kalligrafische penpunten
Pattern Borders Patroonranden
Scatter Shapes Strooivormen
Can't render this file because it contains an unexpected character in line 2 and column 73.
+5
View File
@@ -5972,6 +5972,11 @@ axis Y Axis Oś Y
User Brush Library 9 Biblioteka pędzli użytkownika 9
User Brush Library 10 Biblioteka pędzli użytkownika 10
Art Ribbons Wstęgi artystyczne
Zigzag Zygzak
Burst Ray Promień uderzenia
Dash Trail Ślad kreskowany
Speed Line Linia prędkości
Game Trails Ślady gry
Calligraphic Nibs Stalówki kaligraficzne
Pattern Borders Obramowania wzorków
Scatter Shapes Kształty rozproszone
Can't render this file because it contains an unexpected character in line 2 and column 73.
+5
View File
@@ -6033,6 +6033,11 @@ axis Y Axis Eixo Y
User Brush Library 9 Biblioteca de Pincéis do Usuário 9
User Brush Library 10 Biblioteca de Pincéis do Usuário 10
Art Ribbons Fitas de Arte
Zigzag Zigue-zague
Burst Ray Raio de impacto
Dash Trail Rastro tracejado
Speed Line Linha de velocidade
Game Trails Rastros de jogo
Calligraphic Nibs Penas Caligráficas
Pattern Borders Bordas de Padrão
Scatter Shapes Formas de Dispersão
Can't render this file because it contains an unexpected character in line 6 and column 47.
+5
View File
@@ -5729,6 +5729,11 @@ axis Y Axis Ось Y
User Brush Library 9 Пользовательская библиотека кистей 9
User Brush Library 10 Пользовательская библиотека кистей 10
Art Ribbons Художественные ленты
Zigzag Зигзаг
Burst Ray Ударный луч
Dash Trail Пунктирный след
Speed Line Линия скорости
Game Trails Игровые следы
Calligraphic Nibs Каллиграфические перья
Pattern Borders Узорные каймы
Scatter Shapes Рассеянные фигуры
Can't render this file because it contains an unexpected character in line 2 and column 73.
+5
View File
@@ -6141,6 +6141,11 @@ axis Y Axis Y-axel
User Brush Library 9 Användarbibliotek för penslar 9
User Brush Library 10 Användarbibliotek för penslar 10
Art Ribbons Konstband
Zigzag Sicksack
Burst Ray Stötstråle
Dash Trail Streckat spår
Speed Line Hastighetslinje
Game Trails Spår från spel
Calligraphic Nibs Kalligrafiska pennspetsar
Pattern Borders Mönsterbårder
Scatter Shapes Spridningsformer
Can't render this file because it contains an unexpected character in line 5 and column 25.
+5
View File
@@ -6074,6 +6074,11 @@ axis Y Axis Y ekseni
User Brush Library 9 Kullanıcı Fırça Kitaplığı 9
User Brush Library 10 Kullanıcı Fırça Kitaplığı 10
Art Ribbons Sanat Şeritleri
Zigzag Zigzag
Burst Ray Darbe ışını
Dash Trail Kesik iz
Speed Line Hız çizgisi
Game Trails Oyun izleri
Calligraphic Nibs Kaligrafi Uçları
Pattern Borders Desen Kenarlıkları
Scatter Shapes Dağılım Şekilleri
Can't render this file because it contains an unexpected character in line 5 and column 25.
+5
View File
@@ -5715,6 +5715,11 @@ axis Y Axis Вісь Y
User Brush Library 9 Користувацька бібліотека пензлів 9
User Brush Library 10 Користувацька бібліотека пензлів 10
Art Ribbons Художні стрічки
Zigzag Зигзаг
Burst Ray Ударний промінь
Dash Trail Пунктирний слід
Speed Line Лінія швидкості
Game Trails Ігрові сліди
Calligraphic Nibs Каліграфічні пера
Pattern Borders Візерункові облямівки
Scatter Shapes Розсіяні фігури
Can't render this file because it contains an unexpected character in line 182 and column 5.
+5
View File
@@ -5716,6 +5716,11 @@ axis Y Axis Trục Y
User Brush Library 9 Thư viện cọ người dùng 9
User Brush Library 10 Thư viện cọ người dùng 10
Art Ribbons Dải băng nghệ thuật
Zigzag Zigzag
Burst Ray Tia va chạm
Dash Trail Vệt đứt đoạn
Speed Line Đường tốc độ
Game Trails Vệt game
Calligraphic Nibs Ngòi bút thư pháp
Pattern Borders Viền họa tiết
Scatter Shapes Hình phân tán
Can't render this file because it contains an unexpected character in line 204 and column 5.
+5
View File
@@ -5956,6 +5956,11 @@ axis Y Axis Y 轴
User Brush Library 9 用户画笔库 9
User Brush Library 10 用户画笔库 10
Art Ribbons 艺术丝带
Zigzag 锯齿
Burst Ray 冲击射线
Dash Trail 虚线轨迹
Speed Line 速度线
Game Trails 游戏轨迹
Calligraphic Nibs 书法笔尖
Pattern Borders 图案边框
Scatter Shapes 散布形状
Can't render this file because it contains an unexpected character in line 2 and column 73.
+5
View File
@@ -5753,6 +5753,11 @@ axis Y Axis Y 軸
User Brush Library 9 使用者筆刷資料庫 9
User Brush Library 10 使用者筆刷資料庫 10
Art Ribbons 藝術緞帶
Zigzag 鋸齒
Burst Ray 衝擊射線
Dash Trail 虛線軌跡
Speed Line 速度線
Game Trails 遊戲軌跡
Calligraphic Nibs 書法筆尖
Pattern Borders 圖樣邊框
Scatter Shapes 散佈形狀
Can't render this file because it contains an unexpected character in line 6 and column 47.
@@ -127,7 +127,7 @@ fn the_window_menu_and_the_brushes_panel_open_brush_libraries() {
let under = |e: &crate::menus::MenuEntry| e.path == ["Window", "Brush Libraries"];
let opened: Vec<_> =
entries.iter().filter(|e| under(e) && e.command.as_deref() == Some("window.brushLibrary")).map(|e| e.params["library"].clone()).collect();
assert_eq!(opened, [json!("art-ribbons"), json!("calligraphic-nibs"), json!("pattern-borders"), json!("scatter-shapes")]);
assert_eq!(opened, [json!("art-ribbons"), json!("calligraphic-nibs"), json!("pattern-borders"), json!("scatter-shapes"), json!("game-trails")]);
let enabled = |cmd: &str| entries.iter().find(|e| under(e) && e.command.as_deref() == Some(cmd)).map(|e| e.enabled);
assert_eq!(enabled("window.brushLibrary.other"), Some(true));
assert_eq!(enabled("ui.saveBrushLibrary"), Some(true), "a new document has the default brushes");
+7 -5
View File
@@ -1,6 +1,6 @@
# Gaps
> **Last reviewed:** 2026-10-10 · **Last updated:** 2026-11-10 · **Change:** 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-10 · **Change:** 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
@@ -631,8 +631,9 @@ macOS cursor delivery (#2292) is narrowed to a native host adapter using the exi
libraries ([public source](https://helpx.adobe.com/illustrator/desktop/paint-and-fill/apply-and-edit-strokes/create-new-brush-libraries.html),
[import](https://helpx.adobe.com/illustrator/desktop/paint-and-fill/apply-and-edit-strokes/import-brushes-from-brush-libraries-or-other-files.html)):
Window › Brush Libraries and the Brushes panel's Brush Libraries Menu open each library in a library panel of
its own (four original libraries generated in code: Art Ribbons, Calligraphic Nibs, Pattern Borders, Scatter
Shapes; User Defined; Other Library… reads the brushes of any document VectorCraft opens); a click adds a
its own (five original libraries generated in code: Art Ribbons, Calligraphic Nibs, Pattern Borders, Scatter
Shapes and Game Trails; User Defined; Other Library… reads the brushes of any document VectorCraft opens); a
click adds a
brush to the document's Brushes with the patterns, symbols and other resources its art uses, as one undo
step (applied to the selected paths in the same step), dragging one onto a path adds and applies it and
dragging one onto the Brushes panel adds it; Save Brushes / Save Brush Library writes the document's brushes
@@ -648,11 +649,11 @@ macOS cursor delivery (#2292) is narrowed to a native host adapter using the exi
graphic style libraries (Window › Graphic Style Libraries; seven original libraries generated in code, including
Game HUD with Health Fill, Mana Glow, Damage Flash, Quest Outline, Coin Shine and Boss Alert; User Defined; Other
Library…; `graphicStyle.libraries`, `graphicStyle.addFromLibrary`).
- **Missing:** more built-in brush libraries (and further graphic-style libraries beyond the seven shipped, and further symbol libraries beyond Basic
- **Missing:** more built-in brush libraries beyond the five shipped (and further graphic-style libraries beyond the seven shipped, and further symbol libraries beyond Basic
Shapes, UI Frames and Map Markers; 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:** 9–19 h.
- **Estimate:** 8–18 h.
## G3 3D and Materials
@@ -857,6 +858,7 @@ trap, and the defaults (0.25 pt, 100%, 40%) are VectorCraft's own, the pages giv
| 2026-11-10 | minor | G4 type: a right-click on type has Spelling › Auto Spell Check, checked while it is on, #4936; the Check Spelling and Edit Custom Dictionary dialogs remain; scores and estimates unchanged. |
| 2026-11-10 | minor | G4 type: a right-click on a word Auto Spell Check underlined lists its suggestions, Ignore All and Add to Dictionary, #4936; the Check Spelling and Edit Custom Dictionary dialogs remain; scores and estimates unchanged. |
| 2026-11-10 | minor | G2: the Effect Gallery shows a thumbnail of each filter and a preview area inside the dialog (an original landscape drawing passed through the filter). Estimate 1–2 h → 0. The canvas preview and one-undo OK are unchanged. |
| 2026-11-09 | minor | G5: built-in Game Trails brush library (Speed Line, Dash Trail, Burst Ray, Zigzag); Missing trimmed; estimate 11–21 → 10–20 h. |
| 2026-11-09 | minor | G4 type: Auto Spell Check (`edit.autoSpellCheck`) underlines the unknown words of the visible type, #4936; the Check Spelling and Edit Custom Dictionary dialogs and the right-click Spelling menu remain; scores and estimates unchanged. |
| 2026-11-09 | minor | G5: built-in UI Frames symbol library (Panel, Button, Bar with default 9-slice); Missing trimmed; estimate 12–22 → 11–21 h. |
| 2026-11-09 | minor | G5: Direct Selection of a dynamic instance part takes opacity, blend, gradient and pattern fill/stroke; Art brush Overlap and Pattern auto corners documented Done; estimate 15–25 → 12–22 h. |
+4 -4
View File
@@ -2845,10 +2845,10 @@ error.
## Brush libraries
Brush libraries are read-only sets of brushes: four generated in code (Art Ribbons, Calligraphic Nibs, Pattern
Borders, Scatter Shapes), the `.vectorcraft` files in the user library folder of the desktop app (User Defined) and
the brushes of any document loaded with `brush.loadLibrary` (a document without brushes of its own has the default
ones). `brush.libraries` lists them (`id`, `name`, `category`: `builtIn`, `user` or `loaded`, `count`) and
Brush libraries are read-only sets of brushes: five generated in code (Art Ribbons, Calligraphic Nibs, Pattern
Borders, Scatter Shapes, Game Trails), the `.vectorcraft` files in the user library folder of the desktop app (User
Defined) and the brushes of any document loaded with `brush.loadLibrary` (a document without brushes of its own has
the default ones). `brush.libraries` lists them (`id`, `name`, `category`: `builtIn`, `user` or `loaded`, `count`) and
`brush.library {library}` returns one's brushes (`name`, `type`; `library` is an id or a name).
`brush.addFromLibrary {library, name? | names?}` copies brushes into the document's Brushes as one undo step (no
names: the whole library), with the resources their art uses: patterns, symbols, swatches (`swatchConflict` as for
File diff suppressed because one or more lines are too long