Merge pull request #859 from storytold/fix/828-effect-dropdowns

Fix #828: Offset Path's Joins and Zig Zag's Points are dropdowns
This commit is contained in:
BFlat 2026-10-10 10:44:27 +07:00 committed by GitHub
commit 84ae8e90c3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
10 changed files with 58 additions and 4 deletions

View File

@ -158,6 +158,8 @@ fn choices(effect: &str, key: &str) -> Option<form::Choices> {
("blur.radial", "method") => Some(&[("Spin", "spin"), ("Zoom", "zoom")]),
("blur.radial", "quality") => Some(&[("Draft", "draft"), ("Good", "good"), ("Best", "best")]),
("blur.smart", "quality") => Some(&[("Low", "low"), ("Medium", "medium"), ("High", "high")]),
("path.offsetPath", "joins") => Some(&[("Miter", "miter"), ("Round", "round"), ("Bevel", "bevel")]),
("distort.roughen" | "distort.zigZag", "points") => Some(&[("Smooth", "smooth"), ("Corner", "corner")]),
_ => None,
}
}
@ -371,3 +373,19 @@ fn confirm(app: &mut VectorcraftApp, d: &Dialog) -> Result<Value, String> {
app.ui.dialog = None;
r
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn fields_that_pick_a_value_are_dropdowns_of_its_values() {
// The values come from the effect's parameter documentation (`joins: "miter"|"round"|…`).
for (effect, key) in [("path.offsetPath", "joins"), ("distort.zigZag", "points"), ("distort.roughen", "points")] {
let doc = vectorcraft_effects::effect_info(effect).unwrap().params;
let listed = doc.split(&format!("{key}: ")).nth(1).unwrap().split([',', '}', ' ']).next().unwrap().to_string();
let values: Vec<String> = choices(effect, key).unwrap().iter().map(|(_, v)| format!("\"{v}\"")).collect();
assert_eq!(values.join("|"), listed, "{effect} {key}");
}
}
}

View File

@ -215,7 +215,9 @@ pub(super) fn param_fields(
d.fields.iter().filter(|(k, _)| !k.starts_with("__") && k.as_str() != "preview").map(|(k, v)| (k.clone(), v.clone())).collect();
keys.sort_by_key(|(k, _)| rank(k));
for (k, v) in keys {
ui.label(egui::RichText::new(humanized(&k)).color(t.text));
// A size's Relative / Absolute pair (Roughen, Zig Zag, Tweak) is its own label.
let relative = k == "relative" && v.is_boolean();
ui.label(egui::RichText::new(if relative { String::new() } else { humanized(&k) }).color(t.text));
if let Some(cur) = crate::widgets::blend_param(&k, &v) {
if let Some(m) = crate::widgets::blend_param_dropdown(ui, ("fx-blend", &k), cur) {
d.fields.insert(k, m);
@ -247,9 +249,19 @@ pub(super) fn param_fields(
changed = true;
}
}
Value::Bool(mut b) => {
if ui.checkbox(&mut b, "").changed() {
d.fields.insert(k, json!(b));
Value::Bool(b) if relative => {
ui.horizontal(|ui| {
for (label, on) in [(tl!("Relative"), true), (tl!("Absolute"), false)] {
if crate::widgets::radio(ui, label, b == on, true) && b != on {
d.fields.insert(k.clone(), json!(on));
changed = true;
}
}
});
}
Value::Bool(b) => {
if crate::widgets::check(ui, "", b, true) {
d.fields.insert(k, json!(!b));
changed = true;
}
}

View File

@ -2564,6 +2564,9 @@
Smart Guides (⌘U) Guías inteligentes (⌘U)
Smart Punctuation… Puntuación inteligente…
Smooth Suavizar
Corner Vértice
Relative Relativo
Absolute Absoluto
Smooth Color Color suavizado
Smooth Tool Herramienta Suavizar
Snap Curves To Lines Ajustar curvas a líneas

Can't render this file because it contains an unexpected character in line 2 and column 73.

View File

@ -2561,6 +2561,9 @@
Smart Guides (⌘U) Repères commandés (⌘U)
Smart Punctuation… Ponctuation typographique…
Smooth Lisser
Corner Angle
Relative Relatif
Absolute Absolu
Smooth Color Couleur lissée
Smooth Tool Outil Arrondi
Snap Curves To Lines Aimanter les courbes aux lignes

Can't render this file because it contains an unexpected character in line 2 and column 73.

View File

@ -2564,6 +2564,9 @@
Smart Guides (⌘U) Guide sensibili (⌘U)
Smart Punctuation… Punteggiatura intelligente…
Smooth Smussa
Corner Angolo
Relative Relativo
Absolute Assoluto
Smooth Color Colore graduale
Smooth Tool Strumento Smussa
Snap Curves To Lines Aggancia curve a linee

Can't render this file because it contains an unexpected character in line 2 and column 73.

View File

@ -2379,6 +2379,9 @@
Smart Guides (View → Smart Guides) スマートガイド (表示 → スマートガイド)
Smart Guides (⌘U) スマートガイド (⌘U)
Smooth スムーズ
Corner コーナー
Relative 相対
Absolute 絶対
Smooth Tool スムーズツール
Snap Curves To Lines 曲線を直線にスナップ
View: 表示:

Can't render this file because it contains an unexpected character in line 2 and column 73.

View File

@ -2560,6 +2560,9 @@
Smart Guides (⌘U) Умные направляющие (⌘U)
Smart Punctuation… Умная пунктуация…
Smooth Сгладить
Corner Угол
Relative Относительно
Absolute Абсолютно
Smooth Color Сглаженный цвет
Smooth Tool Инструмент «Сглаживание»
Snap Curves To Lines Привязывать кривые к линиям

Can't render this file because it contains an unexpected character in line 2 and column 73.

View File

@ -2556,6 +2556,9 @@
Smart Guides (⌘U) Розумні напрямні (⌘U)
Smart Punctuation… Розумна пунктуація…
Smooth Згладити
Corner Кут
Relative Відносно
Absolute Абсолютно
Smooth Color Згладжений колір
Smooth Tool Інструмент «Згладжування»
Snap Curves To Lines Прив’язувати криві до ліній

Can't render this file because it has a wrong number of fields in line 13.

View File

@ -2481,6 +2481,9 @@
Smart Guides (⌘U) 智能参考线 (⌘U)
Smart Punctuation… 智能标点…
Smooth 平滑
Corner 尖角
Relative 相对
Absolute 绝对
Smooth Color 平滑颜色
Smooth Tool 平滑工具
Snap Curves To Lines 将曲线对齐到直线

Can't render this file because it contains an unexpected character in line 2 and column 73.

View File

@ -2567,6 +2567,9 @@
Smart Guides (⌘U) 智慧型參考線 (⌘U)
Smart Punctuation… 智慧型標點…
Smooth 平滑
Corner 角點
Relative 相對
Absolute 絕對
Smooth Color 平滑顏色
Smooth Tool 平滑工具
Snap Curves To Lines 將曲線靠齊線條

Can't render this file because it contains an unexpected character in line 6 and column 47.