Merge pull request #6763 from dotCooCoo/feat/styles-textures-library

Graphic Styles: built-in Textures library with grain, canvas, craquelure and tile styles
This commit is contained in:
BFlat
2026-11-12 12:40:38 +07:00
committed by GitHub
32 changed files with 358 additions and 7 deletions
+51
View File
@@ -155,6 +155,7 @@ pub const STYLE_LIBRARIES: &[BuiltinStyleLibrary] = &[
BuiltinStyleLibrary { id: "shadows-glows", name: "Shadows and Glows", make: shadows_glows },
BuiltinStyleLibrary { id: "outlines-rules", name: "Outlines and Rules", make: outlines_rules },
BuiltinStyleLibrary { id: "hand-drawn", name: "Hand-Drawn", make: hand_drawn },
BuiltinStyleLibrary { id: "textures", name: "Textures", make: textures },
BuiltinStyleLibrary { id: "gradient-finishes", name: "Gradient Finishes", make: gradient_finishes },
BuiltinStyleLibrary { id: "shape-effects", name: "Shape Effects", make: shape_effects },
BuiltinStyleLibrary { id: "blends-transparency", name: "Blends and Transparency", make: blends_transparency },
@@ -322,6 +323,44 @@ fn hand_drawn() -> Vec<GraphicStyle> {
]
}
/// Textures: fills and strokes painted with the catalog's texture effects (grain, canvas and
/// burlap surfaces, craquelure, tiles, patchwork, stained glass and water paper).
fn textures() -> Vec<GraphicStyle> {
let surface = |texture: &str, scaling: f64, relief: f64, light: &str| {
fx("texture.texturizer", json!({"texture": texture, "scaling": scaling, "relief": relief, "lightDirection": light, "invert": false}))
};
vec![
style(
"Fine Grain",
vec![F(fill("#c9ada7")), S(stroke("#4a4e69", 1.0))],
vec![fx("texture.grain", json!({"intensity": 35.0, "contrast": 55.0, "grainType": "regular"}))],
),
style("Canvas Weave", vec![F(fill("#e9d8a6"))], vec![surface("canvas", 100.0, 6.0, "topLeft")]),
style("Burlap Sack", vec![F(fill("#bc8a5f")), S(stroke("#6f4518", 1.5))], vec![surface("burlap", 120.0, 8.0, "top")]),
style(
"Cracked Glaze",
vec![F(fill("#94d2bd")), S(stroke("#005f73", 1.0))],
vec![fx("texture.craquelure", json!({"crackSpacing": 12.0, "crackDepth": 5.0, "crackBrightness": 8.0}))],
),
style(
"Mosaic Floor",
vec![F(fill("#0a9396"))],
vec![fx("texture.mosaicTiles", json!({"tileSize": 10.0, "groutWidth": 3.0, "lightenGrout": 8.0}))],
),
style("Quilted Squares", vec![F(fill("#ee9b00"))], vec![fx("texture.patchwork", json!({"squareSize": 5.0, "relief": 10.0}))]),
style(
"Leaded Glass",
vec![F(FillLayer::new(linear(-45.0, &[(0.0, "#ae2012", 1.0), (0.5, "#ee9b00", 1.0), (1.0, "#005f73", 1.0)])))],
vec![fx("texture.stainedGlass", json!({"cellSize": 8.0, "borderThickness": 4.0, "lightIntensity": 3.0}))],
),
style(
"Damp Paper",
vec![F(fill("#4895ef")), S(stroke("#3f37c9", 1.0))],
vec![fx("sketch.waterPaper", json!({"fiberLength": 12.0, "brightness": 55.0, "contrast": 60.0}))],
),
]
}
fn gradient_finishes() -> Vec<GraphicStyle> {
let rim = |h: &str| S(stroke(h, 1.0));
vec![
@@ -550,6 +589,18 @@ mod tests {
assert_eq!(status.name, "Status Effects");
let status_names: Vec<&str> = status.styles.iter().map(|g| g.name.as_str()).collect();
assert_eq!(status_names, ["Poison Tint", "Freeze Edge", "Burn Aura", "Stun Pulse", "Stealth Fade", "Shield Buff"]);
let textures = builtin_style_library("textures").unwrap();
assert_eq!(textures.name, "Textures");
let texture_names: Vec<&str> = textures.styles.iter().map(|g| g.name.as_str()).collect();
let expected =
["Fine Grain", "Canvas Weave", "Burlap Sack", "Cracked Glaze", "Mosaic Floor", "Quilted Squares", "Leaded Glass", "Damp Paper"];
assert_eq!(texture_names, expected);
for b in STYLE_LIBRARIES.iter().filter(|b| b.id != "textures") {
let lib = builtin_style_library(b.id).unwrap();
assert!(lib.styles.iter().all(|g| !expected.contains(&g.name.as_str())), "{} shares a name with Textures", b.id);
}
let ids: Vec<&str> = STYLE_LIBRARIES.iter().map(|b| b.id).collect();
assert_eq!(ids.iter().position(|&i| i == "textures"), ids.iter().position(|&i| i == "hand-drawn").map(|i| i + 1), "after Hand-Drawn");
}
#[test]
+52
View File
@@ -44,6 +44,7 @@ fn builtin_libraries_are_listed_with_original_styles_using_catalogued_effects()
assert!(libs.len() >= 8 && libs.iter().all(|l| l["category"] == "builtIn"), "{libs:?}");
assert!(libs.iter().any(|l| l["id"] == "game-hud" && l["name"] == "Game HUD"), "{libs:?}");
assert!(libs.iter().any(|l| l["id"] == "status-effects" && l["name"] == "Status Effects"), "{libs:?}");
assert!(libs.iter().any(|l| l["id"] == "textures" && l["name"] == "Textures" && l["count"] == 8), "{libs:?}");
for l in libs {
let id = l["id"].as_str().unwrap();
let g = run(&mut s, "graphicStyle.library", json!({"library": id}));
@@ -64,6 +65,10 @@ fn builtin_libraries_are_listed_with_original_styles_using_catalogued_effects()
let status = run(&mut s, "graphicStyle.library", json!({"library": "status-effects"}));
let status_names: Vec<&str> = status["styles"].as_array().unwrap().iter().map(|x| x["name"].as_str().unwrap()).collect();
assert_eq!(status_names, ["Poison Tint", "Freeze Edge", "Burn Aura", "Stun Pulse", "Stealth Fade", "Shield Buff"]);
let textures = run(&mut s, "graphicStyle.library", json!({"library": "textures"}));
let texture_names: Vec<&str> = textures["styles"].as_array().unwrap().iter().map(|x| x["name"].as_str().unwrap()).collect();
let expected = ["Fine Grain", "Canvas Weave", "Burlap Sack", "Cracked Glaze", "Mosaic Floor", "Quilted Squares", "Leaded Glass", "Damp Paper"];
assert_eq!(texture_names, expected);
let id = rect(&mut s, 10.0, 20.0, 40.0, 30.0);
let r = run(&mut s, "graphicStyle.addFromLibrary", json!({"library": "game-hud", "name": "Mana Glow", "apply": true, "ids": [id.0]}));
assert_eq!((names(&r["added"]), r["applied"].as_str()), (vec!["Mana Glow"], Some("Mana Glow")));
@@ -167,6 +172,53 @@ fn add_with_null_ids_applies_to_selection() {
assert_eq!(doc(&s).node(id).unwrap().extras().graphic_style, Some(style.id));
}
#[test]
fn textures_styles_apply_their_texture_effects_and_keep_their_params_through_save_and_open() {
let mut s = session();
let (_, lib) = cmd::stylelib::library(&s, "textures").unwrap();
let mut ids = vec![];
for (i, g) in lib.styles.iter().enumerate() {
let id = rect(&mut s, (i % 4) as f64 * 50.0, (i / 4) as f64 * 50.0, 40.0, 40.0);
let before = undo_len(&s);
let r = run(&mut s, "graphicStyle.addFromLibrary", json!({"library": "textures", "name": g.name, "apply": true, "ids": [id.0]}));
assert_eq!((names(&r["added"]), r["applied"].as_str()), (vec![g.name.as_str()], Some(g.name.as_str())));
assert_eq!(undo_len(&s), before + 1, "{}: added and applied as one step", g.name);
ids.push(id);
}
let effects = |s: &Session| -> Vec<Vec<(String, Value)>> {
ids.iter().map(|id| doc(s).node(*id).unwrap().appearance.effects.iter().map(|e| (e.id.clone(), e.params.clone())).collect()).collect()
};
let applied = effects(&s);
let effect_ids: Vec<Vec<&str>> = applied.iter().map(|fx| fx.iter().map(|(id, _)| id.as_str()).collect()).collect();
assert_eq!(
effect_ids,
[
["texture.grain"],
["texture.texturizer"],
["texture.texturizer"],
["texture.craquelure"],
["texture.mosaicTiles"],
["texture.patchwork"],
["texture.stainedGlass"],
["sketch.waterPaper"],
]
);
assert_eq!(applied[1][0].1["texture"], "canvas");
assert_eq!(applied[3][0].1["crackSpacing"], 12.0);
for (fx, g) in applied.iter().zip(&lib.styles) {
let want: Vec<(String, Value)> = g.appearance.effects.iter().map(|e| (e.id.clone(), e.params.clone())).collect();
assert_eq!(fx, &want, "{} applies the library's params", g.name);
}
let b64 = run(&mut s, "document.serialize", json!({"format": "vectorcraft"}))["dataBase64"].as_str().unwrap().to_string();
run(&mut s, "document.open", json!({"name": "textures.vectorcraft", "dataBase64": b64}));
assert_eq!(effects(&s), applied, "the params survive a save and open");
for g in &lib.styles {
let saved = doc(&s).graphic_style(&g.name).unwrap();
assert!(saved.same_look(g), "{} keeps its look", g.name);
assert!(ids.iter().any(|id| doc(&s).node(*id).unwrap().extras().graphic_style == Some(saved.id)), "{} stays linked", g.name);
}
}
/// A document with pattern `name` (a dot) and its swatch.
fn add_pattern(s: &mut Session, name: &str, radius: f64) {
s.edit("Pattern", |d, _| {
+9
View File
@@ -3091,6 +3091,15 @@ digits Malayalam Малаялам
Stun Pulse Зашеметяване
Stealth Fade Скритост
Shield Buff Щит
Textures Текстури
Fine Grain Фино зърно
Canvas Weave Тъкано платно
Burlap Sack Зебло
Cracked Glaze Напукана глазура
Mosaic Floor Мозаечен под
Quilted Squares Капитонирани квадрати
Leaded Glass Оловно стъкло
Damp Paper Влажна хартия
Shape Фигура
Shape Builder Създател на фигури
Shape Builder Regions Области на създателя на фигури
Can't render this file because it contains an unexpected character in line 2 and column 73.
+9
View File
@@ -794,6 +794,15 @@
Stun Pulse Omamljenost
Stealth Fade Nevidljivost
Shield Buff Štit
Textures Teksture
Fine Grain Fino zrno
Canvas Weave Tkano platno
Burlap Sack Jutena vreća
Cracked Glaze Ispucala glazura
Mosaic Floor Mozaični pod
Quilted Squares Prošiveni kvadrati
Leaded Glass Olovno staklo
Damp Paper Vlažni papir
Outlines and Rules Obrisi i linije
Hand-Drawn Ručno crtano
Gradient Finishes Gradijentne završnice
Can't render this file because it contains an unexpected character in line 2 and column 73.
+9
View File
@@ -4009,6 +4009,15 @@ digits Malayalam Malaiàlam
Stun Pulse Atordiment
Stealth Fade Sigil
Shield Buff Escut
Textures Textures
Fine Grain Gra fi
Canvas Weave Teixit de llenç
Burlap Sack Sac de jute
Cracked Glaze Vidrat esquerdat
Mosaic Floor Terra de mosaic
Quilted Squares Quadrats encoixinats
Leaded Glass Vitrall emplomat
Damp Paper Paper humit
Shape Forma
Shape Builder Constructor de formes
Shape Builder Delete Suprimeix del constructor de formes
Can't render this file because it contains an unexpected character in line 2 and column 73.
+9
View File
@@ -802,6 +802,15 @@
Stun Pulse Omráčení
Stealth Fade Plížení
Shield Buff Štít
Textures Textury
Fine Grain Jemné zrno
Canvas Weave Tkané plátno
Burlap Sack Pytlovina
Cracked Glaze Popraskaná glazura
Mosaic Floor Mozaiková podlaha
Quilted Squares Prošívané čtverce
Leaded Glass Olovnaté sklo
Damp Paper Vlhký papír
Outlines and Rules Obrysy a linky
Hand-Drawn Ručně kreslené
Gradient Finishes Přechodové povrchy
Can't render this file because it contains an unexpected character in line 2 and column 73.
+9
View File
@@ -740,6 +740,15 @@
Stun Pulse Bedøvelse
Stealth Fade Snige
Shield Buff Skjold
Textures Teksturer
Fine Grain Fin kornethed
Canvas Weave Lærredsvævning
Burlap Sack Jutesæk
Cracked Glaze Krakeleret glasur
Mosaic Floor Mosaikgulv
Quilted Squares Quiltede firkanter
Leaded Glass Blyindfattet glas
Damp Paper Fugtigt papir
Outlines and Rules Konturer og linjer
Hand-Drawn Håndtegnet
Gradient Finishes Gradientfinish
Can't render this file because it contains an unexpected character in line 2 and column 73.
+9
View File
@@ -3138,6 +3138,15 @@ digits Malayalam Malayalam
Stun Pulse Betäubung
Stealth Fade Schleichen
Shield Buff Schild
Textures Texturen
Fine Grain Feine Körnung
Canvas Weave Leinwandgewebe
Burlap Sack Jutesack
Cracked Glaze Craquelé-Glasur
Mosaic Floor Mosaikboden
Quilted Squares Gesteppte Quadrate
Leaded Glass Bleiglas
Damp Paper Feuchtes Papier
Shape Form
Shape Builder Formerstellung
Shape Builder Regions Formerstellungsbereiche
Can't render this file because it contains an unexpected character in line 2 and column 73.
+9
View File
@@ -3656,6 +3656,15 @@ digits Malayalam Μαλαγιάλαμ
Stun Pulse Ζάλη
Stealth Fade Αορασία
Shield Buff Ασπίδα
Textures Υφές
Fine Grain Λεπτός κόκκος
Canvas Weave Ύφανση καμβά
Burlap Sack Λινάτσα
Cracked Glaze Ραγισμένο γλάσο
Mosaic Floor Ψηφιδωτό δάπεδο
Quilted Squares Καπιτονέ τετράγωνα
Leaded Glass Μολυβδόδετο γυαλί
Damp Paper Υγρό χαρτί
Shape Builder Regions Περιοχές δημιουργίας σχημάτων
Shape Effects Εφέ σχημάτων
Shape Mode Λειτουργία σχήματος
Can't render this file because it is too large.
+9
View File
@@ -3177,6 +3177,15 @@ digits Malayalam Malayálam
Stun Pulse Aturdimiento
Stealth Fade Sigilo
Shield Buff Escudo
Textures Texturas
Fine Grain Grano fino
Canvas Weave Tejido de lienzo
Burlap Sack Saco de arpillera
Cracked Glaze Esmalte agrietado
Mosaic Floor Suelo de mosaico
Quilted Squares Cuadros acolchados
Leaded Glass Vidrio emplomado
Damp Paper Papel húmedo
Shape Forma
Shape Builder Generador de formas
Shape Builder Regions Regiones del generador de formas
Can't render this file because it contains an unexpected character in line 2 and column 73.
+9
View File
@@ -793,6 +793,15 @@
Stun Pulse Tainnutus
Stealth Fade Hiipiminen
Shield Buff Kilpi
Textures Tekstuurit
Fine Grain Hieno rae
Canvas Weave Kanvaskudos
Burlap Sack Juuttisäkki
Cracked Glaze Krakeloitu lasite
Mosaic Floor Mosaiikkilattia
Quilted Squares Tikatut ruudut
Leaded Glass Lyijylasi
Damp Paper Kostea paperi
Outlines and Rules Ääriviivat ja viivat
Hand-Drawn Käsin piirretyt
Gradient Finishes Liukuväriviimeistelyt
Can't render this file because it contains an unexpected character in line 2 and column 73.
+9
View File
@@ -3169,6 +3169,15 @@ digits Malayalam Malayalam
Stun Pulse Étourdissement
Stealth Fade Furtivité
Shield Buff Bouclier
Textures Textures
Fine Grain Grain fin
Canvas Weave Toile tissée
Burlap Sack Sac de jute
Cracked Glaze Glaçure craquelée
Mosaic Floor Sol en mosaïque
Quilted Squares Carrés matelassés
Leaded Glass Vitrail au plomb
Damp Paper Papier humide
Shape Forme
Shape Builder Concepteur de forme
Shape Builder Regions Zones du Concepteur de forme
Can't render this file because it contains an unexpected character in line 2 and column 73.
+9
View File
@@ -4324,6 +4324,15 @@ antiAlias Sharp शार्प
Stun Pulse स्तब्ध
Stealth Fade छिपना
Shield Buff ढाल
Textures बनावटें
Fine Grain महीन दाना
Canvas Weave कैनवास बुनावट
Burlap Sack टाट की बोरी
Cracked Glaze दरकी ग्लेज़
Mosaic Floor मोज़ेक फ़र्श
Quilted Squares रज़ाईदार वर्ग
Leaded Glass सीसा जड़ा काँच
Damp Paper नम काग़ज़
Shaft: दस्ता:
Shape शेप
Shape Builder शेप बिल्डर
Can't render this file because it is too large.
+9
View File
@@ -3799,6 +3799,15 @@ mark-style Japanese Japán
Stun Pulse Kábítás
Stealth Fade Lopakodás
Shield Buff Pajzs
Textures Textúrák
Fine Grain Finom szemcse
Canvas Weave Vászonszövés
Burlap Sack Jutazsák
Cracked Glaze Repedezett máz
Mosaic Floor Mozaikpadló
Quilted Squares Steppelt négyzetek
Leaded Glass Ólomüveg
Damp Paper Nedves papír
Shape Alakzat
Shape Builder Alakzatépítő
Shape Builder Regions Alakzatépítő területei
Can't render this file because it contains an unexpected character in line 2 and column 73.
+9
View File
@@ -740,6 +740,15 @@
Stun Pulse Pingsan
Stealth Fade Menghilang
Shield Buff Perisai
Textures Tekstur
Fine Grain Butiran Halus
Canvas Weave Anyaman Kanvas
Burlap Sack Karung Goni
Cracked Glaze Glasir Retak
Mosaic Floor Lantai Mosaik
Quilted Squares Kotak Quilt
Leaded Glass Kaca Patri
Damp Paper Kertas Basah
Outlines and Rules Garis luar dan garis
Hand-Drawn Gambar tangan
Gradient Finishes Finishing gradien
1 # Indonesian (id) catalog. Same format as zh-hant.tsv: context <TAB> source <TAB> translation
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
+9
View File
@@ -3214,6 +3214,15 @@ digits Malayalam Malayalam
Stun Pulse Stordimento
Stealth Fade Furtività
Shield Buff Scudo
Textures Texture
Fine Grain Grana fine
Canvas Weave Trama di tela
Burlap Sack Sacco di iuta
Cracked Glaze Smalto craquelé
Mosaic Floor Pavimento a mosaico
Quilted Squares Quadrati trapuntati
Leaded Glass Vetro piombato
Damp Paper Carta umida
Shape Forma
Shape Builder Generatore forme
Shape Builder Regions Aree del Generatore forme
Can't render this file because it contains an unexpected character in line 2 and column 73.
+9
View File
@@ -826,6 +826,15 @@ digits Malayalam マラヤーラム数字
Stun Pulse 気絶
Stealth Fade ステルス
Shield Buff シールド
Textures テクスチャ集
Fine Grain 細かい粒子
Canvas Weave キャンバス織り
Burlap Sack 麻袋
Cracked Glaze ひび割れ釉
Mosaic Floor モザイクの床
Quilted Squares キルトの四角
Leaded Glass 鉛ガラス
Damp Paper 湿った紙
Outlines and Rules アウトラインと罫線
Hand-Drawn 手描き風
Gradient Finishes グラデーション仕上げ
Can't render this file because it contains an unexpected character in line 2 and column 73.
+9
View File
@@ -699,6 +699,15 @@
Stun Pulse დაბნეულობა
Stealth Fade შენიღბვა
Shield Buff ფარი
Textures ტექსტურები
Fine Grain წვრილი მარცვალი
Canvas Weave ტილოს ქსოვილი
Burlap Sack ჯუთის ტომარა
Cracked Glaze დამსკდარი მინანქარი
Mosaic Floor მოზაიკის იატაკი
Quilted Squares ქვილთის კვადრატები
Leaded Glass ტყვიის მინა
Damp Paper ნესტიანი ქაღალდი
Outlines and Rules კონტურები და ხაზები
Hand-Drawn ხელით დახატული
Gradient Finishes გრადიენტული ზედაპირები
Can't render this file because it is too large.
+9
View File
@@ -819,6 +819,15 @@ digits Malayalam 말라얄람어
Stun Pulse 기절
Stealth Fade 은신
Shield Buff 방패
Textures 텍스처
Fine Grain 고운 입자
Canvas Weave 캔버스 직조
Burlap Sack 마대 자루
Cracked Glaze 갈라진 유약
Mosaic Floor 모자이크 바닥
Quilted Squares 퀼트 사각형
Leaded Glass 납유리
Damp Paper 젖은 종이
Outlines and Rules 윤곽선과 괘선
Hand-Drawn 손그림
Gradient Finishes 그레이디언트 마감
Can't render this file because it contains an unexpected character in line 2 and column 73.
+9
View File
@@ -754,6 +754,15 @@
Stun Pulse Verdoving
Stealth Fade Sluipen
Shield Buff Schild
Textures Texturen
Fine Grain Fijne korrel
Canvas Weave Canvasweefsel
Burlap Sack Jutezak
Cracked Glaze Gecraqueleerd glazuur
Mosaic Floor Mozaïekvloer
Quilted Squares Gequilte vierkanten
Leaded Glass Glas-in-lood
Damp Paper Vochtig papier
Outlines and Rules Omtrekken en lijnen
Hand-Drawn Handgetekend
Gradient Finishes Verloopafwerkingen
Can't render this file because it contains an unexpected character in line 2 and column 73.
+9
View File
@@ -749,6 +749,15 @@
Stun Pulse Ogłuszenie
Stealth Fade Ukrycie
Shield Buff Tarcza
Textures Tekstury
Fine Grain Drobne ziarno
Canvas Weave Splot płótna
Burlap Sack Worek jutowy
Cracked Glaze Spękana glazura
Mosaic Floor Mozaikowa posadzka
Quilted Squares Pikowane kwadraty
Leaded Glass Witraż ołowiany
Damp Paper Wilgotny papier
Outlines and Rules Kontury i linie
Hand-Drawn Rysowane odręcznie
Gradient Finishes Wykończenia gradientowe
Can't render this file because it contains an unexpected character in line 2 and column 73.
+9
View File
@@ -2669,6 +2669,15 @@ digits Malayalam Malaiala
Stun Pulse Atordoamento
Stealth Fade Furtividade
Shield Buff Escudo
Textures Texturas
Fine Grain Grão fino
Canvas Weave Trama de tela
Burlap Sack Saco de juta
Cracked Glaze Esmalte craquelado
Mosaic Floor Piso de mosaico
Quilted Squares Quadrados acolchoados
Leaded Glass Vitral de chumbo
Damp Paper Papel úmido
Shape Forma
Shape Builder Construtor de Formas
Shape Builder Regions Regiões do Construtor de Formas
Can't render this file because it contains an unexpected character in line 6 and column 47.
+9
View File
@@ -3209,6 +3209,15 @@ digits Malayalam Малаялам
Stun Pulse Оглушение
Stealth Fade Скрытность
Shield Buff Щит
Textures Текстуры
Fine Grain Мелкое зерно
Canvas Weave Холстяное плетение
Burlap Sack Мешковина
Cracked Glaze Потрескавшаяся глазурь
Mosaic Floor Мозаичный пол
Quilted Squares Стёганые квадраты
Leaded Glass Витражное стекло
Damp Paper Влажная бумага
Shape Фигура
Shape Builder Создание фигур
Shape Builder Regions Области создания фигур
Can't render this file because it is too large.
+9
View File
@@ -3101,6 +3101,15 @@ digits Malayalam Malayalam
Stun Pulse Bedövning
Stealth Fade Smyga
Shield Buff Sköld
Textures Texturer
Fine Grain Fin kornighet
Canvas Weave Kanvasväv
Burlap Sack Jutesäck
Cracked Glaze Krackelerad glasyr
Mosaic Floor Mosaikgolv
Quilted Squares Quiltade rutor
Leaded Glass Blyinfattat glas
Damp Paper Fuktigt papper
Shape Form
Shape Builder Formbyggare
Shape Builder Regions Formbyggarområden
Can't render this file because it contains an unexpected character in line 5 and column 25.
+9
View File
@@ -3005,6 +3005,15 @@ digits Malayalam Malayalam
Stun Pulse Sersemletme
Stealth Fade Gizlilik
Shield Buff Kalkan
Textures Dokular
Fine Grain İnce Gren
Canvas Weave Kanvas Dokuma
Burlap Sack Çuval Bezi
Cracked Glaze Çatlak Sır
Mosaic Floor Mozaik Zemin
Quilted Squares Kapitone Kareler
Leaded Glass Kurşunlu Cam
Damp Paper Nemli Kâğıt
Shape Şekil
Shape Builder Şekil Oluşturucu
Shape Builder Regions Şekil Oluşturucu Bölgeleri
Can't render this file because it contains an unexpected character in line 5 and column 25.
+9
View File
@@ -3206,6 +3206,15 @@ digits Malayalam Малаялам
Stun Pulse Оглушення
Stealth Fade Невидимість
Shield Buff Щит
Textures Текстури
Fine Grain Дрібне зерно
Canvas Weave Полотняне плетіння
Burlap Sack Мішковина
Cracked Glaze Потріскана глазур
Mosaic Floor Мозаїчна підлога
Quilted Squares Стьобані квадрати
Leaded Glass Вітражне скло
Damp Paper Вологий папір
Shape Фігура
Shape Builder Створення фігур
Shape Builder Regions Області створення фігур
Can't render this file because it contains an unexpected character in line 182 and column 5.
+9
View File
@@ -3545,6 +3545,15 @@ mark-style Japanese Kiểu Nhật
Stun Pulse Choáng
Stealth Fade Ẩn thân
Shield Buff Khiên
Textures Kết cấu
Fine Grain Hạt mịn
Canvas Weave Vải canvas
Burlap Sack Bao bố
Cracked Glaze Men rạn
Mosaic Floor Sàn khảm
Quilted Squares Ô chần bông
Leaded Glass Kính chì
Damp Paper Giấy ẩm
Shape Hình dạng
Shape Builder Tạo hình dạng
Shape Builder Regions Vùng Tạo hình dạng
Can't render this file because it contains an unexpected character in line 204 and column 5.
+9
View File
@@ -3044,6 +3044,15 @@ digits Malayalam 马拉雅拉姆数字
Stun Pulse 眩晕
Stealth Fade 隐身
Shield Buff 护盾
Textures 纹理
Fine Grain 细颗粒
Canvas Weave 帆布纹
Burlap Sack 麻布袋
Cracked Glaze 裂纹釉
Mosaic Floor 马赛克地面
Quilted Squares 绗缝方格
Leaded Glass 铅条玻璃
Damp Paper 湿纸
Shape 形状
Shape Builder 形状生成器
Shape Builder Regions 形状生成器区域
Can't render this file because it contains an unexpected character in line 2 and column 73.
+9
View File
@@ -4175,6 +4175,15 @@ digits Malayalam 馬來亞拉姆數字
Stun Pulse 暈眩
Stealth Fade 隱身
Shield Buff 護盾
Textures 紋理
Fine Grain 細顆粒
Canvas Weave 帆布紋
Burlap Sack 麻布袋
Cracked Glaze 裂紋釉
Mosaic Floor 馬賽克地面
Quilted Squares 絎縫方格
Leaded Glass 鉛條玻璃
Damp Paper 濕紙
Shape 形狀
Shape Builder 形狀建立
Shape Builder Regions 形狀建立區域
Can't render this file because it contains an unexpected character in line 6 and column 47.
+6 -5
View File
@@ -646,11 +646,12 @@ macOS cursor delivery (#2292) is narrowed to a native host adapter using the exi
Direct Selection of a path, compound path or type inside a dynamic instance also takes opacity and blend
(`transparency.set`) and a gradient or pattern fill or stroke (`paint.setFill` / `paint.setStroke`,
Eyedropper), for that instance only;
graphic style libraries (Window › Graphic Style Libraries; eight original libraries generated in code, including
Game HUD with Health Fill, Mana Glow, Damage Flash, Quest Outline, Coin Shine and Boss Alert, and Status Effects
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 six shipped (and further graphic-style libraries beyond the eight shipped, and further symbol libraries beyond Basic
graphic style libraries (Window › Graphic Style Libraries; nine original libraries generated in code, including
Game HUD with Health Fill, Mana Glow, Damage Flash, Quest Outline, Coin Shine and Boss Alert, Status Effects
with Poison Tint, Freeze Edge, Burn Aura, Stun Pulse, Stealth Fade and Shield Buff, and Textures with Fine Grain,
Canvas Weave, Burlap Sack, Cracked Glaze, Mosaic Floor, Quilted Squares, Leaded Glass and Damp Paper, painted with
the texture effects; User Defined; Other Library…; `graphicStyle.libraries`, `graphicStyle.addFromLibrary`).
- **Missing:** more built-in brush libraries beyond the six shipped (and further graphic-style libraries beyond the nine shipped, and further symbol libraries beyond Basic
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).
+4 -1
View File
@@ -3353,7 +3353,10 @@ as a value left out.
## Graphic style libraries
Graphic style libraries are read-only sets of graphic styles generated in code (Shadows and Glows, Outlines and
Rules, Hand-Drawn, Gradient Finishes, Shape Effects, Blends and Transparency, Game HUD, Status Effects). `graphicStyle.libraries` lists them
Rules, Hand-Drawn, Textures, Gradient Finishes, Shape Effects, Blends and Transparency, Game HUD, Status Effects). Textures
(`textures`) paints its fills and strokes with the texture effects: Fine Grain (`texture.grain`), Canvas Weave and Burlap
Sack (`texture.texturizer`), Cracked Glaze (`texture.craquelure`), Mosaic Floor (`texture.mosaicTiles`), Quilted Squares
(`texture.patchwork`), Leaded Glass (`texture.stainedGlass`) and Damp Paper (`sketch.waterPaper`). `graphicStyle.libraries` lists them
(`id`, `name`, `category`: `builtIn`, `user` or `loaded`, `count`) and `graphicStyle.library {library}` returns one's
styles in the `graphicStyle.list` shape (`library` is an id or a name). `graphicStyle.addFromLibrary {library, name? |
names?}` copies styles into the document's Graphic Styles as one undo step (no names: the whole library); styles the
+2 -1
View File
@@ -1358,7 +1358,8 @@ Moved from the ROADMAP's "Shipped so far" on 2026-10-10. Update it when a featur
- **Transparency:** three-state Knockout Group (on, neutral, off), Opacity & Mask Define Knockout Shape, Page Isolated Blending and Page Knockout Group, on screen and in SVG/PDF. SVG export writes a knockout group of opaque art plainly, without masks, so shapes meeting edge to edge leave no seam; translucent, blended, masked or brushed art knocks out through masks. Blend modes match the standard formulas on screen, in SVG and in PDF, and non-isolated groups blend with the art below. Flatten Transparency with presets, a dialog and a Flattener Preview panel. Flattening for files without transparency (PDF/X-1a, PDF/X-3) in a CMYK document keeps the inks where it rasterizes, as under an image with see-through pixels: the images it makes hold ink amounts, not screen colours the file would separate again, so a C100 M6 Y41 K3 panel stays C100 M6 Y41 K3 there (#2160, `engine/src/cmd/fileio/tests_pdfx.rs`).
On the canvas, the renderer no longer draws the picture of the art below back as an image each time it copies the backdrop of a non-isolated group that blends: it keeps that picture and draws the art that follows over it. At 2880 × 1800, 50 translucent groups with Multiply members take 65 ms a frame instead of 299 ms on 8 threads (`vectorcraft-cli bench`), and the frames have the same pixels.
Type inside a group, layer, symbol instance, blend or repeat keeps its opacity, blend mode, opacity mask, Opacity & Mask Define Knockout Shape, own effects, perspective and visibility when the effects on the container outline it. Hidden type with a geometry effect of its own is left out of exports.
- **Graphic styles:** styles keep opacity and blend mode, capture groups and type, apply on top with Alt, and link to the objects using them; Redefine, Break Link, Graphic Style Options, Select All Unused, Sort by Name, and Select > Same Graphic Style / Appearance Attribute. The panel has list and thumbnail views with rendered previews, merge, reorder and drag and drop, plus a Control bar Style picker; eight generated style libraries (including Game HUD and Status Effects) save and load as `.vcstyles`.
- **Graphic styles:** styles keep opacity and blend mode, capture groups and type, apply on top with Alt, and link to the objects using them; Redefine, Break Link, Graphic Style Options, Select All Unused, Sort by Name, and Select > Same Graphic Style / Appearance Attribute. The panel has list and thumbnail views with rendered previews, merge, reorder and drag and drop, plus a Control bar Style picker; nine generated style libraries (including Game HUD, Status Effects and Textures) save and load as `.vcstyles`.
The built-in Textures graphic style library (`graphicStyle.addFromLibrary {library: "textures"}`) has eight styles that paint their fills and strokes with the texture effects: Fine Grain (Grain), Canvas Weave and Burlap Sack (Texturizer), Cracked Glaze (Craquelure), Mosaic Floor (Mosaic Tiles), Quilted Squares (Patchwork), Leaded Glass (Stained Glass) and Damp Paper (Water Paper). The help page names new graphic styles for textures ([What's new](https://helpx.adobe.com/illustrator/desktop/new-features/whats-new.html)) without naming them, so the styles, their names and their settings are VectorCraft's own (`tests::stylelib::textures_styles_apply_their_texture_effects_and_keep_their_params_through_save_and_open`).
In the Graphic Styles panel, Shift-click selects a range of styles and Ctrl/Cmd-click adds or removes one.
Applying a style to several objects, and Redefine Graphic Style, give the objects one shared copy of the style's appearance instead of a copy each; an object that is edited later gets its own copy, and an object whose placed gradients are fitted to its own bounds gets its own. The undo history's memory estimate counts a shared appearance once. Saved files are unchanged (`crates/engine/src/tests/styles.rs`).
- **Several text styles at once:** in the Character Styles and Paragraph Styles panels, Shift-click highlights a range of styles and Ctrl/Cmd-click adds or removes one, without applying them; the panel menu's Select All Unused (`charStyle.unused`, `paraStyle.unused`) highlights the styles no type uses (in the layers, opacity masks, symbols, graph designs, pattern tiles and the art of brushes), never the Normal style; Delete, the button or the menu item, deletes every highlighted style but Normal in one undo step (`charStyle.delete {names}`, `paraStyle.delete {names}`). The menu's Duplicate copies every highlighted style in one undo step and highlights the copies. A highlighted row dragged onto Create New Style or Delete carries every highlighted style: dropped on Create New Style it copies them all and highlights the copies, and dropped on Delete it deletes them all but Normal and clears the highlight; a row from outside the highlight carries only its own style. Public reference: [Character and paragraph styles](https://web.archive.org/web/20261015081534/https://helpx.adobe.com/illustrator/using/character-paragraph-styles.html).