Fix Spiral tool click options dialog

Squashed from #3636 onto main.
This commit is contained in:
bflatastic
2026-10-22 22:57:26 +07:00
parent d73946ba46
commit a99d81e9aa
28 changed files with 87 additions and 5 deletions
+3 -2
View File
@@ -61,7 +61,7 @@ fn lengths(kind: &str) -> &'static [&'static str] {
"move" => &["dx", "dy", "distance"],
"rectangle" | "ellipse" | "rectangularGrid" | "polarGrid" | "artboardOptions" => &["width", "height"],
"roundedRectangle" => &["width", "height", "radius"],
"polygon" => &["radius"],
"polygon" | "spiral" => &["radius"],
"star" => &["radius1", "radius2"],
"lineSegment" => &["length"],
"arc" => &["lengthX", "lengthY"],
@@ -75,7 +75,7 @@ fn lengths(kind: &str) -> &'static [&'static str] {
fn suffix(kind: &str, key: &str) -> Option<&'static str> {
match (kind, key) {
("rotate" | "shear" | "reflect" | "move" | "lineSegment", "angle") => Some("°"),
("scale", "sx" | "sy") => Some("%"),
("scale", "sx" | "sy") | ("spiral", "decay") => Some("%"),
_ => None,
}
}
@@ -96,6 +96,7 @@ fn order(kind: &str) -> &'static [&'static str] {
"offsetPath" => &["offset", "joins", "miterLimit"],
"rectangularGrid" => &["width", "height", "rows", "rowSkew", "columns", "columnSkew"],
"polarGrid" => &["width", "height", "concentric", "concentricSkew", "radial", "radialSkew"],
"spiral" => &["radius", "decay", "segments"],
"artboardOptions" => &["name", "width", "height"],
"lineSegment" => &["length", "angle"],
_ => &[],
+1 -1
View File
@@ -246,7 +246,7 @@ macro_rules! registry {
registry! {
DimensionOptions: [dimension::KIND] => dimension::SPEC,
NewDocument: [new_document::KIND] => new_document::SPEC,
Shape: ["rectangle", "roundedRectangle", "ellipse", "polygon", "star", "lineSegment", "arc", "rectangularGrid", "polarGrid"] => shapes::SPEC,
Shape: ["rectangle", "roundedRectangle", "ellipse", "polygon", "star", "lineSegment", "arc", "spiral", "rectangularGrid", "polarGrid"] => shapes::SPEC,
Transform: ["move", "rotate", "scale", "reflect", "shear"] => transform::SPEC,
PathOp: ["average", "offsetPath", "simplify", "splitIntoGrid"] => path_ops::SPEC,
DocumentSetup: ["documentSetup"] => document_setup::SPEC,
+45 -2
View File
@@ -1,5 +1,5 @@
//! Shape size dialogs (a click with a shape tool): Rectangle, Rounded Rectangle, Ellipse, Polygon,
//! Star, Line Segment and Arc tool options, and the two grids (size, divider counts and skews, switches).
//! Star, Line Segment, Arc and Spiral tool options, and the two grids (size, divider counts and skews, switches).
use serde_json::{Value, json};
use vectorcraft_doc::Unit;
@@ -20,6 +20,7 @@ fn title(kind: &str) -> &'static str {
"ellipse" => tl!("Ellipse"),
"polygon" => tl!("Polygon"),
"star" => tl!("Star"),
"spiral" => tl!("Spiral"),
"rectangularGrid" => tl!("Rectangular Grid"),
"polarGrid" => tl!("Polar Grid"),
"arc" => tl!("Arc Segment Tool Options"),
@@ -100,6 +101,11 @@ fn body(app: &mut VectorcraftApp, ui: &mut egui::Ui, d: &mut Dialog) -> bool {
} else {
form::grid(ui, d, unit);
}
if d.kind == "spiral" {
ui.add_space(8.0);
form::check(ui, d, "clockwise", tl!("Clockwise"));
return false;
}
let own = match d.kind.as_str() {
"rectangularGrid" => ("frame", tl!("Use Outside Rectangle As Frame")),
"polarGrid" => ("compound", tl!("Create Compound Path From Ellipses")),
@@ -200,6 +206,17 @@ fn confirm(app: &mut VectorcraftApp, d: &Dialog) -> Result<Value, String> {
"shape.star",
json!({"cx": x, "cy": y, "radius1": d.f64("radius1", 50.0), "radius2": d.f64("radius2", 25.0), "points": d.f64("points", 5.0) as u64}),
),
"spiral" => (
"shape.spiral",
json!({
"cx": x,
"cy": y,
"radius": d.f64("radius", 50.0).max(0.01),
"decay": d.f64("decay", 80.0).clamp(5.0, 150.0),
"segments": (d.f64("segments", 10.0) as u64).clamp(2, 1000),
"clockwise": d.bool("clockwise"),
}),
),
kind @ ("rectangularGrid" | "polarGrid") => {
// The switches as they are; the typed fields as numbers.
let (mut p, (counts, skews)) = (form::params(d), grid_keys(kind));
@@ -240,7 +257,7 @@ fn confirm(app: &mut VectorcraftApp, d: &Dialog) -> Result<Value, String> {
),
};
// On the active plane while the perspective grid shows, sized in plane units from the click.
let options = options.or_else(|| matches!(d.kind.as_str(), "rectangularGrid" | "polarGrid").then(|| params.clone()));
let options = options.or_else(|| matches!(d.kind.as_str(), "spiral" | "rectangularGrid" | "polarGrid").then(|| params.clone()));
let result = match vectorcraft_engine::perspective_click(&app.session, id, &params, vectorcraft_geom::Point::new(x, y)) {
Some((id, params)) => run_and_close(app, &id, params),
None => run_and_close(app, id, params),
@@ -254,6 +271,32 @@ fn confirm(app: &mut VectorcraftApp, d: &Dialog) -> Result<Value, String> {
#[cfg(test)]
mod tests {
use super::*;
use vectorcraft_engine::Session;
#[test]
fn spiral_click_dialog_uses_and_updates_tool_options() {
let mut app = VectorcraftApp::new(Session::new(), Default::default());
app.run("file.new", json!({"width": 300, "height": 200})).unwrap();
app.run("tool.select", json!({"tool": "spiral"})).unwrap();
app.run("tool.setOption", json!({"tool": "spiral", "values": {"decay": 72.0, "segments": 14, "clockwise": false}})).unwrap();
super::super::open_tool_dialog(&mut app, "spiral", json!({"x": 40.0, "y": 60.0}));
let d = app.ui.dialog.as_ref().expect("Spiral dialog");
assert_eq!(d.kind, "spiral");
assert_eq!((d.f64("x", 0.0), d.f64("y", 0.0), d.f64("radius", 0.0)), (40.0, 60.0, 50.0));
assert_eq!((d.f64("decay", 0.0), d.f64("segments", 0.0), d.bool("clockwise")), (72.0, 14.0, false));
let d = app.ui.dialog.as_mut().unwrap();
d.fields.insert("radius".into(), json!(35.0));
d.fields.insert("decay".into(), json!(65.0));
d.fields.insert("segments".into(), json!(12));
d.fields.insert("clockwise".into(), json!(true));
super::super::confirm(&mut app).unwrap();
assert!(app.ui.dialog.is_none());
assert_eq!(app.session.doc().unwrap().doc.layers[0].children().unwrap().len(), 1);
assert_eq!(app.session.tool_options_of("spiral"), json!({"decay": 65.0, "segments": 12, "clockwise": true}));
}
#[test]
fn alt_click_centres_the_typed_size_on_the_click() {
+14
View File
@@ -20,6 +20,20 @@ pub fn open_tool_dialog(app: &mut VectorcraftApp, kind: &str, p: Value) {
Dialog::new(kind, json!({"x": x, "y": y, "radius1": "50 pt", "radius2": "25 pt", "points": app.session.tool_options_of(kind)["points"]}))
}
"lineSegment" => Dialog::new(kind, json!({"x": x, "y": y, "length": "100 pt", "angle": 0})),
"spiral" => {
let options = app.session.tool_options_of(kind);
Dialog::new(
kind,
json!({
"x": x,
"y": y,
"radius": "50 pt",
"decay": options.get("decay").cloned().unwrap_or(json!(80.0)),
"segments": options.get("segments").cloned().unwrap_or(json!(10)),
"clockwise": options.get("clockwise").cloned().unwrap_or(json!(true)),
}),
)
}
"arc" => {
let opts = app.session.tool_options_of(kind);
let closed = opts.get("closed").and_then(Value::as_bool).unwrap_or(false);
+1
View File
@@ -5382,6 +5382,7 @@ axis Y Axis Y ос
Packaged {n} file(s) in {folder} Пакетирани са {n} файла в {folder}
Packaged {n} file(s) {note} Пакетирани са {n} файла {note}
{count} file(s) in {folder}. Show the package folder? {count} файл(а) в {folder}. Показване на папката на пакета?
Clockwise По часовниковата стрелка
Dither Дитъринг
Fine noise hides banding in the gradient fill Фин шум скрива ивиците в градиентната запълка
@msg `dither` applies to gradient fills (stroke: false) `dither` се прилага към градиентни запълки (stroke: false)
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -5427,6 +5427,7 @@ axis Y Axis osa Y
Packaged {n} file(s) in {folder} Zabaleno souborů: {n} do {folder}
Packaged {n} file(s) {note} Zabaleno souborů: {n} {note}
{count} file(s) in {folder}. Show the package folder? Souborů: {count} v {folder}. Zobrazit složku balíčku?
Clockwise Ve směru hodinových ručiček
Dither Rozptýlení
Fine noise hides banding in the gradient fill Jemný šum skryje pruhy ve výplni přechodem
@msg `dither` applies to gradient fills (stroke: false) `dither` platí pro výplně přechodem (stroke: false)
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -5398,6 +5398,7 @@ axis Y Axis Y-akse
Packaged {n} file(s) in {folder} Pakkede {n} fil(er) i {folder}
Packaged {n} file(s) {note} Pakkede {n} fil(er) {note}
{count} file(s) in {folder}. Show the package folder? {count} fil(er) i {folder}. Vis pakkemappen?
Clockwise Med uret
Dither Dither
Fine noise hides banding in the gradient fill Fin støj skjuler striber i gradientfyldet
@msg `dither` applies to gradient fills (stroke: false) `dither` gælder for gradientfyld (stroke: false)
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -5009,6 +5009,7 @@ axis Y Axis Y-Achse
Packaged {n} file(s) in {folder} {n} Datei(en) in {folder} verpackt
Packaged {n} file(s) {note} {n} Datei(en) verpackt {note}
{count} file(s) in {folder}. Show the package folder? {count} Datei(en) in {folder}. Paketordner anzeigen?
Clockwise Im Uhrzeigersinn
Dither Dithering
Fine noise hides banding in the gradient fill Feines Rauschen verbirgt Streifen in der Verlaufsfläche
@msg `dither` applies to gradient fills (stroke: false) `dither` gilt für Verlaufsflächen (stroke: false)
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -5379,6 +5379,7 @@ axis Y Axis Άξονας Y
Packaged {n} file(s) in {folder} Συσκευάστηκαν {n} αρχεία στον φάκελο {folder}
Packaged {n} file(s) {note} Συσκευάστηκαν {n} αρχεία {note}
{count} file(s) in {folder}. Show the package folder? {count} αρχεία στον φάκελο {folder}. Να εμφανιστεί ο φάκελος συσκευασίας;
Clockwise Δεξιόστροφα
Dither Πρόσθεση θορύβου
Fine noise hides banding in the gradient fill Ο λεπτός θόρυβος κρύβει τις λωρίδες στο γέμισμα ντεγκραντέ
@msg `dither` applies to gradient fills (stroke: false) Το `dither` ισχύει για γεμίσματα ντεγκραντέ (stroke: false)
Can't render this file because it contains an unexpected character in line 2045 and column 19.
+1
View File
@@ -5369,6 +5369,7 @@ axis Y Axis Eje Y
Packaged {n} file(s) in {folder} Se empaquetaron {n} archivo(s) en {folder}
Packaged {n} file(s) {note} Se empaquetaron {n} archivo(s) {note}
{count} file(s) in {folder}. Show the package folder? {count} archivo(s) en {folder}. ¿Mostrar la carpeta del paquete?
Clockwise En sentido horario
Dither Tramado
Fine noise hides banding in the gradient fill Un ruido fino oculta las bandas del relleno de degradado
@msg `dither` applies to gradient fills (stroke: false) `dither` se aplica a rellenos de degradado (stroke: false)
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -5458,6 +5458,7 @@ axis Y Axis Y-akseli
Packaged {n} file(s) in {folder} Paketoitiin {n} tiedosto(a) kansioon {folder}
Packaged {n} file(s) {note} Paketoitiin {n} tiedosto(a) {note}
{count} file(s) in {folder}. Show the package folder? {count} tiedosto(a) kansiossa {folder}. Näytetäänkö pakettikansio?
Clockwise Myötäpäivään
Dither Rasterointi
Fine noise hides banding in the gradient fill Hieno kohina piilottaa raidat liukuväritäytöstä
@msg `dither` applies to gradient fills (stroke: false) `dither` koskee liukuväritäyttöjä (stroke: false)
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -5426,6 +5426,7 @@ axis Y Axis Axe Y
Packaged {n} file(s) in {folder} {n} fichier(s) assemblé(s) dans {folder}
Packaged {n} file(s) {note} {n} fichier(s) assemblé(s) {note}
{count} file(s) in {folder}. Show the package folder? {count} fichier(s) dans {folder}. Afficher le dossier de l’assemblage ?
Clockwise Sens horaire
Dither Simulation
Fine noise hides banding in the gradient fill Un bruit fin masque les bandes du fond en dégradé
@msg `dither` applies to gradient fills (stroke: false) `dither` s’applique aux fonds en dégradé (stroke: false)
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -5413,6 +5413,7 @@ axis Y Axis Y tengely
Packaged {n} file(s) in {folder} Becsomagolt fájlok: {n}, mappa: {folder}
Packaged {n} file(s) {note} Becsomagolt fájlok: {n} {note}
{count} file(s) in {folder}. Show the package folder? Fájlok: {count}, mappa: {folder}. Megnyitod a csomag mappáját?
Clockwise Óramutató járásával megegyező
Dither Árnyalatkeverés
Fine noise hides banding in the gradient fill A finom zaj elrejti a sávokat a színátmenetes kitöltésben
@msg `dither` applies to gradient fills (stroke: false) A `dither` színátmenetes kitöltésekre vonatkozik (stroke: false)
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -5398,6 +5398,7 @@ axis Y Axis Sumbu Y
Packaged {n} file(s) in {folder} Berhasil mengemas {n} file di {folder}
Packaged {n} file(s) {note} Berhasil mengemas {n} file {note}
{count} file(s) in {folder}. Show the package folder? {count} file dalam {folder}. Tampilkan folder paket?
Clockwise Searah jarum jam
Dither Dither
Fine noise hides banding in the gradient fill Derau halus menyembunyikan pita warna pada isian gradien
@msg `dither` applies to gradient fills (stroke: false) `dither` berlaku untuk isian gradien (stroke: false)
Can't render this file because it contains an unexpected character in line 3816 and column 19.
+1
View File
@@ -5043,6 +5043,7 @@ axis Y Axis Asse Y
Packaged {n} file(s) in {folder} Pacchetto creato con {n} file in {folder}
Packaged {n} file(s) {note} Pacchetto creato con {n} file {note}
{count} file(s) in {folder}. Show the package folder? {count} file in {folder}. Vuoi mostrare la cartella del pacchetto?
Clockwise In senso orario
Dither Dithering
Fine noise hides banding in the gradient fill Un rumore fine nasconde le bande nel riempimento sfumato
@msg `dither` applies to gradient fills (stroke: false) `dither` si applica ai riempimenti sfumati (stroke: false)
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -5105,6 +5105,7 @@ axis Y Axis Y 軸
Packaged {n} file(s) in {folder} {n} 個のファイルを {folder} にパッケージしました
Packaged {n} file(s) {note} {n} 個のファイルをパッケージしました {note}
{count} file(s) in {folder}. Show the package folder? {folder} に {count} 個のファイル。パッケージフォルダーを表示しますか?
Clockwise 時計回り
Dither ディザ
Fine noise hides banding in the gradient fill 細かいノイズでグラデーションの塗りの縞を目立たなくします
@msg `dither` applies to gradient fills (stroke: false) `dither` はグラデーションの塗りに適用されます (stroke: false)
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -5343,6 +5343,7 @@ axis Y Axis Y ღერძი
@msg this kind of brush has no options dialog yet ამ ტიპის ფუნჯს პარამეტრების დიალოგი ჯერ არ აქვს
Drag art, colors and text styles here to reuse them across documents. Libraries are stored on this machine — no account required. გადმოათრიეთ აქ გრაფიკა, ფერები და ტექსტის სტილები, რომ სხვა დოკუმენტებშიც გამოიყენოთ. ბიბლიოთეკები ამ კომპიუტერზე ინახება — ანგარიში არ არის საჭირო.
Choose a filter ფილტრის არჩევა
Clockwise საათის ისრის მიმართულებით
Dither დიზერინგი
Fine noise hides banding in the gradient fill წვრილი ხმაური მალავს ზოლებს გრადიენტულ შევსებაში
@msg `dither` applies to gradient fills (stroke: false) `dither` ვრცელდება გრადიენტულ შევსებებზე (stroke: false)
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -5006,6 +5006,7 @@ axis Y Axis Y축
Packaged {n} file(s) in {folder} {folder}에 파일 {n}개를 패키지했습니다
Packaged {n} file(s) {note} 파일 {n}개를 패키지했습니다 {note}
{count} file(s) in {folder}. Show the package folder? {folder}에 파일 {count}개. 패키지 폴더를 표시하시겠습니까?
Clockwise 시계 방향
Dither 디더
Fine noise hides banding in the gradient fill 미세한 노이즈로 그레이디언트 칠의 띠를 감춥니다
@msg `dither` applies to gradient fills (stroke: false) `dither`는 그레이디언트 칠에 적용됩니다 (stroke: false)
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -5441,6 +5441,7 @@ axis Y Axis Y-as
Packaged {n} file(s) in {folder} {n} bestand(en) verpakt in {folder}
Packaged {n} file(s) {note} {n} bestand(en) verpakt {note}
{count} file(s) in {folder}. Show the package folder? {count} bestand(en) in {folder}. De pakketmap openen?
Clockwise Met de klok mee
Dither Dither
Fine noise hides banding in the gradient fill Fijne ruis verbergt banden in de verloopvulling
@msg `dither` applies to gradient fills (stroke: false) `dither` geldt voor verloopvullingen (stroke: false)
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -5279,6 +5279,7 @@ axis Y Axis Oś Y
Packaged {n} file(s) in {folder} Spakowane pliki: {n} w {folder}
Packaged {n} file(s) {note} Spakowane pliki: {n} {note}
{count} file(s) in {folder}. Show the package folder? Pliki: {count} w {folder}. Pokazać folder pakietu?
Clockwise Zgodnie z ruchem wskazówek zegara
Dither Rozpraszanie
Fine noise hides banding in the gradient fill Drobny szum ukrywa pasy w wypełnieniu gradientem
@msg `dither` applies to gradient fills (stroke: false) `dither` dotyczy wypełnień gradientem (stroke: false)
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -5344,6 +5344,7 @@ axis Y Axis Eixo Y
Packaged {n} file(s) in {folder} {n} arquivo(s) empacotado(s) em {folder}
Packaged {n} file(s) {note} {n} arquivo(s) empacotado(s) {note}
{count} file(s) in {folder}. Show the package folder? {count} arquivo(s) em {folder}. Mostrar a pasta do pacote?
Clockwise Sentido horário
Dither Dither
Fine noise hides banding in the gradient fill Um ruído fino esconde as faixas do preenchimento em gradiente
@msg `dither` applies to gradient fills (stroke: false) `dither` se aplica a preenchimentos em gradiente (stroke: false)
Can't render this file because it contains an unexpected character in line 6 and column 47.
+1
View File
@@ -5039,6 +5039,7 @@ axis Y Axis Ось Y
Packaged {n} file(s) in {folder} Упаковано файлов: {n} в {folder}
Packaged {n} file(s) {note} Упаковано файлов: {n} {note}
{count} file(s) in {folder}. Show the package folder? Файлов: {count} в {folder}. Показать папку пакета?
Clockwise По часовой стрелке
Dither Дизеринг
Fine noise hides banding in the gradient fill Мелкий шум скрывает полосы в градиентной заливке
@msg `dither` applies to gradient fills (stroke: false) `dither` применяется к градиентным заливкам (stroke: false)
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -5383,6 +5383,7 @@ axis Y Axis Y-axel
Packaged {n} file(s) in {folder} Paketerade {n} fil(er) i {folder}
Packaged {n} file(s) {note} Paketerade {n} fil(er) {note}
{count} file(s) in {folder}. Show the package folder? {count} fil(er) i {folder}. Visa paketmappen?
Clockwise Medurs
Dither Dithering
Fine noise hides banding in the gradient fill Fint brus döljer bandningen i övertoningsfyllningen
@msg `dither` applies to gradient fills (stroke: false) `dither` gäller övertoningsfyllningar (stroke: false)
Can't render this file because it contains an unexpected character in line 5 and column 25.
+1
View File
@@ -5391,6 +5391,7 @@ axis Y Axis Y ekseni
Packaged {n} file(s) in {folder} {folder} biçiminde paketlenmiş {n} dosyası/dosyaları
Packaged {n} file(s) {note} Paketlenmiş {n} dosyası/dosyaları {note}
{count} file(s) in {folder}. Show the package folder? {folder} içindeki {count} dosyası/dosyaları. Paket klasörü gösterilsin mi?
Clockwise Saat yönünde
Dither Titreme
Fine noise hides banding in the gradient fill İnce gürültü, degrade dolgudaki bantları gizler
@msg `dither` applies to gradient fills (stroke: false) `dither` degrade dolgulara uygulanır (stroke: false)
Can't render this file because it contains an unexpected character in line 5 and column 25.
+1
View File
@@ -5023,6 +5023,7 @@ axis Y Axis Вісь Y
Packaged {n} file(s) in {folder} Упаковано файли: {n} {folder}
Packaged {n} file(s) {note} Упаковано файли: {n} {note}
{count} file(s) in {folder}. Show the package folder? файлів: {count} {folder}. Показати папку пакета?
Clockwise За годинниковою стрілкою
Dither Дизеринг
Fine noise hides banding in the gradient fill Дрібний шум приховує смуги в градієнтній заливці
@msg `dither` applies to gradient fills (stroke: false) `dither` застосовується до градієнтних заливок (stroke: false)
Can't render this file because it contains an unexpected character in line 733 and column 40.
+1
View File
@@ -5023,6 +5023,7 @@ axis Y Axis Trục Y
Packaged {n} file(s) in {folder} Đã đóng gói {n} tệp trong {folder}
Packaged {n} file(s) {note} Đã đóng gói {n} tệp {note}
{count} file(s) in {folder}. Show the package folder? {count} tệp trong {folder}. Hiện thư mục gói?
Clockwise Theo chiều kim đồng hồ
Dither Dither
Fine noise hides banding in the gradient fill Nhiễu mịn che dải màu trong vùng tô chuyển sắc
@msg `dither` applies to gradient fills (stroke: false) `dither` áp dụng cho vùng tô chuyển sắc (stroke: false)
Can't render this file because it contains an unexpected character in line 4028 and column 10.
+1
View File
@@ -5267,6 +5267,7 @@ axis Y Axis Y 轴
Packaged {n} file(s) in {folder} 已将 {n} 个文件打包到 {folder}
Packaged {n} file(s) {note} 已打包 {n} 个文件 {note}
{count} file(s) in {folder}. Show the package folder? {folder} 中有 {count} 个文件。要显示打包文件夹吗?
Clockwise 顺时针
Dither 仿色
Fine noise hides banding in the gradient fill 细微杂色可隐藏渐变填色中的色带
@msg `dither` applies to gradient fills (stroke: false) `dither` 适用于渐变填色 (stroke: false)
Can't render this file because it contains an unexpected character in line 2 and column 73.
+1
View File
@@ -5062,6 +5062,7 @@ axis Y Axis Y 軸
Packaged {n} file(s) in {folder} 已將 {n} 個檔案封裝到 {folder}
Packaged {n} file(s) {note} 已封裝 {n} 個檔案 {note}
{count} file(s) in {folder}. Show the package folder? {folder} 中有 {count} 個檔案。要顯示封裝資料夾嗎?
Clockwise 順時針
Dither 仿色
Fine noise hides banding in the gradient fill 細微雜色可隱藏漸層填色中的色帶
@msg `dither` applies to gradient fills (stroke: false) `dither` 適用於漸層填色 (stroke: false)
Can't render this file because it contains an unexpected character in line 6 and column 47.