feat(udg): instrument parameter blocks; o1nk's UI under fux-capacity #210
No reviewers
Labels
No labels
build-dist
priority
P1
priority
P2
priority
P3
priority
P4
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Toilville/toilville-design!210
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/udg-param-blocks"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Adds a parameter-UI vocabulary to UDG so a plugin's UI can be defined once here and rendered by whichever client hosts it. The first user is o1nk (FUX CAPACITY), which ships as an AUv3 and as a CLAP for the sndstation handhelds.
Scope
One family: instrument parameter UI.
forgeblock.yml): a new "Instrument · programmatic" group withpage_strip,param_page(a composite ofparam_knob/param_enum/param_toggle), and anon_adjustevent. The event covers stepped value changes per the APG slider and spinbutton patterns, and also maps to the gamepad. A control binds to a parameter by OPSL identifier only. Range, default and value names stay in each client's own parameter table, which each plugin build already checks against its OPSL device. UDG never restates a number the DSP owns.surface_profiles.yml):auv3.instrument(swift): the Audio Unit's own view inside a host.handheld.display(newclapdestination): the plugin draws its own screen through the CLAP display extension. The d-pad moves focus and steps values; the shoulder buttons change page.ux.ymlplaces the parameter panel on both surfaces, and the client chooses which one it renders.o1nk.forgeblock.jsonis o1nk's UI: oneparam_pageper page of o1nk's OPSL movemap layout.forgeblock_validatenow walks the controls of aparam_page.min/max/default/valueson a control.Split out, not in this PR:
clapdestination. Today the board draws only flutter, swift, cli and wordpress, and adding a tab changes all 13 boards.Testing
just check: all gates pass, including WCAG channel reductions for the 5 new blocks, forgeblock validation (38 blocks, 28 fixtures), and artifact/docs drift.pytest generator/tests/: 344 passed.headerinside aparam_page, and astyle: dial.maxon a control, a bareparam: cutoff, and a non-control block inside a page.origin/mainrebuilds with 0 changes. So all 86 regenerateddist/files come from this change: every product's block catalog gains the new group.scripts/udg_parity.py(branchfeat/clap-handheldon peterswimm/01nk) checkso1nk.forgeblock.jsonagainst the vendored OPSL device and movemap, and against the CLAP's remote-controls pages.Impact Statement
on_adjustevent carries agamepadfield, which no other event has.param_pageis a new composite withcontrolschildren.forgeblock.ymlorsurface_profiles.yml.handheld.displayadds aninput:map, which is descriptive and not read by the generators.dist/files (see Testing).clapdestination value. No generator emits code for it yet.design_mappingchange.cli.80colsurface. It was a placeholder with no consumer.unknown, which is non-required, so they show a placeholder rather than failing.Docs
Each new block carries
fields:descriptions inforgeblock.yml. The fux-capacitymeta.ymlandux.ymlcomments explain the model. The o1nk side is documented in itsclap/README.md.